""" 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