def test_load_from_names_calls_hook(self): self.session.hooks.register('loadTestsFromNames', FakePlugin()) evt = events.LoadFromNamesEvent(self.loader, ['some_name'], 'some_module') self.session.hooks.loadTestsFromNames(evt) self.assertTrue(evt.fakeLoadFromNames, "FakePlugin.fakeLoadFromNames() was not called")
def test_discovery_supports_code_in_lib_dir(self): self.session.startDir = support_file("scenario/package_in_lib") event = events.LoadFromNamesEvent(self.loader, [], None) result = self.session.hooks.loadTestsFromNames(event) assert isinstance(result, self.loader.suiteClass) self.assertEqual(len(result._tests), 1) self.assertEqual(len(self.watcher.called), 1) self.assertEqual(self.watcher.called[0].module.__name__, "tests")
def test_can_discover_test_modules_in_packages(self): self.session.startDir = support_file('scenario/tests_in_package') event = events.LoadFromNamesEvent(self.loader, [], None) result = self.session.hooks.loadTestsFromNames(event) assert isinstance(result, self.loader.suiteClass) self.assertEqual(len(result._tests), 1) self.assertEqual(len(self.watcher.called), 1) self.assertEqual(self.watcher.called[0].module.__name__, 'pkg1.test.test_things')
def test_match_path_event_can_prevent_discovery(self): class NoTestsForYou(events.Plugin): def matchPath(self, event): event.handled = True return False mp = NoTestsForYou(session=self.session) mp.register() self.session.startDir = support_file('scenario/tests_in_package') event = events.LoadFromNamesEvent(self.loader, [], None) result = self.session.hooks.loadTestsFromNames(event) assert isinstance(result, self.loader.suiteClass) self.assertEqual(len(result._tests), 0) self.assertEqual(len(self.watcher.called), 0)
def test_handle_file_event_can_add_tests(self): class TextTest(TestCase): def test(self): pass class TestsInText(events.Plugin): def handleFile(self, event): if event.path.endswith('.txt'): event.extraTests.append(TextTest('test')) mp = TestsInText(session=self.session) mp.register() self.session.startDir = support_file('scenario/tests_in_package') event = events.LoadFromNamesEvent(self.loader, [], None) result = self.session.hooks.loadTestsFromNames(event) assert isinstance(result, self.loader.suiteClass) self.assertEqual(len(result._tests), 2) self.assertEqual(len(self.watcher.called), 1)
def loadTestsFromNames(self, testNames, module=None): """Load tests from test names. Fires :func:`loadTestsFromNames` hook. """ event = events.LoadFromNamesEvent( self, testNames, module) result = self.session.hooks.loadTestsFromNames(event) log.debug('loadTestsFromNames event %s result %s', event, result) if event.handled: suites = result or [] else: suites = [self.loadTestsFromName(name, module) for name in event.names] if event.extraTests: suites.extend(event.extraTests) return self.suiteClass(suites)