Tests: Let ./runTests take files as argument to run only the test in these files
authorSebastian Luther <SebastianLuther@gmx.de>
Sun, 8 Aug 2010 20:52:50 +0000 (22:52 +0200)
committerZac Medico <zmedico@gentoo.org>
Mon, 9 Aug 2010 00:17:11 +0000 (17:17 -0700)
pym/portage/tests/__init__.py

index 393ecf78c6d18976ab11d0fa59086ceec483b6d1..bd41f1ee893a06de63f7403fe925c40c480e70c9 100644 (file)
@@ -26,6 +26,10 @@ def main():
        basedir = os.path.dirname(os.path.realpath(__file__))
        testDirs = []
 
+       if len(sys.argv) > 1:
+               suite.addTests(getTestFromCommandLine(sys.argv[1:], basedir))
+               return TextTestRunner(verbosity=2).run(suite)
+
   # the os.walk help mentions relative paths as being quirky
        # I was tired of adding dirs to the list, so now we add __test__
        # to each dir we want tested.
@@ -52,6 +56,29 @@ def my_import(name):
                mod = getattr(mod, comp)
        return mod
 
+def getTestFromCommandLine(args, base_path):
+       ret = []
+       for arg in args:
+               realpath = os.path.realpath(arg)
+               path = os.path.dirname(realpath)
+               f = realpath[len(path)+1:]
+
+               if not f.startswith("test") or not f.endswith(".py"):
+                       raise Exception("Invalid argument: '%s'" % arg)
+
+               mymodule = f[:-3]
+
+               parent_path = path[len(base_path)+1:]
+               parent_module = ".".join(("portage", "tests", parent_path))
+               parent_module = parent_module.replace('/', '.')
+               result = []
+
+               # Make the trailing / a . for module importing
+               modname = ".".join((parent_module, mymodule))
+               mod = my_import(modname)
+               ret.append(unittest.TestLoader().loadTestsFromModule(mod))
+       return ret
+
 def getTests(path, base_path):
        """