125 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			125 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
	
import py
 | 
						|
from py.__.test.looponfail.remote import LooponfailingSession, LoopState, RemoteControl 
 | 
						|
 | 
						|
class TestRemoteControl:
 | 
						|
    def test_nofailures(self, testdir):
 | 
						|
        item = testdir.getitem("def test_func(): pass\n")
 | 
						|
        control = RemoteControl(item._config)
 | 
						|
        control.setup()
 | 
						|
        failures = control.runsession()
 | 
						|
        assert not failures
 | 
						|
 | 
						|
    def test_failures_somewhere(self, testdir):
 | 
						|
        item = testdir.getitem("def test_func(): assert 0\n")
 | 
						|
        control = RemoteControl(item._config)
 | 
						|
        control.setup()
 | 
						|
        failures = control.runsession()
 | 
						|
        assert failures 
 | 
						|
        control.setup()
 | 
						|
        item.fspath.write("def test_func(): assert 1\n")
 | 
						|
        (item.fspath + "c").remove()
 | 
						|
        failures = control.runsession(failures)
 | 
						|
        assert not failures
 | 
						|
 | 
						|
    def test_failure_change(self, testdir):
 | 
						|
        modcol = testdir.getitem("""
 | 
						|
            def test_func(): 
 | 
						|
                assert 0
 | 
						|
        """)
 | 
						|
        control = RemoteControl(modcol._config)
 | 
						|
        control.setup()
 | 
						|
        failures = control.runsession()
 | 
						|
        assert failures 
 | 
						|
        control.setup()
 | 
						|
        modcol.fspath.write(py.code.Source("""
 | 
						|
            def test_func():
 | 
						|
                assert 1
 | 
						|
            def test_new():
 | 
						|
                assert 0
 | 
						|
        """))
 | 
						|
        (modcol.fspath + "c").remove()
 | 
						|
        failures = control.runsession(failures)
 | 
						|
        assert not failures
 | 
						|
        control.setup()
 | 
						|
        failures = control.runsession()
 | 
						|
        assert failures
 | 
						|
        assert str(failures).find("test_new") != -1
 | 
						|
 | 
						|
class TestLooponFailing:
 | 
						|
    def test_looponfailing_from_fail_to_ok(self, testdir):
 | 
						|
        modcol = testdir.getmodulecol("""
 | 
						|
            def test_one():
 | 
						|
                x = 0
 | 
						|
                assert x == 1
 | 
						|
            def test_two():
 | 
						|
                assert 1
 | 
						|
        """)
 | 
						|
        session = LooponfailingSession(modcol._config)
 | 
						|
        loopstate = LoopState()
 | 
						|
        session.remotecontrol.setup()
 | 
						|
        session.loop_once(loopstate)
 | 
						|
        assert len(loopstate.colitems) == 1
 | 
						|
 
 | 
						|
        modcol.fspath.write(py.code.Source("""
 | 
						|
            def test_one():
 | 
						|
                x = 15
 | 
						|
                assert x == 15
 | 
						|
            def test_two():
 | 
						|
                assert 1
 | 
						|
        """))
 | 
						|
        assert session.statrecorder.check()
 | 
						|
        session.loop_once(loopstate)
 | 
						|
        assert not loopstate.colitems 
 | 
						|
 | 
						|
    def test_looponfailing_from_one_to_two_tests(self, testdir):
 | 
						|
        modcol = testdir.getmodulecol("""
 | 
						|
            def test_one():
 | 
						|
                assert 0
 | 
						|
        """)
 | 
						|
        session = LooponfailingSession(modcol._config)
 | 
						|
        loopstate = LoopState()
 | 
						|
        session.remotecontrol.setup()
 | 
						|
        loopstate.colitems = []
 | 
						|
        session.loop_once(loopstate)
 | 
						|
        assert len(loopstate.colitems) == 1
 | 
						|
 | 
						|
        modcol.fspath.write(py.code.Source("""
 | 
						|
            def test_one():
 | 
						|
                assert 1 # passes now
 | 
						|
            def test_two():
 | 
						|
                assert 0 # new and fails
 | 
						|
        """))
 | 
						|
        assert session.statrecorder.check()
 | 
						|
        session.loop_once(loopstate)
 | 
						|
        assert len(loopstate.colitems) == 0
 | 
						|
 | 
						|
        session.loop_once(loopstate)
 | 
						|
        assert len(loopstate.colitems) == 1
 | 
						|
 | 
						|
    def test_looponfailing_removed_test(self, testdir):
 | 
						|
        modcol = testdir.getmodulecol("""
 | 
						|
            def test_one():
 | 
						|
                assert 0
 | 
						|
            def test_two():
 | 
						|
                assert 0
 | 
						|
        """)
 | 
						|
        session = LooponfailingSession(modcol._config)
 | 
						|
        loopstate = LoopState()
 | 
						|
        session.remotecontrol.setup()
 | 
						|
        loopstate.colitems = []
 | 
						|
        session.loop_once(loopstate)
 | 
						|
        assert len(loopstate.colitems) == 2
 | 
						|
 | 
						|
        modcol.fspath.write(py.code.Source("""
 | 
						|
            def test_xxx(): # renamed test
 | 
						|
                assert 0 
 | 
						|
            def test_two():
 | 
						|
                assert 1 # pass now
 | 
						|
        """))
 | 
						|
        assert session.statrecorder.check()
 | 
						|
        session.loop_once(loopstate)
 | 
						|
        assert len(loopstate.colitems) == 0
 | 
						|
 | 
						|
        session.loop_once(loopstate)
 | 
						|
        assert len(loopstate.colitems) == 1
 |