diff options
author | Michael Foord <fuzzyman@voidspace.org.uk> | 2010-12-19 03:59:10 (GMT) |
---|---|---|
committer | Michael Foord <fuzzyman@voidspace.org.uk> | 2010-12-19 03:59:10 (GMT) |
commit | f100dbd6009e18bb1ab14fa6da8732751b1a9add (patch) | |
tree | f4e8500aa979023c5c9b37a7d5ddbdcb6daebc8e | |
parent | b3468f79efa45c8adaf86c0b9b797b9b3d4c12a2 (diff) | |
download | cpython-f100dbd6009e18bb1ab14fa6da8732751b1a9add.zip cpython-f100dbd6009e18bb1ab14fa6da8732751b1a9add.tar.gz cpython-f100dbd6009e18bb1ab14fa6da8732751b1a9add.tar.bz2 |
Fix minor issue in implementation of issue 10470.
-rw-r--r-- | Lib/unittest/main.py | 70 | ||||
-rw-r--r-- | Lib/unittest/test/test_discovery.py | 13 | ||||
-rw-r--r-- | Lib/unittest/test/test_program.py | 1 |
3 files changed, 54 insertions, 30 deletions
diff --git a/Lib/unittest/main.py b/Lib/unittest/main.py index b25d7ac..55d4e4b 100644 --- a/Lib/unittest/main.py +++ b/Lib/unittest/main.py @@ -147,38 +147,48 @@ class TestProgram(object): long_opts = ['help', 'verbose', 'quiet', 'failfast', 'catch', 'buffer'] try: options, args = getopt.getopt(argv[1:], 'hHvqfcb', long_opts) - for opt, value in options: - if opt in ('-h','-H','--help'): - self.usageExit() - if opt in ('-q','--quiet'): - self.verbosity = 0 - if opt in ('-v','--verbose'): - self.verbosity = 2 - if opt in ('-f','--failfast'): - if self.failfast is None: - self.failfast = True - # Should this raise an exception if -f is not valid? - if opt in ('-c','--catch'): - if self.catchbreak is None: - self.catchbreak = True - # Should this raise an exception if -c is not valid? - if opt in ('-b','--buffer'): - if self.buffer is None: - self.buffer = True - # Should this raise an exception if -b is not valid? - if len(args) == 0 and self.defaultTest is None: - # createTests will load tests from self.module - self.testNames = None - elif len(args) > 0: - self.testNames = _convert_names(args) - if __name__ == '__main__': - # to support python -m unittest ... - self.module = None - else: - self.testNames = (self.defaultTest,) - self.createTests() except getopt.error as msg: self.usageExit(msg) + return + + for opt, value in options: + if opt in ('-h','-H','--help'): + self.usageExit() + if opt in ('-q','--quiet'): + self.verbosity = 0 + if opt in ('-v','--verbose'): + self.verbosity = 2 + if opt in ('-f','--failfast'): + if self.failfast is None: + self.failfast = True + # Should this raise an exception if -f is not valid? + if opt in ('-c','--catch'): + if self.catchbreak is None: + self.catchbreak = True + # Should this raise an exception if -c is not valid? + if opt in ('-b','--buffer'): + if self.buffer is None: + self.buffer = True + # Should this raise an exception if -b is not valid? + + if len(args) == 0 and self.module is None: + # this allows "python -m unittest -v" to still work for + # test discovery. This means -c / -b / -v / -f options will + # be handled twice, which is harmless but not ideal. + self._do_discovery(argv[1:]) + return + + if len(args) == 0 and self.defaultTest is None: + # createTests will load tests from self.module + self.testNames = None + elif len(args) > 0: + self.testNames = _convert_names(args) + if __name__ == '__main__': + # to support python -m unittest ... + self.module = None + else: + self.testNames = (self.defaultTest,) + self.createTests() def createTests(self): if self.testNames is None: diff --git a/Lib/unittest/test/test_discovery.py b/Lib/unittest/test/test_discovery.py index 52a711a..e688f8e 100644 --- a/Lib/unittest/test/test_discovery.py +++ b/Lib/unittest/test/test_discovery.py @@ -231,6 +231,19 @@ class TestDiscovery(unittest.TestCase): program.parseArgs(['something']) self.assertTrue(self.called) + def test_command_line_handling_discover_by_default_with_options(self): + program = TestableTestProgram() + program.module = None + + args = ['something', '-v', '-b', '-v', '-c', '-f'] + self.called = False + def do_discovery(argv): + self.called = True + self.assertEqual(argv, args[1:]) + program._do_discovery = do_discovery + program.parseArgs(args) + self.assertTrue(self.called) + def test_command_line_handling_do_discovery_too_many_arguments(self): class Stop(Exception): diff --git a/Lib/unittest/test/test_program.py b/Lib/unittest/test/test_program.py index ec805cc..a50a245 100644 --- a/Lib/unittest/test/test_program.py +++ b/Lib/unittest/test/test_program.py @@ -99,6 +99,7 @@ class InitialisableProgram(unittest.TestProgram): defaultTest = None testRunner = None testLoader = unittest.defaultTestLoader + module = '__main__' progName = 'test' test = 'test' def __init__(self, *args): |