From 4a41c25a53e5328d1544168971aa5886574cc20b Mon Sep 17 00:00:00 2001 From: Gil Forcada Codinachs Date: Mon, 26 Feb 2024 23:13:08 +0100 Subject: [PATCH] feat: ignore certain folders --- src/zope/testrunner/find.py | 11 +++++++++-- src/zope/testrunner/tests/test_find.py | 16 ++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/zope/testrunner/find.py b/src/zope/testrunner/find.py index feda9d9..7ee08da 100644 --- a/src/zope/testrunner/find.py +++ b/src/zope/testrunner/find.py @@ -25,7 +25,12 @@ from zope.testrunner.filter import build_filtering_func -identifier = re.compile(r'[_a-zA-Z]\w*$').match +identifier = re.compile(r'[_a-z]\w*$', re.I).match +IGNORE_FOLDERS = { + '.git', + 'node_modules', + '__pycache__' +} class DuplicateTestIDError(Exception): @@ -293,7 +298,9 @@ def update_root2ext(dirname, noext, withext): for (p, package) in test_dirs(options, {}): for dirname, dirs, files in walk_with_symlinks(options, p): root2ext = {} - dirs[:] = [d for d in dirs if identifier(d)] + dirs[:] = [ + d for d in dirs if identifier(d) and d not in IGNORE_FOLDERS + ] d = os.path.split(dirname)[1] if tests_pattern(d) and contains_init_py(options, files): # tests directory diff --git a/src/zope/testrunner/tests/test_find.py b/src/zope/testrunner/tests/test_find.py index 00b44ed..43cd344 100644 --- a/src/zope/testrunner/tests/test_find.py +++ b/src/zope/testrunner/tests/test_find.py @@ -81,3 +81,19 @@ def test_DuplicateTestIDError_message_contains_all_test_ids(self): self.assertIn( os.path.join('testrunner-ex', 'sampletestsl.rst'), str(e.exception)) + + +class TestIdentifierMatches(unittest.TestCase): + """Test which folders are ignored by the test runner.""" + + def test_ignored(self): + folders = ('spaces are bad', 'dashes-bad', 'ünicodeLeading') + for name in folders: + self.assertFalse(find.identifier(name), f'{name} is accepted') + + def test_accepted(self): + folders = ( + 'random', 'CamelCase', 'Under_scores', '_leading_scores', 'unicöde' + ) + for name in folders: + self.assertTrue(find.identifier(name), f'{name} is not accepted')