def test_listattr(self):
     plugins = PytestPlugins()
     class My2:
         x = 42
     plugins.register(My2())
     assert not plugins.listattr("hello")
     assert plugins.listattr("x") == [42]
 def test_getfirst(self):
     plugins = PytestPlugins()
     class My1:
         x = 1
     assert plugins.getfirst("x") is None
     plugins.register(My1())
     assert plugins.getfirst("x") == 1
 def test_consider_module(self, testdir):
     plugins = PytestPlugins()
     testdir.syspathinsert()
     testdir.makepyfile(pytest_plug1="class Plug1Plugin: pass")
     testdir.makepyfile(pytest_plug2="class Plug2Plugin: pass")
     mod = py.std.new.module("temp")
     mod.pytest_plugins = ["pytest_plug1", "pytest_plug2"]
     plugins.consider_module(mod)
     assert plugins.getplugin("plug1").__class__.__name__ == "Plug1Plugin"
     assert plugins.getplugin("plug2").__class__.__name__ == "Plug2Plugin"
 def test_call_each(self):
     plugins = PytestPlugins()
     class My:
         def method(self, arg):
             pass
     plugins.register(My())
     py.test.raises(TypeError, 'plugins.call_each("method")')
     l = plugins.call_each("method", arg=42)
     assert l == []
     py.test.raises(TypeError, 'plugins.call_each("method", arg=42, s=13)')
 def test_consider_env_plugin_instantiation(self, testdir, monkeypatch):
     plugins = PytestPlugins()
     testdir.syspathinsert()
     testdir.makepyfile(pytest_xy123="class Xy123Plugin: pass")
     monkeypatch.setitem(os.environ, 'PYTEST_PLUGINS', 'xy123')
     l1 = len(plugins.getplugins())
     plugins.consider_env()
     l2 = len(plugins.getplugins())
     assert l2 == l1 + 1 
     assert plugins.getplugin('pytest_xy123') 
     plugins.consider_env()
     l3 = len(plugins.getplugins())
     assert l2 == l3
    def test_consider_module_import_module(self, testdir, EventRecorder):
        mod = py.std.new.module("x")
        mod.pytest_plugins = "pytest_a"
        aplugin = testdir.makepyfile(pytest_a="""class APlugin: pass""")
        plugins = PytestPlugins() 
        evrec = EventRecorder(plugins)
        #syspath.prepend(aplugin.dirpath())
        py.std.sys.path.insert(0, str(aplugin.dirpath()))
        plugins.consider_module(mod)
        evlist = evrec.getnamed("plugin_registered")
        assert len(evlist) == 1 
        assert evlist[0].__class__.__name__ == "APlugin"

        # check that it is not registered twice 
        plugins.consider_module(mod)
        evlist = evrec.getnamed("plugin_registered")
        assert len(evlist) == 1 
    def test_consider_conftest(self, testdir):
        pp = PytestPlugins()
        mod = testdir.makepyfile("class ConftestPlugin: hello = 1").pyimport()
        pp.consider_conftest(mod)
        l = [x for x in pp.getplugins() if isinstance(x, mod.ConftestPlugin)]
        assert len(l) == 1
        assert l[0].hello == 1

        pp.consider_conftest(mod)
        l = [x for x in pp.getplugins() if isinstance(x, mod.ConftestPlugin)]
        assert len(l) == 1
    def test_import_plugin_importname(self, testdir):
        plugins = PytestPlugins()
        py.test.raises(ImportError, 'plugins.import_plugin("x.y")')
        py.test.raises(ImportError, 'plugins.import_plugin("pytest_x.y")')

        reset = testdir.syspathinsert()
        pluginname = "pytest_hello"
        testdir.makepyfile(**{pluginname: """
            class HelloPlugin:
                pass
        """})
        plugins.import_plugin("hello")
        len1 = len(plugins.getplugins())
        plugins.import_plugin("pytest_hello")
        len2 = len(plugins.getplugins())
        assert len1 == len2
        plugin1 = plugins.getplugin("pytest_hello")
        assert plugin1.__class__.__name__ == 'HelloPlugin'
        plugin2 = plugins.getplugin("hello")
        assert plugin2 is plugin1
 def test_call_firstresult(self):
     plugins = PytestPlugins()
     class My1:
         def method(self):
             pass
     class My2:
         def method(self):
             return True 
     class My3:
         def method(self):
             return None
     assert plugins.call_firstresult("method") is None
     assert plugins.call_firstresult("methodnotexists") is None
     plugins.register(My1())
     assert plugins.call_firstresult("method") is None
     plugins.register(My2())
     assert plugins.call_firstresult("method") == True
     plugins.register(My3())
     assert plugins.call_firstresult("method") == True
 def test_registry(self):
     pp = PytestPlugins()
     a1, a2 = object(), object()
     pp.register(a1)
     assert pp.isregistered(a1)
     pp.register(a2)
     assert pp.isregistered(a2)
     assert pp.getplugins() == [a1, a2]
     pp.unregister(a1)
     assert not pp.isregistered(a1)
     pp.unregister(a2)
     assert not pp.isregistered(a2)