blob: a83c1b9570166234d3031b87657a51c9bd0e17ee [file] [log] [blame]
"""
Test Selection
"""
import unittest
from nose_helper.config import Config
class Selector(object):
"""Examines test candidates and determines whether,
given the specified configuration, the test candidate should be selected
as a test.
"""
def __init__(self, config):
if config is None:
config = Config()
self.configure(config)
def configure(self, config):
self.config = config
self.match = config.testMatch
def matches(self, name):
return self.match.search(name)
def wantClass(self, cls):
"""Is the class a wanted test class
"""
declared = getattr(cls, '__test__', None)
if declared is not None:
wanted = declared
else:
wanted = (not cls.__name__.startswith('_')
and (issubclass(cls, unittest.TestCase)
or self.matches(cls.__name__)))
return wanted
def wantFunction(self, function):
"""Is the function a test function
"""
try:
if hasattr(function, 'compat_func_name'):
funcname = function.compat_func_name
else:
funcname = function.__name__
except AttributeError:
# not a function
return False
import inspect
arguments = inspect.getargspec(function)
if len(arguments[0]) or arguments[1] or arguments[2]:
return False
declared = getattr(function, '__test__', None)
if declared is not None:
wanted = declared
else:
wanted = not funcname.startswith('_') and self.matches(funcname)
return wanted
def wantMethod(self, method):
"""Is the method a test method
"""
try:
method_name = method.__name__
except AttributeError:
# not a method
return False
if method_name.startswith('_'):
# never collect 'private' methods
return False
declared = getattr(method, '__test__', None)
if declared is not None:
wanted = declared
else:
wanted = self.matches(method_name)
return wanted
def wantModule(self, module):
"""Is the module a test module
we always want __main__.
"""
declared = getattr(module, '__test__', None)
if declared is not None:
wanted = declared
else:
wanted = self.matches(module.__name__.split('.')[-1]) \
or module.__name__ == '__main__'
return wanted
defaultSelector = Selector