def get_members_recursively(): deepfunc = lambda x: getattr(x, "__name__", "").startswith("deep_") found = list(utils.deep_get_members("attest", deepfunc)) expected = [utils.deep_get_members, utils.deep_iter_modules] assert found == expected getters = lambda x: getattr(x, "__name__", "").startswith("get") found = set(utils.deep_get_members("inspect", getters)) expected = set(v for (k, v) in inspect.getmembers(inspect, getters)) assert found == expected
def get_members_recursively(): deepfunc = lambda x: getattr(x, '__name__', '').startswith('deep_') found = list(utils.deep_get_members('attest', deepfunc)) expected = [utils.deep_get_members, utils.deep_iter_modules] assert found == expected getters = lambda x: getattr(x, '__name__', '').startswith('get') found = set(utils.deep_get_members('inspect', getters)) expected = set(v for (k, v) in inspect.getmembers(inspect, getters)) assert found == expected
def register(self, tests): if inspect.isclass(tests): self._tests.extend(tests()) return tests elif isinstance(tests, basestring): def istests(obj): return isinstance(obj, (Tests, RootGroup)) obj = import_dotted_name(tests) if inspect.ismodule(obj): for tests in deep_get_members(tests, istests, private=True): self.register(tests) return tests = obj for test in tests: if not test in self._tests: self._tests.append(test)
def register(self, tests): """Merge in other tests. :param tests: * A class, which is then instantiated and return allowing it to be used as a decorator for :class:`TestBase` classes. * A string, representing the dotted name to one of: * a module or package, which is recursively scanned for :class:`Tests` instances that are not private * an iterable yielding tests * Otherwise any iterable object is assumed to yield tests. Any of these can be passed in a list to the :class:`Tests` constructor. .. versionadded:: 0.2 Refer to collections by import path as a string .. versionadded:: 0.6 Recursive scanning of modules and packages .. versionchanged:: 0.6 Tests are only added if not already added """ if inspect.isclass(tests): self._tests.extend(tests()) return tests elif isinstance(tests, basestring): def istests(obj): return isinstance(obj, Tests) obj = import_dotted_name(tests) if inspect.ismodule(obj): for tests in deep_get_members(tests, istests): self.register(tests) return tests = obj for test in tests: if not test in self._tests: self._tests.append(test)