diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2010-02-28 13:11:21 -0500 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2010-02-28 13:11:21 -0500 |
commit | 3e012725e07941841bb4213fa9bb8b56abd01f18 (patch) | |
tree | 3fc739794ec1d1063deedf6b6c09d4f2e1889fbc /test/test_cmdline.py | |
parent | e7ccc57e7346011bb4f5911d4268ebd3e4393cfc (diff) | |
download | python-coveragepy-git-3e012725e07941841bb4213fa9bb8b56abd01f18.tar.gz |
If the user's code calls sys.exit(), honor the request and exit with that status. Fixes issue #50.
Diffstat (limited to 'test/test_cmdline.py')
-rw-r--r-- | test/test_cmdline.py | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/test/test_cmdline.py b/test/test_cmdline.py index 56242681..c530f890 100644 --- a/test/test_cmdline.py +++ b/test/test_cmdline.py @@ -3,6 +3,8 @@ import os, pprint, re, shlex, sys, textwrap, unittest import mock import coverage +import coverage.cmdline +from coverage.misc import ExceptionDuringRun sys.path.insert(0, os.path.split(__file__)[0]) # Force relative import for Py3k from coveragetest import CoverageTest, OK, ERR @@ -537,5 +539,62 @@ class CmdLineStdoutTest(CmdLineTest): assert "help" in out +class CmdMainTest(CoverageTest): + """Tests of coverage.cmdline.main(), using mocking for isolation.""" + + class CoverageScriptStub(object): + """A stub for coverage.cmdline.CoverageScript, used by CmdMainTest.""" + + def command_line(self, argv): + """Stub for command_line, the arg determines what it will do.""" + if argv[0] == 'hello': + print("Hello, world!") + elif argv[0] == 'raise': + try: + raise Exception("oh noes!") + except: + raise ExceptionDuringRun(*sys.exc_info()) + elif argv[0] == 'internalraise': + raise ValueError("coverage is broken") + elif argv[0] == 'exit': + sys.exit(23) + else: + raise AssertionError("Bad CoverageScriptStub: %r"% (argv,)) + return 0 + + def setUp(self): + super(CmdMainTest, self).setUp() + self.old_CoverageScript = coverage.cmdline.CoverageScript + coverage.cmdline.CoverageScript = self.CoverageScriptStub + + def tearDown(self): + coverage.cmdline.CoverageScript = self.old_CoverageScript + super(CmdMainTest, self).tearDown() + + def test_normal(self): + ret = coverage.cmdline.main(['hello']) + self.assertEqual(ret, 0) + self.assertEqual(self.stdout(), "Hello, world!\n") + + def test_raise(self): + ret = coverage.cmdline.main(['raise']) + self.assertEqual(ret, 1) + self.assertEqual(self.stdout(), "") + err = self.stderr().split('\n') + self.assertEqual(err[0], 'Traceback (most recent call last):') + self.assertEqual(err[-3], ' raise Exception("oh noes!")') + self.assertEqual(err[-2], 'Exception: oh noes!') + + def test_internalraise(self): + self.assertRaisesRegexp(ValueError, + "coverage is broken", + coverage.cmdline.main, ['internalraise'] + ) + + def test_exit(self): + ret = coverage.cmdline.main(['exit']) + self.assertEqual(ret, 23) + + if __name__ == '__main__': unittest.main() |