class NoseOfYetiPlugin(Plugin): configSection = 'noseOfYeti' def __init__(self): self.test_chooser = TestChooser() default_ignore_kls = [] if "NOSE_NOY_IGNORE_KLS" in os.environ: default_ignore_kls.extend(os.environ["NOSE_NOY_IGNORE_KLS"].split(",")) self.ignore_kls = self.config.as_list('ignore-kls', default=default_ignore_kls) self.always_on = self.config.as_bool('always-on', default=False) parser_options = ['default', 'action', 'dest', 'help'] for option, attributes in spec_options.items(): action = attributes.get("action", "store") default = attributes.get("default") if action == "store_true": action = "as_bool" default = False elif action == "store_false": action = "as_bool" default = True elif action == "append": action = "as_list" default = attributes.get("default", []) elif action == "store": action = "as_str" default = attributes.get("default") if callable(default): default = default(os.environ) setattr(self, option.replace("-", "_"), getattr(self.config, action)(option, default=Default(default))) def handleFile(self, event): if not getattr(self, "_configured", False): self._configured = True self.enable() def loadTestsFromModule(self, event): self.test_chooser.new_module() if hasattr(event.module, "__package__"): pkg = sys.modules.get(event.module.__package__) if getattr(pkg, "__test__", None) is False: event.handled = True def getTestCaseNames(self, event): names = filter(event.isTestMethod, dir(event.testCase)) methods = [(name, getattr(event.testCase, name)) for name in names] event.handled = True return [name for name, method in methods if self.test_chooser.consider(method, self.ignore_kls) is not False] def enable(self): self.done = {} options = dict((option, getattr(self, option.replace('-', '_'))) for option in spec_options) register_from_options(options, spec_options, extractor=extract_options)
class Test_TestChooser(object): def setup(self): self.test_chooser = TestChooser() def test_it_resets_done_when_told_about_new_module(self): self.test_chooser.done | should | equal_to({}) self.test_chooser.done["a"] = 3 self.test_chooser.done | should | equal_to({"a": 3}) self.test_chooser.new_module() self.test_chooser.done | should | equal_to({}) def test_already_visited_puts_kls_name_key_in_done_or_returns_True(self): self.test_chooser.done | should | equal_to({}) self.test_chooser.already_visited("a", "b") | should | be(False) self.test_chooser.done | should | equal_to({"a.b": True}) self.test_chooser.already_visited("a", "b") | should | be(True) self.test_chooser.already_visited("c", "d") | should | be(False) self.test_chooser.done | should | equal_to({"a.b": True, "c.d": True}) self.test_chooser.already_visited("c", "d") | should | be(True)
class Test_TestChooser(object): def setup(self): self.test_chooser = TestChooser() def test_it_resets_done_when_told_about_new_module(self): self.test_chooser.done | should | equal_to({}) self.test_chooser.done['a'] = 3 self.test_chooser.done | should | equal_to({'a': 3}) self.test_chooser.new_module() self.test_chooser.done | should | equal_to({}) def test_already_visited_puts_kls_name_key_in_done_or_returns_True(self): self.test_chooser.done | should | equal_to({}) self.test_chooser.already_visited('a', 'b') | should | be(False) self.test_chooser.done | should | equal_to({'a.b': True}) self.test_chooser.already_visited('a', 'b') | should | be(True) self.test_chooser.already_visited('c', 'd') | should | be(False) self.test_chooser.done | should | equal_to({'a.b': True, 'c.d': True}) self.test_chooser.already_visited('c', 'd') | should | be(True)
class Test_TestChooser(object): def setup(self): self.test_chooser = TestChooser() def test_it_resets_done_when_told_about_new_module(self): self.test_chooser.done |should| equal_to({}) self.test_chooser.done['a'] = 3 self.test_chooser.done |should| equal_to({'a':3}) self.test_chooser.new_module() self.test_chooser.done |should| equal_to({}) def test_already_visited_puts_kls_name_key_in_done_or_returns_True(self): self.test_chooser.done |should| equal_to({}) self.test_chooser.already_visited('a', 'b') |should| be(False) self.test_chooser.done |should| equal_to({'a.b' : True}) self.test_chooser.already_visited('a', 'b') |should| be(True) self.test_chooser.already_visited('c', 'd') |should| be(False) self.test_chooser.done |should| equal_to({'a.b' : True, 'c.d' : True}) self.test_chooser.already_visited('c', 'd') |should| be(True)