Example #1
0
def test_signal_once():

    engine = GameEngine(BaseScene, basic_systems=[Quitter])
    with engine:
        engine.start()
        engine.loop_once()
    assert not engine.running
Example #2
0
def test_free(clean_assets):
    free_called = False

    class Const(Asset):
        def background_parse(self, data):
            return "yoink"

        def free(self, obj):
            nonlocal free_called
            free_called = True

    a = Const('ppb/utils.py')
    engine = GameEngine(
        AssetTestScene, basic_systems=[AssetLoadingSystem, Failer],
        fail=lambda e: False, message=None, run_time=1,
    )
    with engine:
        engine.start()

        assert a.load() == "yoink"
        # At this poiint, background processing should have finished

    del engine, a  # Clean up everything that might be holding a reference.
    gc.collect()
    assert free_called
Example #3
0
def test_extending_all_events():

    def all_extension(event):
        event.test_value = "pursuedpybear"

    @dataclasses.dataclass
    class TestEvent:
        pass


    class TestScene(BaseScene):

        def on_update(self, event, signal):
            assert event.test_value == "pursuedpybear"

        def on_mouse_motion(self, event, signal):
            assert event.test_value == "pursuedpybear"

        def on_test_event(self, event, signal):
            assert event.test_value == "pursuedpybear"

    ge = GameEngine(TestScene)
    ge.start()  # We need test scene instantiated.
    ge.register(..., all_extension)

    ge.signal(events.Update(0.01))
    ge.publish()

    ge.signal(events.MouseMotion(Vector(0, 0), Vector(0, 0), Vector(0, 1), []))
    ge.publish()

    ge.signal(TestEvent())
    ge.publish()
Example #4
0
def test_loading():
    a = Asset('ppb/engine.py')
    engine = GameEngine(BaseScene, basic_systems=[AssetLoadingSystem])
    with engine:
        engine.start()

        assert a.load()
Example #5
0
class TestEngineSceneActivate(unittest.TestCase):
    def setUp(self):
        self.mock_scene = mock.Mock(spec=BaseScene)
        self.mock_scene_class = mock.Mock(return_value=self.mock_scene)
        self.engine = GameEngine(self.mock_scene_class)
        self.engine.start()

    def test_continue_running(self):
        """
        Test that a Scene.change that returns (False, {}) doesn't change
        state.
        """
        self.mock_scene.change = mock.Mock(return_value=(CONTINUE, {}))
        self.engine.manage_scene(*self.engine.current_scene.change())
        self.assertIs(self.engine.current_scene, self.mock_scene)

    def test_stop_scene_no_new_scene(self):
        """
        Test a Scene.change that returns (True, {}) leaves the scene
        stack empty.
        """
        self.mock_scene.change = mock.Mock(return_value=(STOP, {}))
        self.engine.manage_scene(*self.engine.current_scene.change())
        self.assertIsNone(self.engine.current_scene)

    def test_next_scene_none(self):
        self.mock_scene.change = mock.Mock(return_value=(CONTINUE, {
            "scene_class": None
        }))
        self.engine.manage_scene(*self.engine.current_scene.change())
        self.assertIs(self.engine.current_scene, self.mock_scene)
Example #6
0
def test_engine_initial_scene():
    mock_scene = mock.Mock(spec=BaseScene)
    mock_scene.background_color = (0, 0, 0)
    mock_scene_class = mock.Mock(spec=BaseScene, return_value=mock_scene)
    engine = GameEngine(mock_scene_class)
    engine.start()
    assert engine.current_scene is mock_scene
Example #7
0
def test_extending_all_events():
    def all_extension(event):
        event.test_value = "pursuedpybear"

    @dataclasses.dataclass
    class TestEvent:
        pass

    class TestScene(BaseScene):
        def on_update(self, event, signal):
            assert event.test_value == "pursuedpybear"

        def on_mouse_motion(self, event, signal):
            assert event.test_value == "pursuedpybear"

        def on_test_event(self, event, signal):
            assert event.test_value == "pursuedpybear"

    ge = GameEngine(TestScene)
    ge.start()  # We need test scene instantiated.
    ge.register(..., all_extension)

    ge.signal(events.Update(0.01))
    ge.publish()

    ge.signal(events.MouseMotion(Vector(0, 0), Vector(0, 0), Vector(0, 1), []))
    ge.publish()

    ge.signal(TestEvent())
    ge.publish()
Example #8
0
class TestEngineSceneActivate(unittest.TestCase):

    def setUp(self):
        self.mock_scene = mock.Mock(spec=BaseScene)
        self.mock_scene.background_color = (0, 0, 0)
        self.mock_scene_class = mock.Mock(return_value=self.mock_scene)
        self.engine = GameEngine(self.mock_scene_class)
        self.engine.display = mock.Mock(spec=Surface)
        self.engine.start()

    def test_continue_running(self):
        """
        Test that a Scene.change that returns (True, {}) doesn't change
        state.
        """
        self.mock_scene.change = mock.Mock(return_value=(CONTINUE, {}))
        self.engine.manage_scene()
        self.assertIs(self.engine.current_scene, self.mock_scene)

    def test_stop_scene_no_new_scene(self):
        """
        Test a Scene.change that returns (False, {}) leaves the scene
        stack empty.
        """
        self.mock_scene.change = mock.Mock(return_value=(STOP, {}))
        self.engine.manage_scene()
        self.assertIsNone(self.engine.current_scene)

    def test_next_scene_none(self):
        self.mock_scene.change = mock.Mock(return_value=(CONTINUE,
                                                         {"scene_class": None}
                                                         )
                                           )
        self.engine.manage_scene()
        self.assertIs(self.engine.current_scene, self.mock_scene)
Example #9
0
 def test_start(self):
     mock_scene = mock.Mock(spec=BaseScene)
     mock_scene.background_color = (0, 0, 0)
     mock_scene_class = mock.Mock(spec=BaseScene, return_value=mock_scene)
     engine = GameEngine(mock_scene_class)
     engine.display = mock.Mock(spec=Surface)
     engine.start()
     self.assertIs(engine.current_scene, mock_scene)
Example #10
0
def test_missing_resource():
    a = Asset('ppb/dont.touch.this')
    engine = GameEngine(BaseScene, basic_systems=[AssetLoadingSystem])
    with engine:
        engine.start()

        with pytest.raises(FileNotFoundError):
            assert a.load()
Example #11
0
def test_missing_package():
    a = Asset('does/not/exist')
    engine = GameEngine(BaseScene, basic_systems=[AssetLoadingSystem])
    with engine:
        engine.start()

        with pytest.raises(FileNotFoundError):
            assert a.load()
Example #12
0
 def test_start(self):
     mock_scene = mock.Mock(spec=BaseScene)
     mock_scene.background_color = (0, 0, 0)
     mock_scene_class = mock.Mock(spec=BaseScene, return_value=mock_scene)
     engine = GameEngine(mock_scene_class)
     engine.display = mock.Mock(spec=Surface)
     engine.start()
     self.assertIs(engine.current_scene, mock_scene)
Example #13
0
def test_signal_once():

    engine = GameEngine(Scene,
                        basic_systems=[Quitter, Failer],
                        message=None,
                        fail=lambda x: False)
    with engine:
        engine.start()
        engine.loop_once()
    assert not engine.running
Example #14
0
def test_missing_package(clean_assets):
    a = Asset('does/not/exist')
    engine = GameEngine(
        AssetTestScene, basic_systems=[AssetLoadingSystem, Failer],
        fail=lambda e: False, message=None, run_time=1,
    )
    with engine:
        engine.start()

        with pytest.raises(FileNotFoundError):
            assert a.load()
Example #15
0
def test_missing_parse():
    class Const(Asset):
        def file_missing(self):
            return "igotu"

    a = Const('spam/eggs')
    engine = GameEngine(BaseScene, basic_systems=[AssetLoadingSystem])
    with engine:
        engine.start()

        assert a.load() == "igotu"
Example #16
0
def test_parsing():
    class Const(Asset):
        def background_parse(self, data):
            return "nah"

    a = Const('ppb/flags.py')
    engine = GameEngine(BaseScene, basic_systems=[AssetLoadingSystem])
    with engine:
        engine.start()

        assert a.load() == "nah"
Example #17
0
def test_missing_resource(clean_assets):
    a = Asset('ppb/dont.touch.this')
    engine = GameEngine(
        AssetTestScene, basic_systems=[AssetLoadingSystem, Failer],
        fail=lambda e: False, message=None, run_time=1,
    )
    with engine:
        engine.start()

        with pytest.raises(FileNotFoundError):
            assert a.load()
Example #18
0
def test_parsing(clean_assets):
    class Const(Asset):
        def background_parse(self, data):
            return "nah"

    a = Const('ppb/flags.py')
    engine = GameEngine(
        AssetTestScene, basic_systems=[AssetLoadingSystem, Failer],
        fail=lambda e: False, message=None, run_time=1,
    )
    with engine:
        engine.start()

        assert a.load() == "nah"
Example #19
0
def test_missing_parse(clean_assets):
    class Const(Asset):
        def file_missing(self):
            return "igotu"

    a = Const('spam/eggs')
    engine = GameEngine(
        AssetTestScene, basic_systems=[AssetLoadingSystem, Failer],
        fail=lambda e: False, message=None, run_time=1,
    )
    with engine:
        engine.start()

        assert a.load() == "igotu"
Example #20
0
def test_loading(clean_assets):
    a = Asset('ppb/engine.py')
    engine = GameEngine(
        AssetTestScene, basic_systems=[AssetLoadingSystem, Failer],
        fail=lambda e: False, message=None, run_time=1,
    )
    with engine:
        engine.start()
        ats = engine.current_scene

        engine.main_loop()

        assert a.load()
        print(vars(ats))
        assert ats.ale.asset is a
        assert ats.ale.total_loaded == 1
        assert ats.ale.total_queued == 0
Example #21
0
def test_engine_initial_scene(scene):
    engine = GameEngine(scene)
    assert len(engine.children._scenes) == 0
    engine.start()
    assert len(engine.children._scenes) == 1
Example #22
0
 def test_start(self):
     mock_scene = mock.Mock(spec=BaseScene)
     mock_scene_class = mock.Mock(spec=BaseScene, return_value=mock_scene)
     engine = GameEngine(mock_scene_class)
     engine.start()
     self.assertIs(engine.current_scene, mock_scene)