def test_signal_once(): engine = GameEngine(BaseScene, basic_systems=[Quitter]) with engine: engine.start() engine.loop_once() assert not engine.running
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
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()
def test_loading(): a = Asset('ppb/engine.py') engine = GameEngine(BaseScene, basic_systems=[AssetLoadingSystem]) with engine: engine.start() assert a.load()
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)
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
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)
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)
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()
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()
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
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()
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"
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"
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()
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"
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"
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
def test_engine_initial_scene(scene): engine = GameEngine(scene) assert len(engine.children._scenes) == 0 engine.start() assert len(engine.children._scenes) == 1
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)