Merged hpk42/pytest into default
This commit is contained in:
commit
0e3abdc1af
51
ISSUES.txt
51
ISSUES.txt
|
@ -1,10 +1,4 @@
|
||||||
|
|
||||||
improve / add to dependency/test resource injection
|
|
||||||
-------------------------------------------------------------
|
|
||||||
tags: wish feature docs
|
|
||||||
|
|
||||||
write up better examples showing the connection between
|
|
||||||
the two.
|
|
||||||
|
|
||||||
refine parametrize API
|
refine parametrize API
|
||||||
-------------------------------------------------------------
|
-------------------------------------------------------------
|
||||||
|
@ -94,20 +88,6 @@ appropriately to avoid this issue. Moreover/Alternatively, we could
|
||||||
record which implementations of a hook succeeded and only call their
|
record which implementations of a hook succeeded and only call their
|
||||||
teardown.
|
teardown.
|
||||||
|
|
||||||
consider and document __init__ file usage in test directories
|
|
||||||
---------------------------------------------------------------
|
|
||||||
tags: bug core
|
|
||||||
|
|
||||||
Currently, a test module is imported with its fully qualified
|
|
||||||
package path, determined by checking __init__ files upwards.
|
|
||||||
This has the side effect that a source package at the root
|
|
||||||
of the test dir could be imported as well. This is somewhat
|
|
||||||
convenient but complicates the picture for running tests against
|
|
||||||
different versions of a package. Also, implicit sys.path
|
|
||||||
manipulations are problematic per-se. Maybe factorting out
|
|
||||||
a pytest_addsyspath hook which can be disabled from the command line
|
|
||||||
makes sense. In any case documentation/recommendations for
|
|
||||||
certain scenarios makes sense.
|
|
||||||
|
|
||||||
relax requirement to have tests/testing contain an __init__
|
relax requirement to have tests/testing contain an __init__
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
|
@ -220,32 +200,10 @@ to further reduce py.test globality. Also consider
|
||||||
having py.test.config and ensuretemp coming from
|
having py.test.config and ensuretemp coming from
|
||||||
a plugin rather than being there from the start.
|
a plugin rather than being there from the start.
|
||||||
|
|
||||||
consider allowing funcargs for setup methods
|
|
||||||
--------------------------------------------------------------
|
|
||||||
tags: experimental-wish
|
|
||||||
|
|
||||||
Users have expressed the wish to have funcargs available to setup
|
|
||||||
functions. Experiment with allowing funcargs there - it might
|
|
||||||
also help to make the py.test.ensuretemp and config deprecation.
|
|
||||||
For filling funcargs for setup methods, we could call funcarg
|
|
||||||
factories with a request object that not have a cls/function
|
|
||||||
attributes. However, how to handle parametrized test functions
|
|
||||||
and funcargs?
|
|
||||||
|
|
||||||
maybe introduce a setup method like:
|
|
||||||
|
|
||||||
setup_invocation(self, request)
|
|
||||||
|
|
||||||
which has full access to the test invocation through "request"
|
|
||||||
through which you can get funcargvalues, use cached_setup etc.
|
|
||||||
Therefore, the access to funcargs would be indirect but it
|
|
||||||
could be consistently implemented. setup_invocation() would
|
|
||||||
be a "glue" function for bringing together the xUnit and funcargs
|
|
||||||
world.
|
|
||||||
|
|
||||||
consider pytest_addsyspath hook
|
consider pytest_addsyspath hook
|
||||||
-----------------------------------------
|
-----------------------------------------
|
||||||
tags:
|
tags: wish
|
||||||
|
|
||||||
py.test could call a new pytest_addsyspath() in order to systematically
|
py.test could call a new pytest_addsyspath() in order to systematically
|
||||||
allow manipulation of sys.path and to inhibit it via --no-addsyspath
|
allow manipulation of sys.path and to inhibit it via --no-addsyspath
|
||||||
|
@ -255,13 +213,6 @@ Alternatively it could also be done via the config object
|
||||||
and pytest_configure.
|
and pytest_configure.
|
||||||
|
|
||||||
|
|
||||||
show plugin information in test header
|
|
||||||
----------------------------------------------------------------
|
|
||||||
tags: feature
|
|
||||||
|
|
||||||
Now that external plugins are becoming more numerous
|
|
||||||
it would be useful to have external plugins along with
|
|
||||||
their versions displayed as a header line.
|
|
||||||
|
|
||||||
deprecate global py.test.config usage
|
deprecate global py.test.config usage
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
|
|
|
@ -174,9 +174,9 @@ def test_addoption_parser_epilog(testdir):
|
||||||
result.stdout.fnmatch_lines(["hint: hello world", "hint: from me too"])
|
result.stdout.fnmatch_lines(["hint: hello world", "hint: from me too"])
|
||||||
|
|
||||||
@pytest.mark.skipif("sys.version_info < (2,5)")
|
@pytest.mark.skipif("sys.version_info < (2,5)")
|
||||||
def test_argcomplete(testdir):
|
def test_argcomplete(testdir, monkeypatch):
|
||||||
if not py.path.local.sysfind('bash'):
|
if not py.path.local.sysfind('bash'):
|
||||||
pytest.skip("bash not available")
|
pytest.skip("bash not available")
|
||||||
import os
|
import os
|
||||||
script = os.path.join(os.getcwd(), 'test_argcomplete')
|
script = os.path.join(os.getcwd(), 'test_argcomplete')
|
||||||
with open(str(script), 'w') as fp:
|
with open(str(script), 'w') as fp:
|
||||||
|
@ -185,13 +185,16 @@ def test_argcomplete(testdir):
|
||||||
# so we use bash
|
# so we use bash
|
||||||
fp.write('COMP_WORDBREAKS="$COMP_WORDBREAKS" $(which py.test) '
|
fp.write('COMP_WORDBREAKS="$COMP_WORDBREAKS" $(which py.test) '
|
||||||
'8>&1 9>&2')
|
'8>&1 9>&2')
|
||||||
os.environ['_ARGCOMPLETE'] = "1"
|
# alternative would be exteneded Testdir.{run(),_run(),popen()} to be able
|
||||||
os.environ['_ARGCOMPLETE_IFS'] = "\x0b"
|
# to handle a keyword argument env that replaces os.environ in popen or
|
||||||
os.environ['COMP_WORDBREAKS'] = ' \\t\\n"\\\'><=;|&(:'
|
# extends the copy, advantage: could not forget to restore
|
||||||
|
monkeypatch.setenv('_ARGCOMPLETE', "1")
|
||||||
|
monkeypatch.setenv('_ARGCOMPLETE_IFS',"\x0b")
|
||||||
|
monkeypatch.setenv('COMP_WORDBREAKS', ' \\t\\n"\\\'><=;|&(:')
|
||||||
|
|
||||||
arg = '--fu'
|
arg = '--fu'
|
||||||
os.environ['COMP_LINE'] = "py.test " + arg
|
monkeypatch.setenv('COMP_LINE', "py.test " + arg)
|
||||||
os.environ['COMP_POINT'] = str(len(os.environ['COMP_LINE']))
|
monkeypatch.setenv('COMP_POINT', str(len("py.test " + arg)))
|
||||||
result = testdir.run('bash', str(script), arg)
|
result = testdir.run('bash', str(script), arg)
|
||||||
print dir(result), result.ret
|
print dir(result), result.ret
|
||||||
if result.ret == 255:
|
if result.ret == 255:
|
||||||
|
@ -202,7 +205,8 @@ def test_argcomplete(testdir):
|
||||||
|
|
||||||
os.mkdir('test_argcomplete.d')
|
os.mkdir('test_argcomplete.d')
|
||||||
arg = 'test_argc'
|
arg = 'test_argc'
|
||||||
os.environ['COMP_LINE'] = "py.test " + arg
|
monkeypatch.setenv('COMP_LINE', "py.test " + arg)
|
||||||
os.environ['COMP_POINT'] = str(len(os.environ['COMP_LINE']))
|
monkeypatch.setenv('COMP_POINT', str(len('py.test ' + arg)))
|
||||||
result = testdir.run('bash', str(script), arg)
|
result = testdir.run('bash', str(script), arg)
|
||||||
result.stdout.fnmatch_lines(["test_argcomplete", "test_argcomplete.d/"])
|
result.stdout.fnmatch_lines(["test_argcomplete", "test_argcomplete.d/"])
|
||||||
|
# restore environment
|
||||||
|
|
Loading…
Reference in New Issue