123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256 |
- from cStringIO import StringIO
- import os
- import sys
- import unittest
- import unittest.test
- 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()
|