Patchwork [068,of,179,tests-refactor] run-tests: move test discovery logic into a function

login
register
mail settings
Submitter Gregory Szorc
Date May 2, 2014, 6:38 p.m.
Message ID <ffd38bfe92ba73742bf1.1399055905@vm-ubuntu-main.gateway.sonic.net>
Download mbox | patch
Permalink /patch/4563/
State Accepted
Commit 00e5f5b9fc903d05fbf54bbb04015d619480b0f8
Headers show

Comments

Gregory Szorc - May 2, 2014, 6:38 p.m.
# HG changeset patch
# User Gregory Szorc <gregory.szorc@gmail.com>
# Date 1397978586 25200
#      Sun Apr 20 00:23:06 2014 -0700
# Branch stable
# Node ID ffd38bfe92ba73742bf11d95f0215d46575b8034
# Parent  753aa4f617abdc39a66ba6499a9cf61b60fe3da8
run-tests: move test discovery logic into a function

The new function is easily monkeypatchable. This facilitates more
advanced test discovery by 3rd parties such as extensions.

Patch

diff --git a/tests/run-tests.py b/tests/run-tests.py
--- a/tests/run-tests.py
+++ b/tests/run-tests.py
@@ -1019,16 +1019,35 @@  class TestRunner(object):
             '!': [],
             '~': [],
             's': [],
             'i': [],
         }
         self.abort = [False]
         self._createdfiles = []
 
+    def findtests(self, args):
+        """Finds possible test files from arguments.
+
+        If you wish to inject custom tests into the test harness, this would
+        be a good function to monkeypatch or override in a derived class.
+        """
+        if not args:
+            if self.options.changed:
+                proc = Popen4('hg st --rev "%s" -man0 .' %
+                              self.options.changed, None, 0)
+                stdout, stderr = proc.communicate()
+                args = stdout.strip('\0').split('\0')
+            else:
+                args = os.listdir('.')
+
+        return [t for t in args
+                if os.path.basename(t).startswith('test-')
+                    and (t.endswith('.py') or t.endswith('.t'))]
+
     def runtests(self, tests):
         try:
             if self.inst:
                 self.installhg()
                 self.checkhglib("Testing")
             else:
                 self.usecorrectpython()
 
@@ -1315,28 +1334,17 @@  def main(args, parser=None):
 
     parser = parser or getparser()
     (options, args) = parseargs(args, parser)
     runner.options = options
     os.umask(022)
 
     checktools()
 
-    if not args:
-        if options.changed:
-            proc = Popen4('hg st --rev "%s" -man0 .' % options.changed,
-                          None, 0)
-            stdout, stderr = proc.communicate()
-            args = stdout.strip('\0').split('\0')
-        else:
-            args = os.listdir(".")
-
-    tests = [t for t in args
-             if os.path.basename(t).startswith("test-")
-                 and (t.endswith(".py") or t.endswith(".t"))]
+    tests = runner.findtests(args)
 
     if options.random:
         random.shuffle(tests)
     else:
         # keywords for slow tests
         slow = 'svn gendoc check-code-hg'.split()
         def sortkey(f):
             # run largest tests first, as they tend to take the longest