summaryrefslogtreecommitdiff
path: root/test/test_cmdline.py
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2010-02-28 13:11:21 -0500
committerNed Batchelder <ned@nedbatchelder.com>2010-02-28 13:11:21 -0500
commit3e012725e07941841bb4213fa9bb8b56abd01f18 (patch)
tree3fc739794ec1d1063deedf6b6c09d4f2e1889fbc /test/test_cmdline.py
parente7ccc57e7346011bb4f5911d4268ebd3e4393cfc (diff)
downloadpython-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.py59
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()