move tests to test_funcargs.py and start with new request object tests
--HG-- branch : trunk
This commit is contained in:
		
							parent
							
								
									04aec935bd
								
							
						
					
					
						commit
						70840f605e
					
				| 
						 | 
					@ -79,8 +79,8 @@ class PluginManager(object):
 | 
				
			||||||
        for x in self.comregistry.listattr(attrname):
 | 
					        for x in self.comregistry.listattr(attrname):
 | 
				
			||||||
            return x
 | 
					            return x
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def listattr(self, attrname, plugins=None):
 | 
					    def listattr(self, attrname, plugins=None, extra=()):
 | 
				
			||||||
        return self.comregistry.listattr(attrname, plugins=plugins)
 | 
					        return self.comregistry.listattr(attrname, plugins=plugins, extra=extra)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def call_firstresult(self, *args, **kwargs):
 | 
					    def call_firstresult(self, *args, **kwargs):
 | 
				
			||||||
        return self.comregistry.call_firstresult(*args, **kwargs)
 | 
					        return self.comregistry.call_firstresult(*args, **kwargs)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -410,6 +410,20 @@ class Function(FunctionMixin, py.test.collect.Item):
 | 
				
			||||||
    def __ne__(self, other):
 | 
					    def __ne__(self, other):
 | 
				
			||||||
        return not self == other
 | 
					        return not self == other
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def getrequest(self, argname):
 | 
				
			||||||
 | 
					        return FuncargRequest(pyfuncitem=self, argname=argname) 
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
# DEPRECATED
 | 
					
 | 
				
			||||||
#from py.__.test.plugin.pytest_doctest import DoctestFile 
 | 
					class FuncargRequest:
 | 
				
			||||||
 | 
					    def __init__(self, pyfuncitem, argname):
 | 
				
			||||||
 | 
					        self.pyfuncitem = pyfuncitem
 | 
				
			||||||
 | 
					        self.argname = argname 
 | 
				
			||||||
 | 
					        funcargname = "pytest_funcarg__" + str(argname) 
 | 
				
			||||||
 | 
					        pm = self.pyfuncitem.config.pluginmanager 
 | 
				
			||||||
 | 
					        extra = []
 | 
				
			||||||
 | 
					        current = pyfuncitem
 | 
				
			||||||
 | 
					        while not isinstance(current, Module):
 | 
				
			||||||
 | 
					            current = current.parent
 | 
				
			||||||
 | 
					            if isinstance(current, (Instance, Module)):
 | 
				
			||||||
 | 
					                extra.insert(0, current.obj)
 | 
				
			||||||
 | 
					        self._methods = pm.listattr(funcargname, extra=extra)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,103 @@
 | 
				
			||||||
 | 
					import py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class TestFuncargs:
 | 
				
			||||||
 | 
					    def test_funcarg_lookupfails(self, testdir):
 | 
				
			||||||
 | 
					        testdir.makeconftest("""
 | 
				
			||||||
 | 
					            class ConftestPlugin:
 | 
				
			||||||
 | 
					                def pytest_funcarg__something(self, pyfuncitem):
 | 
				
			||||||
 | 
					                    return 42
 | 
				
			||||||
 | 
					        """)
 | 
				
			||||||
 | 
					        item = testdir.getitem("def test_func(some): pass")
 | 
				
			||||||
 | 
					        exc = py.test.raises(LookupError, "item.setupargs()")
 | 
				
			||||||
 | 
					        s = str(exc.value)
 | 
				
			||||||
 | 
					        assert s.find("something") != -1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_funcarg_lookup_default(self, testdir):
 | 
				
			||||||
 | 
					        item = testdir.getitem("def test_func(some, other=42): pass")
 | 
				
			||||||
 | 
					        class Provider:
 | 
				
			||||||
 | 
					            def pytest_funcarg__some(self, pyfuncitem):
 | 
				
			||||||
 | 
					                return pyfuncitem.name 
 | 
				
			||||||
 | 
					        item.config.pluginmanager.register(Provider())
 | 
				
			||||||
 | 
					        item.setupargs()
 | 
				
			||||||
 | 
					        assert len(item.funcargs) == 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_funcarg_lookup_default_gets_overriden(self, testdir):
 | 
				
			||||||
 | 
					        item = testdir.getitem("def test_func(some=42, other=13): pass")
 | 
				
			||||||
 | 
					        class Provider:
 | 
				
			||||||
 | 
					            def pytest_funcarg__other(self, pyfuncitem):
 | 
				
			||||||
 | 
					                return pyfuncitem.name 
 | 
				
			||||||
 | 
					        item.config.pluginmanager.register(Provider())
 | 
				
			||||||
 | 
					        item.setupargs()
 | 
				
			||||||
 | 
					        assert len(item.funcargs) == 1
 | 
				
			||||||
 | 
					        name, value = item.funcargs.popitem()
 | 
				
			||||||
 | 
					        assert name == "other"
 | 
				
			||||||
 | 
					        assert value == item.name 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_funcarg_basic(self, testdir):
 | 
				
			||||||
 | 
					        item = testdir.getitem("def test_func(some, other): pass")
 | 
				
			||||||
 | 
					        class Provider:
 | 
				
			||||||
 | 
					            def pytest_funcarg__some(self, pyfuncitem):
 | 
				
			||||||
 | 
					                return pyfuncitem.name 
 | 
				
			||||||
 | 
					            def pytest_funcarg__other(self, pyfuncitem):
 | 
				
			||||||
 | 
					                return 42
 | 
				
			||||||
 | 
					        item.config.pluginmanager.register(Provider())
 | 
				
			||||||
 | 
					        item.setupargs()
 | 
				
			||||||
 | 
					        assert len(item.funcargs) == 2
 | 
				
			||||||
 | 
					        assert item.funcargs['some'] == "test_func"
 | 
				
			||||||
 | 
					        assert item.funcargs['other'] == 42
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_funcarg_addfinalizer(self, testdir):
 | 
				
			||||||
 | 
					        item = testdir.getitem("def test_func(some): pass")
 | 
				
			||||||
 | 
					        l = []
 | 
				
			||||||
 | 
					        class Provider:
 | 
				
			||||||
 | 
					            def pytest_funcarg__some(self, pyfuncitem):
 | 
				
			||||||
 | 
					                pyfuncitem.addfinalizer(lambda: l.append(42))
 | 
				
			||||||
 | 
					                return 3
 | 
				
			||||||
 | 
					        item.config.pluginmanager.register(Provider())
 | 
				
			||||||
 | 
					        item.setupargs()
 | 
				
			||||||
 | 
					        assert len(item.funcargs) == 1
 | 
				
			||||||
 | 
					        assert item.funcargs['some'] == 3
 | 
				
			||||||
 | 
					        assert len(l) == 0
 | 
				
			||||||
 | 
					        item.teardown()
 | 
				
			||||||
 | 
					        assert len(l) == 1
 | 
				
			||||||
 | 
					        assert l[0] == 42
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_funcarg_lookup_modulelevel(self, testdir):
 | 
				
			||||||
 | 
					        modcol = testdir.getmodulecol("""
 | 
				
			||||||
 | 
					            def pytest_funcarg__something(pyfuncitem):
 | 
				
			||||||
 | 
					                return pyfuncitem.name
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            class TestClass:
 | 
				
			||||||
 | 
					                def test_method(self, something):
 | 
				
			||||||
 | 
					                    pass 
 | 
				
			||||||
 | 
					            def test_func(something):
 | 
				
			||||||
 | 
					                pass 
 | 
				
			||||||
 | 
					        """)
 | 
				
			||||||
 | 
					        item1, item2 = testdir.genitems([modcol])
 | 
				
			||||||
 | 
					        modcol.setup()
 | 
				
			||||||
 | 
					        assert modcol.config.pluginmanager.isregistered(modcol.obj)
 | 
				
			||||||
 | 
					        item1.setupargs()
 | 
				
			||||||
 | 
					        assert item1.funcargs['something'] ==  "test_method"
 | 
				
			||||||
 | 
					        item2.setupargs()
 | 
				
			||||||
 | 
					        assert item2.funcargs['something'] ==  "test_func"
 | 
				
			||||||
 | 
					        modcol.teardown()
 | 
				
			||||||
 | 
					        assert not modcol.config.pluginmanager.isregistered(modcol.obj)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class TestRequest:
 | 
				
			||||||
 | 
					    def test_request_contains_funcargs_methods(self, testdir):
 | 
				
			||||||
 | 
					        modcol = testdir.getmodulecol("""
 | 
				
			||||||
 | 
					            def pytest_funcarg__something(request):
 | 
				
			||||||
 | 
					                pass
 | 
				
			||||||
 | 
					            class TestClass:
 | 
				
			||||||
 | 
					                def pytest_funcarg__something(self, request):
 | 
				
			||||||
 | 
					                    pass
 | 
				
			||||||
 | 
					                def test_method(self, something):
 | 
				
			||||||
 | 
					                    pass 
 | 
				
			||||||
 | 
					        """)
 | 
				
			||||||
 | 
					        item1, = testdir.genitems([modcol])
 | 
				
			||||||
 | 
					        assert item1.name == "test_method"
 | 
				
			||||||
 | 
					        methods = item1.getrequest("something")._methods 
 | 
				
			||||||
 | 
					        assert len(methods) == 2
 | 
				
			||||||
 | 
					        method1, method2 = methods 
 | 
				
			||||||
 | 
					        assert not hasattr(method1, 'im_self')
 | 
				
			||||||
 | 
					        assert method2.im_self is not None
 | 
				
			||||||
| 
						 | 
					@ -243,88 +243,6 @@ class TestFunction:
 | 
				
			||||||
        assert f1 == f1_b
 | 
					        assert f1 == f1_b
 | 
				
			||||||
        assert not f1 != f1_b
 | 
					        assert not f1 != f1_b
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_funcarg_lookupfails(self, testdir):
 | 
					 | 
				
			||||||
        testdir.makeconftest("""
 | 
					 | 
				
			||||||
            class ConftestPlugin:
 | 
					 | 
				
			||||||
                def pytest_funcarg__something(self, pyfuncitem):
 | 
					 | 
				
			||||||
                    return 42
 | 
					 | 
				
			||||||
        """)
 | 
					 | 
				
			||||||
        item = testdir.getitem("def test_func(some): pass")
 | 
					 | 
				
			||||||
        exc = py.test.raises(LookupError, "item.setupargs()")
 | 
					 | 
				
			||||||
        s = str(exc.value)
 | 
					 | 
				
			||||||
        assert s.find("something") != -1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def test_funcarg_lookup_default(self, testdir):
 | 
					 | 
				
			||||||
        item = testdir.getitem("def test_func(some, other=42): pass")
 | 
					 | 
				
			||||||
        class Provider:
 | 
					 | 
				
			||||||
            def pytest_funcarg__some(self, pyfuncitem):
 | 
					 | 
				
			||||||
                return pyfuncitem.name 
 | 
					 | 
				
			||||||
        item.config.pluginmanager.register(Provider())
 | 
					 | 
				
			||||||
        item.setupargs()
 | 
					 | 
				
			||||||
        assert len(item.funcargs) == 1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def test_funcarg_lookup_default_gets_overriden(self, testdir):
 | 
					 | 
				
			||||||
        item = testdir.getitem("def test_func(some=42, other=13): pass")
 | 
					 | 
				
			||||||
        class Provider:
 | 
					 | 
				
			||||||
            def pytest_funcarg__other(self, pyfuncitem):
 | 
					 | 
				
			||||||
                return pyfuncitem.name 
 | 
					 | 
				
			||||||
        item.config.pluginmanager.register(Provider())
 | 
					 | 
				
			||||||
        item.setupargs()
 | 
					 | 
				
			||||||
        assert len(item.funcargs) == 1
 | 
					 | 
				
			||||||
        name, value = item.funcargs.popitem()
 | 
					 | 
				
			||||||
        assert name == "other"
 | 
					 | 
				
			||||||
        assert value == item.name 
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def test_funcarg_basic(self, testdir):
 | 
					 | 
				
			||||||
        item = testdir.getitem("def test_func(some, other): pass")
 | 
					 | 
				
			||||||
        class Provider:
 | 
					 | 
				
			||||||
            def pytest_funcarg__some(self, pyfuncitem):
 | 
					 | 
				
			||||||
                return pyfuncitem.name 
 | 
					 | 
				
			||||||
            def pytest_funcarg__other(self, pyfuncitem):
 | 
					 | 
				
			||||||
                return 42
 | 
					 | 
				
			||||||
        item.config.pluginmanager.register(Provider())
 | 
					 | 
				
			||||||
        item.setupargs()
 | 
					 | 
				
			||||||
        assert len(item.funcargs) == 2
 | 
					 | 
				
			||||||
        assert item.funcargs['some'] == "test_func"
 | 
					 | 
				
			||||||
        assert item.funcargs['other'] == 42
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def test_funcarg_addfinalizer(self, testdir):
 | 
					 | 
				
			||||||
        item = testdir.getitem("def test_func(some): pass")
 | 
					 | 
				
			||||||
        l = []
 | 
					 | 
				
			||||||
        class Provider:
 | 
					 | 
				
			||||||
            def pytest_funcarg__some(self, pyfuncitem):
 | 
					 | 
				
			||||||
                pyfuncitem.addfinalizer(lambda: l.append(42))
 | 
					 | 
				
			||||||
                return 3
 | 
					 | 
				
			||||||
        item.config.pluginmanager.register(Provider())
 | 
					 | 
				
			||||||
        item.setupargs()
 | 
					 | 
				
			||||||
        assert len(item.funcargs) == 1
 | 
					 | 
				
			||||||
        assert item.funcargs['some'] == 3
 | 
					 | 
				
			||||||
        assert len(l) == 0
 | 
					 | 
				
			||||||
        item.teardown()
 | 
					 | 
				
			||||||
        assert len(l) == 1
 | 
					 | 
				
			||||||
        assert l[0] == 42
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def test_funcarg_lookup_modulelevel(self, testdir):
 | 
					 | 
				
			||||||
        modcol = testdir.getmodulecol("""
 | 
					 | 
				
			||||||
            def pytest_funcarg__something(pyfuncitem):
 | 
					 | 
				
			||||||
                return pyfuncitem.name
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            class TestClass:
 | 
					 | 
				
			||||||
                def test_method(self, something):
 | 
					 | 
				
			||||||
                    pass 
 | 
					 | 
				
			||||||
            def test_func(something):
 | 
					 | 
				
			||||||
                pass 
 | 
					 | 
				
			||||||
        """)
 | 
					 | 
				
			||||||
        item1, item2 = testdir.genitems([modcol])
 | 
					 | 
				
			||||||
        modcol.setup()
 | 
					 | 
				
			||||||
        assert modcol.config.pluginmanager.isregistered(modcol.obj)
 | 
					 | 
				
			||||||
        item1.setupargs()
 | 
					 | 
				
			||||||
        assert item1.funcargs['something'] ==  "test_method"
 | 
					 | 
				
			||||||
        item2.setupargs()
 | 
					 | 
				
			||||||
        assert item2.funcargs['something'] ==  "test_func"
 | 
					 | 
				
			||||||
        modcol.teardown()
 | 
					 | 
				
			||||||
        assert not modcol.config.pluginmanager.isregistered(modcol.obj)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class TestSorting:
 | 
					class TestSorting:
 | 
				
			||||||
    def test_check_equality_and_cmp_basic(self, testdir):
 | 
					    def test_check_equality_and_cmp_basic(self, testdir):
 | 
				
			||||||
        modcol = testdir.getmodulecol("""
 | 
					        modcol = testdir.getmodulecol("""
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue