3 new commits in pytest: https://bitbucket.org/hpk42/pytest/commits/bca2dc5e59dd/ Changeset: bca2dc5e59dd User: katarzynaanna Date: 2013-07-06 15:43:59 Summary: improved reporting
added intermediate level of quiet reporting: * -q now shows short summary (# passed/failed tests + time) * the former -q is now -qq Affected #: 2 files diff -r 29461bb5660a9c38aed9a8762401afa8f9188149 -r bca2dc5e59ddfe825771be634a74bf79598bcd5e _pytest/terminal.py --- a/_pytest/terminal.py +++ b/_pytest/terminal.py @@ -44,7 +44,7 @@ pass else: config._cleanup.append(lambda: newstdout.close()) - assert stdout.encoding == newstdout.encoding + assert stdout.encoding == newstdout.encoding stdout = newstdout reporter = TerminalReporter(config, stdout) @@ -105,7 +105,7 @@ self.hasmarkup = self._tw.hasmarkup def hasopt(self, char): - char = {'xfailed': 'x', 'skipped': 's'}.get(char,char) + char = {'xfailed': 'x', 'skipped': 's'}.get(char, char) return char in self.reportchars def write_fspath_result(self, fspath, res): @@ -154,7 +154,7 @@ def pytest_plugin_registered(self, plugin): if self.config.option.traceconfig: - msg = "PLUGIN registered: %s" %(plugin,) + msg = "PLUGIN registered: %s" % (plugin,) # XXX this event may happen during setup/teardown time # which unfortunately captures our output here # which garbles our output if we use self.write_line @@ -209,7 +209,7 @@ self.currentfspath = -2 def pytest_collection(self): - if not self.hasmarkup and self.config.option.verbose >=1: + if not self.hasmarkup and self.config.option.verbose >= 1: self.write("collecting ... ", bold=True) def pytest_collectreport(self, report): @@ -325,8 +325,8 @@ stack.append(col) #if col.name == "()": # continue - indent = (len(stack)-1) * " " - self._tw.line("%s%s" %(indent, col)) + indent = (len(stack) - 1) * " " + self._tw.line("%s%s" % (indent, col)) def pytest_sessionfinish(self, exitstatus, __multicall__): __multicall__.execute() @@ -452,9 +452,9 @@ if key: # setup/teardown reports have an empty key, ignore them val = self.stats.get(key, None) if val: - parts.append("%d %s" %(len(val), key)) + parts.append("%d %s" % (len(val), key)) line = ", ".join(parts) - msg = "%s in %.2f seconds" %(line, session_duration) + msg = "%s in %.2f seconds" % (line, session_duration) if self.verbosity >= 0: markup = dict(bold=True) if 'failed' in self.stats: @@ -462,6 +462,10 @@ else: markup['green'] = True self.write_sep("=", msg, **markup) + if self.verbosity == -1: + if line: + self.write("%s, " % line) + self.write("time: %.2f seconds\n" % session_duration) #else: # self.write_line(msg, bold=True) @@ -475,7 +479,7 @@ if m: l.append("-m %r" % m) if l: - self.write_sep("=", "%d tests deselected by %r" %( + self.write_sep("=", "%d tests deselected by %r" % ( len(self.stats['deselected']), " ".join(l)), bold=True) def repr_pythonversion(v=None): diff -r 29461bb5660a9c38aed9a8762401afa8f9188149 -r bca2dc5e59ddfe825771be634a74bf79598bcd5e testing/test_terminal.py --- a/testing/test_terminal.py +++ b/testing/test_terminal.py @@ -1,7 +1,7 @@ """ terminal reporting of the full testing process. """ -import pytest,py +import pytest, py import sys from _pytest.terminal import TerminalReporter, repr_pythonversion, getreportopt @@ -32,7 +32,7 @@ metafunc.addcall(id="verbose", funcargs={'option': Option(verbose=True)}) metafunc.addcall(id="quiet", - funcargs={'option': Option(verbose=-1)}) + funcargs={'option': Option(verbose= -1)}) metafunc.addcall(id="fulltrace", funcargs={'option': Option(fulltrace=True)}) @@ -286,7 +286,7 @@ try: monkeypatch.setattr(sys, 'version_info', (2, 5, 1, 'final', 0)) assert repr_pythonversion() == "2.5.1-final-0" - py.std.sys.version_info = x = (2,3) + py.std.sys.version_info = x = (2, 3) assert repr_pythonversion() == str(x) finally: monkeypatch.undo() # do this early as pytest can get confused @@ -411,7 +411,7 @@ verinfo = ".".join(map(str, py.std.sys.version_info[:3])) result.stdout.fnmatch_lines([ "*===== test session starts ====*", - "platform %s -- Python %s*" %( + "platform %s -- Python %s*" % ( py.std.sys.platform, verinfo), # , py.std.sys.executable), "*test_header_trailer_info.py .", "=* 1 passed in *.[0-9][0-9] seconds *=", @@ -473,6 +473,17 @@ assert 'test session starts' not in s assert p1.basename not in s assert "===" not in s + assert "passed" in s + + def test_more_quiet_reporting(self, testdir): + p1 = testdir.makepyfile("def test_pass(): pass") + result = testdir.runpytest(p1, '-qq') + s = result.stdout.str() + assert 'test session starts' not in s + assert p1.basename not in s + assert "===" not in s + assert "passed" not in s + def test_fail_extra_reporting(testdir): p = testdir.makepyfile("def test_this(): assert 0") @@ -679,5 +690,5 @@ """) result = testdir.runpytest("--tb=native") result.stdout.fnmatch_lines([ - '*File *test_tbstyle_native_setup_error.py", line *, in setup_error_fixture*' + '*File *test_tbstyle_native_setup_error.py", line *, in setup_error_fixture*' ]) https://bitbucket.org/hpk42/pytest/commits/71ae07462c66/ Changeset: 71ae07462c66 User: katarzynaanna Date: 2013-07-06 15:54:33 Summary: merge Affected #: 5 files diff -r bca2dc5e59ddfe825771be634a74bf79598bcd5e -r 71ae07462c66ccea05901442fb0461d7834aea1d CHANGELOG --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,9 @@ Changes between 2.3.5 and 2.4.DEV ----------------------------------- +- fix issue300 - Fix order of conftest loading when starting py.test + in a subdirectory. + - fix issue323 - sorting of many module-scoped arg parametrizations - add support for setUpModule/tearDownModule detection, thanks Brian Okken. diff -r bca2dc5e59ddfe825771be634a74bf79598bcd5e -r 71ae07462c66ccea05901442fb0461d7834aea1d _pytest/config.py --- a/_pytest/config.py +++ b/_pytest/config.py @@ -196,27 +196,20 @@ self.getconftestmodules(x) def getconftestmodules(self, path): - """ return a list of imported conftest modules for the given path. """ try: clist = self._path2confmods[path] except KeyError: if path is None: - raise ValueError("missing default confest.") - dp = path.dirpath() + raise ValueError("missing default conftest.") clist = [] - if dp != path: - cutdir = self._confcutdir - if cutdir and path != cutdir and not path.relto(cutdir): - pass - else: - conftestpath = path.join("conftest.py") - if conftestpath.check(file=1): - clist.append(self.importconftest(conftestpath)) - clist[:0] = self.getconftestmodules(dp) + for parent in path.parts(): + if self._confcutdir and self._confcutdir.relto(parent): + continue + conftestpath = parent.join("conftest.py") + if conftestpath.check(file=1): + clist.append(self.importconftest(conftestpath)) self._path2confmods[path] = clist - # be defensive: avoid changes from caller side to - # affect us by always returning a copy of the actual list - return clist[:] + return clist def rget(self, name, path=None): mod, value = self.rget_with_confmod(name, path) diff -r bca2dc5e59ddfe825771be634a74bf79598bcd5e -r 71ae07462c66ccea05901442fb0461d7834aea1d testing/python/fixture.py --- a/testing/python/fixture.py +++ b/testing/python/fixture.py @@ -102,6 +102,77 @@ "*2 passed*" ]) + def test_extend_fixture_module_class(self, testdir): + testfile = testdir.makepyfile(""" + import pytest + + @pytest.fixture + def spam(): + return 'spam' + + class TestSpam: + + @pytest.fixture + def spam(self, spam): + return spam * 2 + + def test_spam(self, spam): + assert spam == 'spamspam' + """) + result = testdir.runpytest() + result.stdout.fnmatch_lines(["*1 passed*"]) + result = testdir.runpytest(testfile) + result.stdout.fnmatch_lines(["*1 passed*"]) + + def test_extend_fixture_conftest_module(self, testdir): + testdir.makeconftest(""" + import pytest + + @pytest.fixture + def spam(): + return 'spam' + """) + testfile = testdir.makepyfile(""" + import pytest + + @pytest.fixture + def spam(spam): + return spam * 2 + + def test_spam(spam): + assert spam == 'spamspam' + """) + result = testdir.runpytest() + result.stdout.fnmatch_lines(["*1 passed*"]) + result = testdir.runpytest(testfile) + result.stdout.fnmatch_lines(["*1 passed*"]) + + def test_extend_fixture_conftest_conftest(self, testdir): + testdir.makeconftest(""" + import pytest + + @pytest.fixture + def spam(): + return 'spam' + """) + pkg = testdir.mkpydir("pkg") + pkg.join("conftest.py").write(py.code.Source(""" + import pytest + + @pytest.fixture + def spam(spam): + return spam * 2 + """)) + testfile = pkg.join("test_spam.py") + testfile.write(py.code.Source(""" + def test_spam(spam): + assert spam == "spamspam" + """)) + result = testdir.runpytest() + result.stdout.fnmatch_lines(["*1 passed*"]) + result = testdir.runpytest(testfile) + result.stdout.fnmatch_lines(["*1 passed*"]) + def test_funcarg_lookup_error(self, testdir): p = testdir.makepyfile(""" def test_lookup_error(unknown): diff -r bca2dc5e59ddfe825771be634a74bf79598bcd5e -r 71ae07462c66ccea05901442fb0461d7834aea1d testing/test_conftest.py --- a/testing/test_conftest.py +++ b/testing/test_conftest.py @@ -204,3 +204,14 @@ """)) result = testdir.runpytest("-h", "--confcutdir=%s" % x, x) result.stdout.fnmatch_lines(["*--xyz*"]) + +def test_conftest_import_order(testdir, monkeypatch): + ct1 = testdir.makeconftest("") + sub = testdir.mkdir("sub") + ct2 = sub.join("conftest.py") + ct2.write("") + def impct(p): + return p + conftest = Conftest() + monkeypatch.setattr(conftest, 'importconftest', impct) + assert conftest.getconftestmodules(sub) == [ct1, ct2] diff -r bca2dc5e59ddfe825771be634a74bf79598bcd5e -r 71ae07462c66ccea05901442fb0461d7834aea1d testing/test_terminal.py --- a/testing/test_terminal.py +++ b/testing/test_terminal.py @@ -654,9 +654,9 @@ """) result = testdir.runpytest("a") result.stdout.fnmatch_lines([ + "*hello: 42*", "line1", str(testdir.tmpdir), - "*hello: 42*", ]) @pytest.mark.xfail("not hasattr(os, 'dup')") https://bitbucket.org/hpk42/pytest/commits/c1bf2cd59fb7/ Changeset: c1bf2cd59fb7 User: hpk42 Date: 2013-07-06 16:03:27 Summary: Merged in katarzynaanna/pytest (pull request #42) Improved reporting Affected #: 2 files diff -r c3a0a8895e55c89070142e3849959464d08514b6 -r c1bf2cd59fb7accc4835ff34ca8551b1155a1ae2 _pytest/terminal.py --- a/_pytest/terminal.py +++ b/_pytest/terminal.py @@ -44,7 +44,7 @@ pass else: config._cleanup.append(lambda: newstdout.close()) - assert stdout.encoding == newstdout.encoding + assert stdout.encoding == newstdout.encoding stdout = newstdout reporter = TerminalReporter(config, stdout) @@ -105,7 +105,7 @@ self.hasmarkup = self._tw.hasmarkup def hasopt(self, char): - char = {'xfailed': 'x', 'skipped': 's'}.get(char,char) + char = {'xfailed': 'x', 'skipped': 's'}.get(char, char) return char in self.reportchars def write_fspath_result(self, fspath, res): @@ -154,7 +154,7 @@ def pytest_plugin_registered(self, plugin): if self.config.option.traceconfig: - msg = "PLUGIN registered: %s" %(plugin,) + msg = "PLUGIN registered: %s" % (plugin,) # XXX this event may happen during setup/teardown time # which unfortunately captures our output here # which garbles our output if we use self.write_line @@ -209,7 +209,7 @@ self.currentfspath = -2 def pytest_collection(self): - if not self.hasmarkup and self.config.option.verbose >=1: + if not self.hasmarkup and self.config.option.verbose >= 1: self.write("collecting ... ", bold=True) def pytest_collectreport(self, report): @@ -325,8 +325,8 @@ stack.append(col) #if col.name == "()": # continue - indent = (len(stack)-1) * " " - self._tw.line("%s%s" %(indent, col)) + indent = (len(stack) - 1) * " " + self._tw.line("%s%s" % (indent, col)) def pytest_sessionfinish(self, exitstatus, __multicall__): __multicall__.execute() @@ -452,9 +452,9 @@ if key: # setup/teardown reports have an empty key, ignore them val = self.stats.get(key, None) if val: - parts.append("%d %s" %(len(val), key)) + parts.append("%d %s" % (len(val), key)) line = ", ".join(parts) - msg = "%s in %.2f seconds" %(line, session_duration) + msg = "%s in %.2f seconds" % (line, session_duration) if self.verbosity >= 0: markup = dict(bold=True) if 'failed' in self.stats: @@ -462,6 +462,10 @@ else: markup['green'] = True self.write_sep("=", msg, **markup) + if self.verbosity == -1: + if line: + self.write("%s, " % line) + self.write("time: %.2f seconds\n" % session_duration) #else: # self.write_line(msg, bold=True) @@ -475,7 +479,7 @@ if m: l.append("-m %r" % m) if l: - self.write_sep("=", "%d tests deselected by %r" %( + self.write_sep("=", "%d tests deselected by %r" % ( len(self.stats['deselected']), " ".join(l)), bold=True) def repr_pythonversion(v=None): diff -r c3a0a8895e55c89070142e3849959464d08514b6 -r c1bf2cd59fb7accc4835ff34ca8551b1155a1ae2 testing/test_terminal.py --- a/testing/test_terminal.py +++ b/testing/test_terminal.py @@ -1,7 +1,7 @@ """ terminal reporting of the full testing process. """ -import pytest,py +import pytest, py import sys from _pytest.terminal import TerminalReporter, repr_pythonversion, getreportopt @@ -32,7 +32,7 @@ metafunc.addcall(id="verbose", funcargs={'option': Option(verbose=True)}) metafunc.addcall(id="quiet", - funcargs={'option': Option(verbose=-1)}) + funcargs={'option': Option(verbose= -1)}) metafunc.addcall(id="fulltrace", funcargs={'option': Option(fulltrace=True)}) @@ -286,7 +286,7 @@ try: monkeypatch.setattr(sys, 'version_info', (2, 5, 1, 'final', 0)) assert repr_pythonversion() == "2.5.1-final-0" - py.std.sys.version_info = x = (2,3) + py.std.sys.version_info = x = (2, 3) assert repr_pythonversion() == str(x) finally: monkeypatch.undo() # do this early as pytest can get confused @@ -411,7 +411,7 @@ verinfo = ".".join(map(str, py.std.sys.version_info[:3])) result.stdout.fnmatch_lines([ "*===== test session starts ====*", - "platform %s -- Python %s*" %( + "platform %s -- Python %s*" % ( py.std.sys.platform, verinfo), # , py.std.sys.executable), "*test_header_trailer_info.py .", "=* 1 passed in *.[0-9][0-9] seconds *=", @@ -473,6 +473,17 @@ assert 'test session starts' not in s assert p1.basename not in s assert "===" not in s + assert "passed" in s + + def test_more_quiet_reporting(self, testdir): + p1 = testdir.makepyfile("def test_pass(): pass") + result = testdir.runpytest(p1, '-qq') + s = result.stdout.str() + assert 'test session starts' not in s + assert p1.basename not in s + assert "===" not in s + assert "passed" not in s + def test_fail_extra_reporting(testdir): p = testdir.makepyfile("def test_this(): assert 0") @@ -679,5 +690,5 @@ """) result = testdir.runpytest("--tb=native") result.stdout.fnmatch_lines([ - '*File *test_tbstyle_native_setup_error.py", line *, in setup_error_fixture*' + '*File *test_tbstyle_native_setup_error.py", line *, in setup_error_fixture*' ]) Repository URL: https://bitbucket.org/hpk42/pytest/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. _______________________________________________ pytest-commit mailing list pytest-commit@python.org http://mail.python.org/mailman/listinfo/pytest-commit