예제 #1
0
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)
예제 #2
0
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)
예제 #3
0
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)
예제 #4
0
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)