]> granicus.if.org Git - python/commitdiff
Fix minor issue in implementation of issue 10470.
authorMichael Foord <fuzzyman@voidspace.org.uk>
Sun, 19 Dec 2010 03:59:10 +0000 (03:59 +0000)
committerMichael Foord <fuzzyman@voidspace.org.uk>
Sun, 19 Dec 2010 03:59:10 +0000 (03:59 +0000)
Lib/unittest/main.py
Lib/unittest/test/test_discovery.py
Lib/unittest/test/test_program.py

index b25d7ac21ede7f709b2c5fe15b3e5a5ccc9704fa..55d4e4be148e32597e45835c7c320747ded5b4a7 100644 (file)
@@ -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:
index 52a711a877f1b834588cd0d2ee41b69591b7f954..e688f8e35ac61fac7e576694cc254f95e709c0d6 100644 (file)
@@ -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):
index ec805cc88a3a3af60f65bdad06339c70d239779c..a50a2452c2cddc403b0565e8e6931b5995e74f6d 100644 (file)
@@ -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):