Commit d9e84960 by Chris Jerdonek

Started refactoring pystache/tests/main.py and stubbed out _PystacheTestProgram.

parent 5a47ea6d
......@@ -10,6 +10,7 @@ This module is for our test console script.
import os
import sys
import unittest
from unittest import TestProgram
UNITTEST_FILE_PREFIX = "test_"
......@@ -31,62 +32,79 @@ UNITTEST_FILE_PREFIX = "test_"
# TestCase or TestSuite instances (e.g. doctests and spec tests), and then
# call the base class's runTests().
class Tester(object):
def _find_unittest_files(package_dir):
"""
Return a list of paths to all unit-test files in the given package directory.
"""
Discovers and runs unit tests.
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.
def _find_unittest_files(self, package_dir):
"""
Return a list of paths to all unit-test files in the given package directory.
"""
package_dir = os.path.abspath(package_dir)
package_name = os.path.split(package_dir)[1]
"""
unittest_paths = [] # Return value.
prefix_length = len(package_dir)
def is_unittest(file_name):
return file_name.startswith(UNITTEST_FILE_PREFIX) and file_name.endswith('.py')
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
# 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)
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)
for file_name in file_names:
unittest_path = os.path.join(dir_path, file_name)
unittest_paths.append(unittest_path)
return module_names
return unittest_paths
def _modules_from_paths(self, package_dir, paths):
"""
Return a list of fully-qualified module names given paths.
def _get_test_module_names(package_dir):
"""
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
"""
paths = _find_unittest_files(package_dir)
modules = _get_module_names(package_dir, paths)
return modules
class _PystacheTestProgram(TestProgram):
pass
class Tester(object):
"""
Discovers and runs unit tests.
"""
# TODO: consider replacing the package argument with a package_dir argument.
def run_tests(self, package, sys_argv):
......@@ -105,13 +123,10 @@ class Tester(object):
# the unittest module is equipped to handle.
unittest.main(argv=sys_argv, module=None)
# No need to return since unitttest.main() exits.
# Otherwise, auto-detect all unit tests.
package_dir = os.path.dirname(package.__file__)
unittest_paths = self._find_unittest_files(package_dir)
modules = self._modules_from_paths(package_dir, unittest_paths)
modules = _get_test_module_names(package_dir)
modules.sort()
# This is a sanity check to ensure that the unit-test discovery
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment