Commit f100dbd6 authored by Michael Foord's avatar Michael Foord

Fix minor issue in implementation of issue 10470.

parent b3468f79
...@@ -147,6 +147,10 @@ class TestProgram(object): ...@@ -147,6 +147,10 @@ class TestProgram(object):
long_opts = ['help', 'verbose', 'quiet', 'failfast', 'catch', 'buffer'] long_opts = ['help', 'verbose', 'quiet', 'failfast', 'catch', 'buffer']
try: try:
options, args = getopt.getopt(argv[1:], 'hHvqfcb', long_opts) options, args = getopt.getopt(argv[1:], 'hHvqfcb', long_opts)
except getopt.error as msg:
self.usageExit(msg)
return
for opt, value in options: for opt, value in options:
if opt in ('-h','-H','--help'): if opt in ('-h','-H','--help'):
self.usageExit() self.usageExit()
...@@ -166,6 +170,14 @@ class TestProgram(object): ...@@ -166,6 +170,14 @@ class TestProgram(object):
if self.buffer is None: if self.buffer is None:
self.buffer = True self.buffer = True
# Should this raise an exception if -b is not valid? # 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: if len(args) == 0 and self.defaultTest is None:
# createTests will load tests from self.module # createTests will load tests from self.module
self.testNames = None self.testNames = None
...@@ -177,8 +189,6 @@ class TestProgram(object): ...@@ -177,8 +189,6 @@ class TestProgram(object):
else: else:
self.testNames = (self.defaultTest,) self.testNames = (self.defaultTest,)
self.createTests() self.createTests()
except getopt.error as msg:
self.usageExit(msg)
def createTests(self): def createTests(self):
if self.testNames is None: if self.testNames is None:
......
...@@ -231,6 +231,19 @@ class TestDiscovery(unittest.TestCase): ...@@ -231,6 +231,19 @@ class TestDiscovery(unittest.TestCase):
program.parseArgs(['something']) program.parseArgs(['something'])
self.assertTrue(self.called) 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): def test_command_line_handling_do_discovery_too_many_arguments(self):
class Stop(Exception): class Stop(Exception):
......
...@@ -99,6 +99,7 @@ class InitialisableProgram(unittest.TestProgram): ...@@ -99,6 +99,7 @@ class InitialisableProgram(unittest.TestProgram):
defaultTest = None defaultTest = None
testRunner = None testRunner = None
testLoader = unittest.defaultTestLoader testLoader = unittest.defaultTestLoader
module = '__main__'
progName = 'test' progName = 'test'
test = 'test' test = 'test'
def __init__(self, *args): def __init__(self, *args):
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment