from cStringIO import StringIO import os import sys import unittest class Test_TestProgram(unittest.TestCase): def test_discovery_from_dotted_path(self): loader = unittest.TestLoader() tests = [self] expectedPath = os.path.abspath(os.path.dirname(unittest.test.__file__)) self.wasRun = False def _find_tests(start_dir, pattern): self.wasRun = True self.assertEqual(start_dir, expectedPath) return tests loader._find_tests = _find_tests suite = loader.discover('unittest.test') self.assertTrue(self.wasRun) self.assertEqual(suite._tests, tests) # Horrible white box test def testNoExit(self): result = object() test = object() class FakeRunner(object): def run(self, test): self.test = test return result runner = FakeRunner() oldParseArgs = unittest.TestProgram.parseArgs def restoreParseArgs(): unittest.TestProgram.parseArgs = oldParseArgs unittest.TestProgram.parseArgs = lambda *args: None self.addCleanup(restoreParseArgs) def removeTest(): del unittest.TestProgram.test unittest.TestProgram.test = test self.addCleanup(removeTest) program = unittest.TestProgram(testRunner=runner, exit=False, verbosity=2) self.assertEqual(program.result, result) self.assertEqual(runner.test, test) self.assertEqual(program.verbosity, 2) class FooBar(unittest.TestCase): def testPass(self): assert True def testFail(self): assert False class FooBarLoader(unittest.TestLoader): """Test loader that returns a suite containing FooBar.""" def loadTestsFromModule(self, module): return self.suiteClass( [self.loadTestsFromTestCase(Test_TestProgram.FooBar)]) def test_NonExit(self): program = unittest.main(exit=False, argv=["foobar"], testRunner=unittest.TextTestRunner(stream=StringIO()), testLoader=self.FooBarLoader()) self.assertTrue(hasattr(program, 'result')) def test_Exit(self): self.assertRaises( SystemExit, unittest.main, argv=["foobar"], testRunner=unittest.TextTestRunner(stream=StringIO()), exit=True, testLoader=self.FooBarLoader()) def test_ExitAsDefault(self): self.assertRaises( SystemExit, unittest.main, argv=["foobar"], testRunner=unittest.TextTestRunner(stream=StringIO()), testLoader=self.FooBarLoader()) class InitialisableProgram(unittest.TestProgram): exit = False result = None verbosity = 1 defaultTest = None testRunner = None testLoader = unittest.defaultTestLoader progName = 'test' test = 'test' def __init__(self, *args): pass RESULT = object() class FakeRunner(object): initArgs = None test = None raiseError = False def __init__(self, **kwargs): FakeRunner.initArgs = kwargs if FakeRunner.raiseError: FakeRunner.raiseError = False raise TypeError def run(self, test): FakeRunner.test = test return RESULT class TestCommandLineArgs(unittest.TestCase): def setUp(self): self.program = InitialisableProgram() self.program.createTests = lambda: None FakeRunner.initArgs = None FakeRunner.test = None FakeRunner.raiseError = False def testHelpAndUnknown(self): program = self.program def usageExit(msg=None): program.msg = msg program.exit = True program.usageExit = usageExit for opt in '-h', '-H', '--help': program.exit = False program.parseArgs([None, opt]) self.assertTrue(program.exit) self.assertIsNone(program.msg) program.parseArgs([None, '-$']) self.assertTrue(program.exit) self.assertIsNotNone(program.msg) def testVerbosity(self): program = self.program for opt in '-q', '--quiet': program.verbosity = 1 program.parseArgs([None, opt]) self.assertEqual(program.verbosity, 0) for opt in '-v', '--verbose': program.verbosity = 1 program.parseArgs([None, opt]) self.assertEqual(program.verbosity, 2) def testBufferCatchFailfast(self): program = self.program for arg, attr in (('buffer', 'buffer'), ('failfast', 'failfast'), ('catch', 'catchbreak')): if attr == 'catch' and not hasInstallHandler: continue short_opt = '-%s' % arg[0] long_opt = '--%s' % arg for opt in short_opt, long_opt: setattr(program, attr, None) program.parseArgs([None, opt]) self.assertTrue(getattr(program, attr)) for opt in short_opt, long_opt: not_none = object() setattr(program, attr, not_none) program.parseArgs([None, opt]) self.assertEqual(getattr(program, attr), not_none) def testRunTestsRunnerClass(self): program = self.program program.testRunner = FakeRunner program.verbosity = 'verbosity' program.failfast = 'failfast' program.buffer = 'buffer' program.runTests() self.assertEqual(FakeRunner.initArgs, {'verbosity': 'verbosity', 'failfast': 'failfast', 'buffer': 'buffer'}) self.assertEqual(FakeRunner.test, 'test') self.assertIs(program.result, RESULT) def testRunTestsRunnerInstance(self): program = self.program program.testRunner = FakeRunner() FakeRunner.initArgs = None program.runTests() # A new FakeRunner should not have been instantiated self.assertIsNone(FakeRunner.initArgs) self.assertEqual(FakeRunner.test, 'test') self.assertIs(program.result, RESULT) def testRunTestsOldRunnerClass(self): program = self.program FakeRunner.raiseError = True program.testRunner = FakeRunner program.verbosity = 'verbosity' program.failfast = 'failfast' program.buffer = 'buffer' program.test = 'test' program.runTests() # If initializing raises a type error it should be retried # without the new keyword arguments self.assertEqual(FakeRunner.initArgs, {}) self.assertEqual(FakeRunner.test, 'test') self.assertIs(program.result, RESULT) def testCatchBreakInstallsHandler(self): module = sys.modules['unittest.main'] original = module.installHandler def restore(): module.installHandler = original self.addCleanup(restore) self.installed = False def fakeInstallHandler(): self.installed = True module.installHandler = fakeInstallHandler program = self.program program.catchbreak = True program.testRunner = FakeRunner program.runTests() self.assertTrue(self.installed) if __name__ == '__main__': unittest.main()
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
.__init__.pyo.40009 | File | 906 B | 0644 |
|
.dummy.pyo.40009 | File | 130 B | 0644 |
|
.support.pyo.40009 | File | 5.86 KB | 0644 |
|
.test_assertions.pyo.40009 | File | 13.06 KB | 0644 |
|
.test_break.pyo.40009 | File | 9.91 KB | 0644 |
|
.test_case.pyo.40009 | File | 43.78 KB | 0644 |
|
.test_discovery.pyo.40009 | File | 16.18 KB | 0644 |
|
.test_functiontestcase.pyo.40009 | File | 5.94 KB | 0644 |
|
.test_loader.pyo.40009 | File | 47.9 KB | 0644 |
|
.test_result.pyo.40009 | File | 20.9 KB | 0644 |
|
.test_runner.pyo.40009 | File | 13.78 KB | 0644 |
|
.test_setups.pyo.40009 | File | 28.55 KB | 0644 |
|
.test_skipping.pyo.40009 | File | 9.37 KB | 0644 |
|
.test_suite.pyo.40009 | File | 15.13 KB | 0644 |
|
__init__.py | File | 514 B | 0644 |
|
__init__.pyc | File | 906 B | 0644 |
|
__init__.pyo | File | 906 B | 0644 |
|
dummy.py | File | 50 B | 0644 |
|
dummy.pyc | File | 130 B | 0644 |
|
dummy.pyo | File | 130 B | 0644 |
|
support.py | File | 3.39 KB | 0644 |
|
support.pyc | File | 5.86 KB | 0644 |
|
support.pyo | File | 5.86 KB | 0644 |
|
test_assertions.py | File | 11.51 KB | 0644 |
|
test_assertions.pyc | File | 13.06 KB | 0644 |
|
test_assertions.pyo | File | 13.06 KB | 0644 |
|
test_break.py | File | 9.42 KB | 0644 |
|
test_break.pyc | File | 9.91 KB | 0644 |
|
test_break.pyo | File | 9.91 KB | 0644 |
|
test_case.py | File | 42.79 KB | 0644 |
|
test_case.pyc | File | 43.78 KB | 0644 |
|
test_case.pyo | File | 43.78 KB | 0644 |
|
test_discovery.py | File | 13.24 KB | 0644 |
|
test_discovery.pyc | File | 16.18 KB | 0644 |
|
test_discovery.pyo | File | 16.18 KB | 0644 |
|
test_functiontestcase.py | File | 5.4 KB | 0644 |
|
test_functiontestcase.pyc | File | 5.94 KB | 0644 |
|
test_functiontestcase.pyo | File | 5.94 KB | 0644 |
|
test_loader.py | File | 48.05 KB | 0644 |
|
test_loader.pyc | File | 47.9 KB | 0644 |
|
test_loader.pyo | File | 47.9 KB | 0644 |
|
test_program.py | File | 7.38 KB | 0644 |
|
test_program.pyc | File | 10.23 KB | 0644 |
|
test_program.pyo | File | 10.18 KB | 0644 |
|
test_result.py | File | 18.62 KB | 0644 |
|
test_result.pyc | File | 20.9 KB | 0644 |
|
test_result.pyo | File | 20.9 KB | 0644 |
|
test_runner.py | File | 8.36 KB | 0644 |
|
test_runner.pyc | File | 13.78 KB | 0644 |
|
test_runner.pyo | File | 13.78 KB | 0644 |
|
test_setups.py | File | 16.07 KB | 0644 |
|
test_setups.pyc | File | 28.55 KB | 0644 |
|
test_setups.pyo | File | 28.55 KB | 0644 |
|
test_skipping.py | File | 5.6 KB | 0644 |
|
test_skipping.pyc | File | 9.37 KB | 0644 |
|
test_skipping.pyo | File | 9.37 KB | 0644 |
|
test_suite.py | File | 11.79 KB | 0644 |
|
test_suite.pyc | File | 15.13 KB | 0644 |
|
test_suite.pyo | File | 15.13 KB | 0644 |
|