summaryrefslogtreecommitdiff
path: root/Lib/unittest/loader.py
diff options
context:
space:
mode:
authorJonas Haag <jonas@lophus.org>2017-11-25 16:23:52 +0100
committerAntoine Pitrou <pitrou@free.fr>2017-11-25 16:23:52 +0100
commit5b48dc638b7405fd9bde4d854bf477dfeaaddf44 (patch)
tree2e3b44b9193cc1a0e08a6e1d65dd324e76fb3ee6 /Lib/unittest/loader.py
parent8d9bb11d8fcbf10cc9b1eb0a647bcf3658a4e3dd (diff)
downloadcpython-git-5b48dc638b7405fd9bde4d854bf477dfeaaddf44.tar.gz
bpo-32071: Add unittest -k option (#4496)
* bpo-32071: Add unittest -k option
Diffstat (limited to 'Lib/unittest/loader.py')
-rw-r--r--Lib/unittest/loader.py24
1 files changed, 15 insertions, 9 deletions
diff --git a/Lib/unittest/loader.py b/Lib/unittest/loader.py
index e860debc0f..eb03b4ab87 100644
--- a/Lib/unittest/loader.py
+++ b/Lib/unittest/loader.py
@@ -8,7 +8,7 @@ import types
import functools
import warnings
-from fnmatch import fnmatch
+from fnmatch import fnmatch, fnmatchcase
from . import case, suite, util
@@ -70,6 +70,7 @@ class TestLoader(object):
"""
testMethodPrefix = 'test'
sortTestMethodsUsing = staticmethod(util.three_way_cmp)
+ testNamePatterns = None
suiteClass = suite.TestSuite
_top_level_dir = None
@@ -222,11 +223,15 @@ class TestLoader(object):
def getTestCaseNames(self, testCaseClass):
"""Return a sorted sequence of method names found within testCaseClass
"""
- def isTestMethod(attrname, testCaseClass=testCaseClass,
- prefix=self.testMethodPrefix):
- return attrname.startswith(prefix) and \
- callable(getattr(testCaseClass, attrname))
- testFnNames = list(filter(isTestMethod, dir(testCaseClass)))
+ def shouldIncludeMethod(attrname):
+ testFunc = getattr(testCaseClass, attrname)
+ isTestMethod = attrname.startswith(self.testMethodPrefix) and callable(testFunc)
+ if not isTestMethod:
+ return False
+ fullName = '%s.%s' % (testCaseClass.__module__, testFunc.__qualname__)
+ return self.testNamePatterns is None or \
+ any(fnmatchcase(fullName, pattern) for pattern in self.testNamePatterns)
+ testFnNames = list(filter(shouldIncludeMethod, dir(testCaseClass)))
if self.sortTestMethodsUsing:
testFnNames.sort(key=functools.cmp_to_key(self.sortTestMethodsUsing))
return testFnNames
@@ -486,16 +491,17 @@ class TestLoader(object):
defaultTestLoader = TestLoader()
-def _makeLoader(prefix, sortUsing, suiteClass=None):
+def _makeLoader(prefix, sortUsing, suiteClass=None, testNamePatterns=None):
loader = TestLoader()
loader.sortTestMethodsUsing = sortUsing
loader.testMethodPrefix = prefix
+ loader.testNamePatterns = testNamePatterns
if suiteClass:
loader.suiteClass = suiteClass
return loader
-def getTestCaseNames(testCaseClass, prefix, sortUsing=util.three_way_cmp):
- return _makeLoader(prefix, sortUsing).getTestCaseNames(testCaseClass)
+def getTestCaseNames(testCaseClass, prefix, sortUsing=util.three_way_cmp, testNamePatterns=None):
+ return _makeLoader(prefix, sortUsing, testNamePatterns=testNamePatterns).getTestCaseNames(testCaseClass)
def makeSuite(testCaseClass, prefix='test', sortUsing=util.three_way_cmp,
suiteClass=suite.TestSuite):