[tor-commits] [stem/master] Increase --test scope to be any module substring

atagar at torproject.org atagar at torproject.org
Mon Jan 6 05:55:32 UTC 2014


commit b1081d4abb56439a7d4b8dfd254d079d32d9b976
Author: Damian Johnson <atagar at torproject.org>
Date:   Sun Jan 5 21:44:19 2014 -0800

    Increase --test scope to be any module substring
    
    Our --test argument only ran tests matching a given prefix but this was silly
    for a couple reasons...
    
    1. That's unintuitive. If I give 'util.conf' I expect it to run tests with
       'util.conf', not starting with that. There's no advantage to a prefix match.
    
    2. Now that we're displaying less verbose test output we strip off the
       'test.unit.' or 'test.integ.' prefix that all the module names have. With
       this change the user can copy-and-paste what we show them to just run that
       test.
---
 run_tests.py      |   10 +++++-----
 test/settings.cfg |    2 +-
 test/util.py      |   16 ++++++++--------
 3 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/run_tests.py b/run_tests.py
index 00cf381..5450dea 100755
--- a/run_tests.py
+++ b/run_tests.py
@@ -45,7 +45,7 @@ ARGS = {
   'run_integ': False,
   'run_python3': False,
   'run_python3_clean': False,
-  'test_prefix': None,
+  'specific_test': None,
   'logging_runlevel': None,
   'tor_path': 'tor',
   'run_targets': [Target.RUN_OPEN],
@@ -153,7 +153,7 @@ def main():
 
   pyflakes_task, pep8_task = None, None
 
-  if not stem.prereq.is_python_3() and not args.test_prefix:
+  if not stem.prereq.is_python_3() and not args.specific_test:
     if test.util.is_pyflakes_available():
       pyflakes_task = PYFLAKES_TASK
 
@@ -212,7 +212,7 @@ def main():
     test.output.print_divider("UNIT TESTS", True)
     error_tracker.set_category("UNIT TEST")
 
-    for test_class in test.util.get_unit_tests(args.test_prefix):
+    for test_class in test.util.get_unit_tests(args.specific_test):
       run_result = _run_test(args, test_class, output_filters, logging_buffer)
       skipped_tests += len(getattr(run_result, 'skipped', []))
 
@@ -248,7 +248,7 @@ def main():
         if integ_runner.is_accessible():
           owner = integ_runner.get_tor_controller(True)  # controller to own our main Tor process
 
-        for test_class in test.util.get_integ_tests(args.test_prefix):
+        for test_class in test.util.get_integ_tests(args.specific_test):
           run_result = _run_test(args, test_class, output_filters, logging_buffer)
           skipped_tests += len(getattr(run_result, 'skipped', []))
 
@@ -379,7 +379,7 @@ def _get_args(argv):
       args['run_targets'] = run_targets
       args['attribute_targets'] = attribute_targets
     elif opt in ("-l", "--test"):
-      args['test_prefix'] = arg
+      args['specific_test'] = arg
     elif opt in ("-l", "--log"):
       arg = arg.upper()
 
diff --git a/test/settings.cfg b/test/settings.cfg
index e78ddb4..fd960a1 100644
--- a/test/settings.cfg
+++ b/test/settings.cfg
@@ -36,7 +36,7 @@ msg.help
 |  -u, --unit            runs unit tests
 |  -i, --integ           runs integration tests
 |  -t, --target TARGET   comma separated list of extra targets for integ tests
-|      --test TEST_NAME  only run tests modules matching the given name prefix
+|      --test TEST_NAME  only run tests modules containing the given name
 |      --python3         runs tests against a 2to3 conversion of the codebase
 |  -l, --log RUNLEVEL    includes logging output with test results, runlevels:
 |                          TRACE, DEBUG, INFO, NOTICE, WARN, ERROR
diff --git a/test/util.py b/test/util.py
index cfa0b95..f4fb9fb 100644
--- a/test/util.py
+++ b/test/util.py
@@ -89,34 +89,34 @@ Target = stem.util.enum.UppercaseEnum(
 STEM_BASE = os.path.sep.join(__file__.split(os.path.sep)[:-2])
 
 
-def get_unit_tests(prefix = None):
+def get_unit_tests(module_substring = None):
   """
   Provides the classes for our unit tests.
 
-  :param str prefix: only provide the test if the module starts with this prefix
+  :param str module_substring: only provide the test if the module includes this substring
 
   :returns: an **iterator** for our unit tests
   """
 
-  return _get_tests(CONFIG["test.unit_tests"].splitlines(), prefix)
+  return _get_tests(CONFIG["test.unit_tests"].splitlines(), module_substring)
 
 
-def get_integ_tests(prefix = None):
+def get_integ_tests(module_substring = None):
   """
   Provides the classes for our integration tests.
 
-  :param str prefix: only provide the test if the module starts with this prefix
+  :param str module_substring: only provide the test if the module includes this substring
 
   :returns: an **iterator** for our integration tests
   """
 
-  return _get_tests(CONFIG["test.integ_tests"].splitlines(), prefix)
+  return _get_tests(CONFIG["test.integ_tests"].splitlines(), module_substring)
 
 
-def _get_tests(modules, prefix):
+def _get_tests(modules, module_substring):
   for import_name in modules:
     if import_name:
-      if prefix and not import_name.startswith(prefix):
+      if module_substring and module_substring not in import_name:
         continue
 
       # Dynamically imports test modules. The __import__() call has a couple





More information about the tor-commits mailing list