Mercurial > boomslang
comparison pyntnclick/tests/game_logic_utils.py @ 854:79b5c1be9a5e default tip
Remove pyntnclick, it's its own library, now
author | Stefano Rivera <stefano@rivera.za.net> |
---|---|
date | Sat, 21 Jun 2014 22:06:09 +0200 |
parents | f95830b58336 |
children |
comparison
equal
deleted
inserted
replaced
852:f95830b58336 | 854:79b5c1be9a5e |
---|---|
1 import unittest | |
2 | |
3 import pygame.display | |
4 import pygame.event | |
5 | |
6 import pyntnclick.resources | |
7 import pyntnclick.state | |
8 | |
9 | |
10 class GameLogicTestCase(unittest.TestCase): | |
11 CURRENT_SCENE = None | |
12 GAME_DESCRIPTION_CLASS = None | |
13 | |
14 def setUp(self): | |
15 # Events require us to initialize the display | |
16 pygame.display.init() | |
17 # Disable alpha conversion which requires a screen | |
18 pyntnclick.resources.Resources.CONVERT_ALPHA = False | |
19 | |
20 self.game_description = self.GAME_DESCRIPTION_CLASS() | |
21 self.state = self.game_description.initial_state() | |
22 self.scene_stack = [] | |
23 | |
24 # We aren't handling events, monkey patch change_scene and show_detail | |
25 def change_scene(name): | |
26 self.state.data.set_current_scene(name) | |
27 self.scene_stack = [self.state.get_current_scene()] | |
28 self.state.change_scene = change_scene | |
29 | |
30 def show_detail(name): | |
31 self.scene_stack.append(self.state.detail_views[name]) | |
32 self.state.show_detail = show_detail | |
33 | |
34 self.state.change_scene(self.CURRENT_SCENE) | |
35 | |
36 def close_detail(self): | |
37 self.scene_stack.pop() | |
38 self.assertTrue(len(self.scene_stack) > 0) | |
39 | |
40 def clear_event_queue(self): | |
41 # Since we aren't handling events, we may overflow the pygame | |
42 # event buffer if we're generating a lot of events | |
43 pygame.event.clear() | |
44 | |
45 def clear_inventory(self): | |
46 # Remove all items from the inventory, ensuring tool is set to None | |
47 self.state.set_tool(None) | |
48 self.state.inventory()[:] = [] | |
49 | |
50 def set_game_data(self, key, value, thing=None): | |
51 gizmo = self.state.get_current_scene() | |
52 if thing is not None: | |
53 gizmo = gizmo.things[thing] | |
54 gizmo.set_data(key, value) | |
55 | |
56 def assert_game_data(self, key, value, thing=None, scene=None, | |
57 detail=None): | |
58 gizmo = self.state.get_current_scene() | |
59 if scene is not None: | |
60 gizmo = self.state.scenes[scene] | |
61 if detail is not None: | |
62 gizmo = self.state.detail_views[detail] | |
63 if thing is not None: | |
64 gizmo = gizmo.things[thing] | |
65 self.assertEquals(value, gizmo.get_data(key)) | |
66 | |
67 def assert_inventory_item(self, item, in_inventory=True): | |
68 self.assertEquals(in_inventory, self.state.is_in_inventory(item)) | |
69 | |
70 def assert_scene_thing(self, thing, in_scene=True): | |
71 self.assertEquals( | |
72 in_scene, thing in self.state.get_current_scene().things) | |
73 | |
74 def assert_detail_thing(self, thing, in_detail=True): | |
75 self.assertEquals(in_detail, thing in self.scene_stack[-1].things) | |
76 | |
77 def assert_item_exists(self, item, exists=True): | |
78 try: | |
79 self.state.get_item(item) | |
80 self.assertTrue(exists) | |
81 except: | |
82 self.assertFalse(exists) | |
83 | |
84 def assert_current_scene(self, scene): | |
85 self.assertEquals(scene, self.state.get_current_scene().name) | |
86 | |
87 def handle_result(self, result): | |
88 self.clear_event_queue() | |
89 if result is None: | |
90 return None | |
91 if hasattr(result, 'process'): | |
92 if result.detail_view: | |
93 self.state.show_detail(result.detail_view) | |
94 return result | |
95 return [self.handle_result(r) for r in result] | |
96 | |
97 def interact_thing(self, thing, item=None, detail=None): | |
98 item_obj = None | |
99 if item is not None: | |
100 self.assert_inventory_item(item) | |
101 item_obj = self.state.get_item(item) | |
102 thing_container = self.scene_stack[-1] | |
103 if detail is not None: | |
104 self.assertEqual(detail, thing_container.name) | |
105 result = thing_container.things[thing].interact(item_obj) | |
106 return self.handle_result(result) | |
107 | |
108 def interact_item(self, target_item, item): | |
109 self.assert_inventory_item(target_item) | |
110 item_obj = self.state.get_item(item) | |
111 target_obj = self.state.get_item(target_item) | |
112 result = target_obj.interact(item_obj) | |
113 return self.handle_result(result) |