1 new commit in pytest:

https://bitbucket.org/hpk42/pytest/changeset/a2574a0a06da/
changeset:   a2574a0a06da
user:        hpk42
date:        2012-05-17 23:11:23
summary:     fix issue143 - call unconfigure/sessionfinish always when
configure/sessionstart where called

use exitcode 4 (instead of 3 which signaled an internal error)
when an initial directory/file was not found
affected #:  6 files

diff -r 51389afee0d3d06792426377e93fee3941f0f490 -r 
a2574a0a06daf37c23a82b9a667b4d4798b67159 CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -10,6 +10,8 @@
 - fix issue 140: propperly get the real functions
   of bound classmethods for setup/teardown_class
 - fix issue #141: switch from the deceased paste.pocoo.org to bpaste.net
+- fix issue #143: call unconfigure/sessionfinish always when
+  configure/sessionstart where called
 
 Changes between 2.2.2 and 2.2.3
 ----------------------------------------


diff -r 51389afee0d3d06792426377e93fee3941f0f490 -r 
a2574a0a06daf37c23a82b9a667b4d4798b67159 _pytest/core.py
--- a/_pytest/core.py
+++ b/_pytest/core.py
@@ -465,13 +465,8 @@
     """ returned exit code integer, after an in-process testing run
     with the given command line arguments, preloading an optional list
     of passed in plugin objects. """
-    try:
-        config = _prepareconfig(args, plugins)
-        exitstatus = config.hook.pytest_cmdline_main(config=config)
-    except UsageError:
-        e = sys.exc_info()[1]
-        sys.stderr.write("ERROR: %s\n" %(e.args[0],))
-        exitstatus = 3
+    config = _prepareconfig(args, plugins)
+    exitstatus = config.hook.pytest_cmdline_main(config=config)
     return exitstatus
 
 class UsageError(Exception):


diff -r 51389afee0d3d06792426377e93fee3941f0f490 -r 
a2574a0a06daf37c23a82b9a667b4d4798b67159 _pytest/main.py
--- a/_pytest/main.py
+++ b/_pytest/main.py
@@ -10,6 +10,7 @@
 EXIT_TESTSFAILED = 1
 EXIT_INTERRUPTED = 2
 EXIT_INTERNALERROR = 3
+EXIT_USAGEERROR = 4
 
 name_re = py.std.re.compile("^[a-zA-Z_]\w*$")
 
@@ -65,30 +66,34 @@
     session.exitstatus = EXIT_OK
     initstate = 0
     try:
-        config.pluginmanager.do_configure(config)
-        initstate = 1
-        config.hook.pytest_sessionstart(session=session)
-        initstate = 2
-        doit(config, session)
-    except pytest.UsageError:
-        raise
-    except KeyboardInterrupt:
-        excinfo = py.code.ExceptionInfo()
-        config.hook.pytest_keyboard_interrupt(excinfo=excinfo)
-        session.exitstatus = EXIT_INTERRUPTED
-    except:
-        excinfo = py.code.ExceptionInfo()
-        config.pluginmanager.notify_exception(excinfo, config.option)
-        session.exitstatus = EXIT_INTERNALERROR
-        if excinfo.errisinstance(SystemExit):
-            sys.stderr.write("mainloop: caught Spurious SystemExit!\n")
-    if initstate >= 2:
-        config.hook.pytest_sessionfinish(session=session,
-            exitstatus=session.exitstatus or (session._testsfailed and 1))
-    if not session.exitstatus and session._testsfailed:
-        session.exitstatus = EXIT_TESTSFAILED
-    if initstate >= 1:
-        config.pluginmanager.do_unconfigure(config)
+        try:
+            config.pluginmanager.do_configure(config)
+            initstate = 1
+            config.hook.pytest_sessionstart(session=session)
+            initstate = 2
+            doit(config, session)
+        except pytest.UsageError:
+            msg = sys.exc_info()[1].args[0]
+            sys.stderr.write("ERROR: %s\n" %(msg,))
+            session.exitstatus = EXIT_USAGEERROR
+        except KeyboardInterrupt:
+            excinfo = py.code.ExceptionInfo()
+            config.hook.pytest_keyboard_interrupt(excinfo=excinfo)
+            session.exitstatus = EXIT_INTERRUPTED
+        except:
+            excinfo = py.code.ExceptionInfo()
+            config.pluginmanager.notify_exception(excinfo, config.option)
+            session.exitstatus = EXIT_INTERNALERROR
+            if excinfo.errisinstance(SystemExit):
+                sys.stderr.write("mainloop: caught Spurious SystemExit!\n")
+    finally:
+        if initstate >= 2:
+            config.hook.pytest_sessionfinish(session=session,
+                exitstatus=session.exitstatus or (session._testsfailed and 1))
+        if not session.exitstatus and session._testsfailed:
+            session.exitstatus = EXIT_TESTSFAILED
+        if initstate >= 1:
+            config.pluginmanager.do_unconfigure(config)
     return session.exitstatus
 
 def pytest_cmdline_main(config):


diff -r 51389afee0d3d06792426377e93fee3941f0f490 -r 
a2574a0a06daf37c23a82b9a667b4d4798b67159 doc/announce/release-2.2.4.txt
--- a/doc/announce/release-2.2.4.txt
+++ b/doc/announce/release-2.2.4.txt
@@ -32,3 +32,6 @@
 - fix issue 140: propperly get the real functions
   of bound classmethods for setup/teardown_class
 - fix issue #141: switch from the deceased paste.pocoo.org to bpaste.net
+- fix issue #143: call unconfigure/sessionfinish always when
+  configure/sessionstart where called
+


diff -r 51389afee0d3d06792426377e93fee3941f0f490 -r 
a2574a0a06daf37c23a82b9a667b4d4798b67159 testing/acceptance_test.py
--- a/testing/acceptance_test.py
+++ b/testing/acceptance_test.py
@@ -57,6 +57,22 @@
         assert result.ret != 0
         result.stderr.fnmatch_lines(["ERROR: file not found*asd"])
 
+    def test_file_not_found_unconfigure_issue143(self, testdir):
+        testdir.makeconftest("""
+            def pytest_configure():
+                print("---configure")
+            def pytest_unconfigure():
+                print("---unconfigure")
+        """)
+        result = testdir.runpytest("-s", "asd")
+        assert result.ret == 4 # EXIT_USAGEERROR
+        result.stderr.fnmatch_lines(["ERROR: file not found*asd"])
+        s = result.stdout.fnmatch_lines([
+            "*---configure",
+            "*---unconfigure",
+        ])
+        
+
     def test_config_preparse_plugin_option(self, testdir):
         testdir.makepyfile(pytest_xyz="""
             def pytest_addoption(parser):


diff -r 51389afee0d3d06792426377e93fee3941f0f490 -r 
a2574a0a06daf37c23a82b9a667b4d4798b67159 testing/test_terminal.py
--- a/testing/test_terminal.py
+++ b/testing/test_terminal.py
@@ -262,7 +262,7 @@
             not to have the items attribute
         """
         result = testdir.runpytest("--collectonly", "uhm_missing_path")
-        assert result.ret == 3
+        assert result.ret == 4
         result.stderr.fnmatch_lines([
             '*ERROR: file not found*',
         ])

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.
_______________________________________________
py-svn mailing list
py-svn@codespeak.net
http://codespeak.net/mailman/listinfo/py-svn

Reply via email to