111 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
	
import py
 | 
						|
from py.plugin.pytest_mark import MarkGenerator as Mark
 | 
						|
 | 
						|
class TestMark:
 | 
						|
    def test_pytest_mark_notcallable(self):
 | 
						|
        mark = Mark()
 | 
						|
        py.test.raises((AttributeError, TypeError), "mark()")
 | 
						|
 | 
						|
    def test_pytest_mark_bare(self):
 | 
						|
        mark = Mark()
 | 
						|
        def f(): pass
 | 
						|
        mark.hello(f)
 | 
						|
        assert f.hello
 | 
						|
 | 
						|
    def test_pytest_mark_keywords(self):
 | 
						|
        mark = Mark()
 | 
						|
        def f(): pass
 | 
						|
        mark.world(x=3, y=4)(f)
 | 
						|
        assert f.world 
 | 
						|
        assert f.world.x == 3
 | 
						|
        assert f.world.y == 4
 | 
						|
 | 
						|
    def test_apply_multiple_and_merge(self):
 | 
						|
        mark = Mark()
 | 
						|
        def f(): pass
 | 
						|
        marker = mark.world
 | 
						|
        mark.world(x=3)(f)
 | 
						|
        assert f.world.x == 3
 | 
						|
        mark.world(y=4)(f)
 | 
						|
        assert f.world.x == 3
 | 
						|
        assert f.world.y == 4
 | 
						|
        mark.world(y=1)(f)
 | 
						|
        assert f.world.y == 1
 | 
						|
        assert len(f.world.args) == 0
 | 
						|
 | 
						|
    def test_pytest_mark_positional(self):
 | 
						|
        mark = Mark()
 | 
						|
        def f(): pass
 | 
						|
        mark.world("hello")(f)
 | 
						|
        assert f.world.args[0] == "hello"
 | 
						|
        mark.world("world")(f)
 | 
						|
 | 
						|
    def test_oldstyle_marker_access(self, recwarn):
 | 
						|
        mark = Mark()
 | 
						|
        def f(): pass
 | 
						|
        mark.world(x=1)(f)
 | 
						|
        assert f.world.x == 1
 | 
						|
        assert recwarn.pop()
 | 
						|
 | 
						|
class TestFunctional:
 | 
						|
    def test_mark_per_function(self, testdir):
 | 
						|
        p = testdir.makepyfile("""
 | 
						|
            import py
 | 
						|
            @py.test.mark.hello
 | 
						|
            def test_hello():
 | 
						|
                assert hasattr(test_hello, 'hello')
 | 
						|
        """)
 | 
						|
        result = testdir.runpytest(p)
 | 
						|
        assert result.stdout.fnmatch_lines(["*passed*"])
 | 
						|
 | 
						|
    def test_mark_per_module(self, testdir):
 | 
						|
        item = testdir.getitem("""
 | 
						|
            import py
 | 
						|
            pytestmark = py.test.mark.hello
 | 
						|
            def test_func():
 | 
						|
                pass
 | 
						|
        """)
 | 
						|
        keywords = item.readkeywords()
 | 
						|
        assert 'hello' in keywords
 | 
						|
 | 
						|
    def test_mark_per_class(self, testdir):
 | 
						|
        modcol = testdir.getmodulecol("""
 | 
						|
            import py
 | 
						|
            class TestClass:
 | 
						|
                pytestmark = py.test.mark.hello
 | 
						|
                def test_func(self):
 | 
						|
                    assert TestClass.test_func.hello  
 | 
						|
        """)
 | 
						|
        clscol = modcol.collect()[0]
 | 
						|
        item = clscol.collect()[0].collect()[0]
 | 
						|
        keywords = item.readkeywords()
 | 
						|
        assert 'hello' in keywords
 | 
						|
 | 
						|
    def test_merging_markers(self, testdir):
 | 
						|
        p = testdir.makepyfile("""
 | 
						|
            import py
 | 
						|
            pytestmark = py.test.mark.hello("pos1", x=1, y=2)
 | 
						|
            class TestClass:
 | 
						|
                # classlevel overrides module level
 | 
						|
                pytestmark = py.test.mark.hello(x=3)
 | 
						|
                @py.test.mark.hello("pos0", z=4)
 | 
						|
                def test_func(self):
 | 
						|
                    pass
 | 
						|
        """)
 | 
						|
        items, rec = testdir.inline_genitems(p)
 | 
						|
        item, = items
 | 
						|
        keywords = item.readkeywords()
 | 
						|
        marker = keywords['hello']
 | 
						|
        assert marker.args == ["pos0", "pos1"]
 | 
						|
        assert marker.kwargs == {'x': 3, 'y': 2, 'z': 4}
 | 
						|
 | 
						|
    def test_mark_other(self, testdir):
 | 
						|
        item = testdir.getitem("""
 | 
						|
            import py
 | 
						|
            class pytestmark:
 | 
						|
                pass
 | 
						|
            def test_func():
 | 
						|
                pass
 | 
						|
        """)
 | 
						|
        keywords = item.readkeywords()
 |