]> granicus.if.org Git - python/commitdiff
regrtest: fix --fromfile feature
authorVictor Stinner <victor.stinner@gmail.com>
Thu, 24 Mar 2016 08:43:00 +0000 (09:43 +0100)
committerVictor Stinner <victor.stinner@gmail.com>
Thu, 24 Mar 2016 08:43:00 +0000 (09:43 +0100)
* Update code for the name regrtest output format.
* Enhance also test_regrtest test on --fromfile

Lib/test/libregrtest/main.py
Lib/test/test_regrtest.py

index b954db5c9d68ef6365f1595b1c4f685b903f786c..de08f32d270e3b4a561bbbcca5b56f0e69bc94ef 100644 (file)
@@ -168,13 +168,21 @@ class Regrtest:
 
         if self.ns.fromfile:
             self.tests = []
+            # regex to match 'test_builtin' in line:
+            # '0:00:00 [  4/400] test_builtin -- test_dict took 1 sec'
+            regex = (r'^(?:[0-9]+:[0-9]+:[0-9]+ *)?'
+                     r'(?:\[[0-9/ ]+\] *)?'
+                     r'(test_[a-zA-Z0-9_]+)')
+            regex = re.compile(regex)
             with open(os.path.join(support.SAVEDCWD, self.ns.fromfile)) as fp:
-                count_pat = re.compile(r'\[\s*\d+/\s*\d+\]')
                 for line in fp:
-                    line = count_pat.sub('', line)
-                    guts = line.split() # assuming no test has whitespace in its name
-                    if guts and not guts[0].startswith('#'):
-                        self.tests.extend(guts)
+                    line = line.strip()
+                    if line.startswith('#'):
+                        continue
+                    match = regex.match(line)
+                    if match is None:
+                        continue
+                    self.tests.append(match.group(1))
 
         removepy(self.tests)
 
@@ -194,7 +202,10 @@ class Regrtest:
         else:
             alltests = findtests(self.ns.testdir, stdtests, nottests)
 
-        self.selected = self.tests or self.ns.args or alltests
+        if not self.ns.fromfile:
+            self.selected = self.tests or self.ns.args or alltests
+        else:
+            self.selected = self.tests
         if self.ns.single:
             self.selected = self.selected[:1]
             try:
index 03e7e1d8a1b0a55cfb69f735f9afb5e2e24d2df8..df8447cadea1c4c01b9602ef1cf8d6665ddfcba1 100644 (file)
@@ -628,6 +628,22 @@ class ArgsTestCase(BaseTestCase):
         # [2/2] test_2
         filename = support.TESTFN
         self.addCleanup(support.unlink, filename)
+
+        # test format '0:00:00 [2/7] test_opcodes -- test_grammar took 0 sec'
+        with open(filename, "w") as fp:
+            previous = None
+            for index, name in enumerate(tests, 1):
+                line = ("00:00:%02i [%s/%s] %s"
+                        % (index, index, len(tests), name))
+                if previous:
+                    line += " -- %s took 0 sec" % previous
+                print(line, file=fp)
+                previous = name
+
+        output = self.run_tests('--fromfile', filename)
+        self.check_executed_tests(output, tests)
+
+        # test format '[2/7] test_opcodes'
         with open(filename, "w") as fp:
             for index, name in enumerate(tests, 1):
                 print("[%s/%s] %s" % (index, len(tests), name), file=fp)
@@ -635,6 +651,14 @@ class ArgsTestCase(BaseTestCase):
         output = self.run_tests('--fromfile', filename)
         self.check_executed_tests(output, tests)
 
+        # test format 'test_opcodes'
+        with open(filename, "w") as fp:
+            for name in tests:
+                print(name, file=fp)
+
+        output = self.run_tests('--fromfile', filename)
+        self.check_executed_tests(output, tests)
+
     def test_interrupted(self):
         code = TEST_INTERRUPTED
         test = self.create_test("sigint", code=code)