summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Foord <fuzzyman@voidspace.org.uk>2010-12-19 03:59:10 (GMT)
committerMichael Foord <fuzzyman@voidspace.org.uk>2010-12-19 03:59:10 (GMT)
commitf100dbd6009e18bb1ab14fa6da8732751b1a9add (patch)
treef4e8500aa979023c5c9b37a7d5ddbdcb6daebc8e
parentb3468f79efa45c8adaf86c0b9b797b9b3d4c12a2 (diff)
downloadcpython-f100dbd6009e18bb1ab14fa6da8732751b1a9add.zip
cpython-f100dbd6009e18bb1ab14fa6da8732751b1a9add.tar.gz
cpython-f100dbd6009e18bb1ab14fa6da8732751b1a9add.tar.bz2
Fix minor issue in implementation of issue 10470.
-rw-r--r--Lib/unittest/main.py70
-rw-r--r--Lib/unittest/test/test_discovery.py13
-rw-r--r--Lib/unittest/test/test_program.py1
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):