diff options
author | Chris Jerdonek <chris.jerdonek@gmail.com> | 2012-04-23 06:50:52 -0700 |
---|---|---|
committer | Chris Jerdonek <chris.jerdonek@gmail.com> | 2012-04-23 06:50:52 -0700 |
commit | 15e6db66367827efa9f7b00f7e2c97b20f1d81dd (patch) | |
tree | b75f556f3bd9a3d79b60f0be9ba0171c473e415f /pystache | |
parent | 4e6e8e699436cfc3bb0b31ffa63e677a82bbdd4d (diff) | |
download | pystache-15e6db66367827efa9f7b00f7e2c97b20f1d81dd.tar.gz |
Moved some of the test-discovery logic into tests/common.py
Diffstat (limited to 'pystache')
-rw-r--r-- | pystache/tests/common.py | 66 | ||||
-rw-r--r-- | pystache/tests/main.py | 82 |
2 files changed, 77 insertions, 71 deletions
diff --git a/pystache/tests/common.py b/pystache/tests/common.py index a9f42f8..0cbefe4 100644 --- a/pystache/tests/common.py +++ b/pystache/tests/common.py @@ -24,6 +24,8 @@ SPEC_TEST_DIR = os.path.join(PROJECT_DIR, 'ext', 'spec', 'specs') # containing doctests. The paths should be relative to the project directory. TEXT_DOCTEST_PATHS = ['README.rst'] +UNITTEST_FILE_PREFIX = "test_" + def html_escape(u): """ @@ -45,6 +47,70 @@ def get_data_path(file_name): return os.path.join(DATA_DIR, file_name) +# Functions related to get_module_names(). + +def _find_files(root_dir, should_include): + """ + Return a list of paths to all files in the given directory. + + Arguments: + + should_include: a function that accepts a file path and returns True or False. + + """ + paths = [] # Return value. + + # os.walk() is new in Python 2.3 + # http://docs.python.org/library/os.html#os.walk + for dir_path, dir_names, file_names in os.walk(root_dir): + new_paths = [os.path.join(dir_path, file_name) for file_name in file_names] + new_paths = filter(should_include, new_paths) + paths.extend(new_paths) + + return paths + + +def _make_module_names(package_dir, paths): + """ + Return a list of fully-qualified module names given a list of module paths. + + """ + package_dir = os.path.abspath(package_dir) + package_name = os.path.split(package_dir)[1] + + prefix_length = len(package_dir) + + module_names = [] + for path in paths: + path = os.path.abspath(path) # for example <path_to_package>/subpackage/module.py + rel_path = path[prefix_length:] # for example /subpackage/module.py + rel_path = os.path.splitext(rel_path)[0] # for example /subpackage/module + + parts = [] + while True: + (rel_path, tail) = os.path.split(rel_path) + if not tail: + break + parts.insert(0, tail) + # We now have, for example, ['subpackage', 'module']. + parts.insert(0, package_name) + module = ".".join(parts) + module_names.append(module) + + return module_names + + +def get_module_names(package_dir, should_include): + """ + Return a list of fully-qualified module names in the given package. + + """ + paths = _find_files(package_dir, should_include) + names = _make_module_names(package_dir, paths) + + return names + + class AssertStringMixin: """A unittest.TestCase mixin to check string equality.""" diff --git a/pystache/tests/main.py b/pystache/tests/main.py index 82843a5..39ee227 100644 --- a/pystache/tests/main.py +++ b/pystache/tests/main.py @@ -11,13 +11,12 @@ import os import sys from unittest import TestProgram -from pystache.tests.common import PACKAGE_DIR, PROJECT_DIR, SPEC_TEST_DIR +from pystache.tests.common import PACKAGE_DIR, PROJECT_DIR, SPEC_TEST_DIR, UNITTEST_FILE_PREFIX +from pystache.tests.common import get_module_names from pystache.tests.doctesting import get_doctests from pystache.tests.spectesting import get_spec_tests -UNITTEST_FILE_PREFIX = "test_" - # TODO: enhance this function to create spec-test tests. def run_tests(sys_argv): """ @@ -60,83 +59,24 @@ def run_tests(sys_argv): # No need to return since unitttest.main() exits. -def _find_unittest_files(package_dir): - """ - Return a list of paths to all unit-test files in the given package directory. - - """ - paths = [] # Return value. - - def is_unittest(file_name): - return file_name.startswith(UNITTEST_FILE_PREFIX) and file_name.endswith('.py') - - # os.walk() is new in Python 2.3 - # http://docs.python.org/library/os.html#os.walk - for dir_path, dir_names, file_names in os.walk(package_dir): - file_names = filter(is_unittest, file_names) - - for file_name in file_names: - path = os.path.join(dir_path, file_name) - paths.append(path) - - return paths - - -def _get_module_names(package_dir, paths): - """ - Return a list of fully-qualified test module names given a list of module paths. - - """ - package_dir = os.path.abspath(package_dir) - package_name = os.path.split(package_dir)[1] - - prefix_length = len(package_dir) - - module_names = [] - for path in paths: - path = os.path.abspath(path) # for example <path_to_package>/subpackage/module.py - rel_path = path[prefix_length:] # for example /subpackage/module.py - rel_path = os.path.splitext(rel_path)[0] # for example /subpackage/module - - parts = [] - while True: - (rel_path, tail) = os.path.split(rel_path) - if not tail: - break - parts.insert(0, tail) - # We now have, for example, ['subpackage', 'module']. - parts.insert(0, package_name) - module = ".".join(parts) - module_names.append(module) - - return module_names - - -def _get_test_module_names(package_dir): - """ - Return a list of fully-qualified module names given a list of module paths. - - """ - paths = _find_unittest_files(package_dir) - modules = _get_module_names(package_dir, paths) - - return modules - - def _discover_test_modules(package_dir): """ Discover and return a sorted list of the names of unit-test modules. """ - modules = _get_test_module_names(package_dir) - modules.sort() + def is_unittest_module(path): + file_name = os.path.basename(path) + return file_name.startswith(UNITTEST_FILE_PREFIX) and file_name.endswith('.py') + + names = get_module_names(package_dir, is_unittest_module) + names.sort() # This is a sanity check to ensure that the unit-test discovery # methods are working. - if len(modules) < 1: - raise Exception("No unit-test modules found.") + if len(names) < 1: + raise Exception("No unit-test modules found--\n in %s" % package_dir) - return modules + return names # The function unittest.main() is an alias for unittest.TestProgram's |