Mercurial > pyntnclick
comparison gamelib/tests/test_walkthrough.py @ 854:3577c51029f1 default tip
Remove Suspended Sentence. pyntnclick is the library we extracted from it
author | Stefano Rivera <stefano@rivera.za.net> |
---|---|
date | Sat, 21 Jun 2014 22:15:54 +0200 |
parents | f95830b58336 |
children |
comparison
equal
deleted
inserted
replaced
853:f95830b58336 | 854:3577c51029f1 |
---|---|
1 from pyntnclick.tests.game_logic_utils import GameLogicTestCase | |
2 | |
3 import gamelib.main | |
4 | |
5 | |
6 class TestWalkthrough(GameLogicTestCase): | |
7 | |
8 GAME_DESCRIPTION_CLASS = gamelib.main.SuspendedSentence | |
9 CURRENT_SCENE = 'cryo' | |
10 | |
11 def move_to(self, target): | |
12 self.interact_thing(self.state.get_current_scene().name + '.door') | |
13 self.assert_current_scene('map') | |
14 self.interact_thing('map.to' + target) | |
15 self.assert_current_scene(target) | |
16 | |
17 def test_walkthrough(self): | |
18 """A complete game walkthrough. | |
19 | |
20 This should only contain interacts and assertions.""" | |
21 | |
22 # TODO: Add flavour interactions, maybe? | |
23 | |
24 # Partially open the door. | |
25 self.assert_game_data('door', 'shut', 'cryo.door') | |
26 self.interact_thing('cryo.door') | |
27 self.assert_game_data('door', 'ajar', 'cryo.door') | |
28 | |
29 # Get the titanium leg. | |
30 self.interact_thing('cryo.unit.1') | |
31 self.assert_detail_thing('cryo.titanium_leg') | |
32 self.interact_thing('cryo.titanium_leg', detail='cryo_detail') | |
33 self.assert_detail_thing('cryo.titanium_leg', False) | |
34 self.assert_inventory_item('titanium_leg:') | |
35 self.close_detail() | |
36 | |
37 # Open the door the rest of the way. | |
38 self.interact_thing('cryo.door', 'titanium_leg:') | |
39 self.assert_game_data('door', 'open', 'cryo.door') | |
40 self.assert_inventory_item('titanium_leg:') | |
41 | |
42 # Go to the mess. | |
43 self.move_to('mess') | |
44 | |
45 # Check that life support is broken | |
46 self.assert_game_data('life support status', 'broken') | |
47 | |
48 # Get the cans. | |
49 self.assert_game_data('cans_available', 3, 'mess.cans') | |
50 self.interact_thing('mess.cans') | |
51 self.assert_inventory_item('full_can:0') | |
52 self.assert_game_data('cans_available', 2, 'mess.cans') | |
53 self.interact_thing('mess.cans') | |
54 self.assert_inventory_item('full_can:1') | |
55 self.assert_game_data('cans_available', 1, 'mess.cans') | |
56 self.interact_thing('mess.cans') | |
57 self.assert_inventory_item('full_can:2') | |
58 self.assert_scene_thing('mess.cans', False) | |
59 | |
60 # Bash one of the cans. | |
61 self.assert_item_exists('dented_can:0', False) | |
62 self.interact_item('full_can:1', 'titanium_leg:') | |
63 self.assert_inventory_item('dented_can:0') | |
64 self.assert_inventory_item('full_can:1', False) | |
65 | |
66 # Go to the machine room. | |
67 self.move_to('machine') | |
68 | |
69 # Sharpen leg into machete. | |
70 self.interact_thing('machine.grinder', 'titanium_leg:') | |
71 self.assert_inventory_item('titanium_leg', False) | |
72 self.assert_inventory_item('machete:') | |
73 | |
74 # Go to the cryo room. | |
75 self.move_to('cryo') | |
76 | |
77 # Chop up some pipes. | |
78 self.assert_game_data('fixed', True, 'cryo.pipe.left') | |
79 self.interact_thing('cryo.pipe.left', 'machete:') | |
80 self.assert_game_data('fixed', False, 'cryo.pipe.left') | |
81 self.assert_inventory_item('tube_fragment:0') | |
82 | |
83 self.assert_game_data('fixed', True, 'cryo.pipe.right.top') | |
84 self.interact_thing('cryo.pipe.right.top', 'machete:') | |
85 self.assert_game_data('fixed', False, 'cryo.pipe.right.top') | |
86 self.assert_inventory_item('tube_fragment:1') | |
87 | |
88 self.assert_game_data('fixed', True, 'cryo.pipe.right.bottom') | |
89 self.interact_thing('cryo.pipe.right.bottom', 'machete:') | |
90 self.assert_game_data('fixed', False, 'cryo.pipe.right.bottom') | |
91 self.assert_inventory_item('tube_fragment:2') | |
92 | |
93 # Go to the mess. | |
94 self.move_to('mess') | |
95 | |
96 # Clear the broccoli. | |
97 self.assert_game_data('status', 'blocked', 'mess.tubes') | |
98 self.interact_thing('mess.tubes', 'machete:') | |
99 self.assert_game_data('status', 'broken', 'mess.tubes') | |
100 | |
101 # Go to the bridge. | |
102 self.move_to('bridge') | |
103 | |
104 # Check that the AI is online. | |
105 self.assert_game_data('ai status', 'online') | |
106 | |
107 # Get the stethoscope. | |
108 self.interact_thing('bridge.stethoscope') | |
109 self.assert_inventory_item('stethoscope:') | |
110 self.assert_scene_thing('bridge.stethoscope', False) | |
111 | |
112 # Get the superconductor. | |
113 self.interact_thing('bridge.massagechair_base') | |
114 self.interact_thing('bridge.superconductor', detail='chair_detail') | |
115 self.assert_inventory_item('superconductor:') | |
116 self.assert_detail_thing('bridge.superconductor', False) | |
117 self.close_detail() | |
118 | |
119 # Go to the crew quarters. | |
120 self.move_to('crew_quarters') | |
121 | |
122 # Get the poster. | |
123 self.interact_thing('crew.poster') | |
124 self.assert_inventory_item('escher_poster:') | |
125 self.assert_scene_thing('crew.poster', False) | |
126 | |
127 # Get the fishbowl. | |
128 self.assert_game_data('has_bowl', True, 'crew.fishbowl') | |
129 self.interact_thing('crew.fishbowl') | |
130 self.assert_game_data('has_bowl', False, 'crew.fishbowl') | |
131 self.assert_inventory_item('fishbowl:') | |
132 | |
133 # Crack the safe. | |
134 self.assert_game_data('is_cracked', False, 'crew.safe') | |
135 self.interact_thing('crew.safe', 'stethoscope:') | |
136 self.assert_game_data('is_cracked', True, 'crew.safe') | |
137 | |
138 # Get the duct tape. | |
139 self.assert_game_data('has_tape', True, 'crew.safe') | |
140 self.interact_thing('crew.safe') | |
141 self.assert_game_data('has_tape', False, 'crew.safe') | |
142 self.assert_inventory_item('duct_tape:') | |
143 | |
144 # Make the helmet. | |
145 self.interact_item('fishbowl:', 'duct_tape:') | |
146 self.assert_inventory_item('helmet:') | |
147 self.assert_inventory_item('fishbowl', False) | |
148 | |
149 # Go to the engine room. | |
150 self.move_to('engine') | |
151 | |
152 # Check that the engines are broken. | |
153 self.assert_game_data('engine online', False) | |
154 | |
155 # Get the can opener. | |
156 self.interact_thing('engine.canopener') | |
157 self.assert_inventory_item('canopener:') | |
158 self.assert_scene_thing('engine.canopener', False) | |
159 | |
160 # Open the cans. | |
161 self.interact_item('full_can:2', 'canopener:') | |
162 self.assert_inventory_item('full_can:2', False) | |
163 self.assert_inventory_item('empty_can:0') | |
164 | |
165 self.interact_item('full_can:0', 'canopener:') | |
166 self.assert_inventory_item('full_can:0', False) | |
167 self.assert_inventory_item('empty_can:1') | |
168 | |
169 self.interact_item('dented_can:0', 'canopener:') | |
170 self.assert_inventory_item('dented_can:0', False) | |
171 self.assert_inventory_item('empty_can:2') | |
172 | |
173 # Go to the machine room. | |
174 self.move_to('machine') | |
175 | |
176 # Weld pipes and cans. | |
177 self.assert_game_data('contents', [], 'machine.welder.slot') | |
178 self.interact_thing('machine.welder.slot', 'tube_fragment:0') | |
179 self.assert_inventory_item('tube_fragment:0', False) | |
180 self.assert_game_data('contents', ['tube'], 'machine.welder.slot') | |
181 self.interact_thing('machine.welder.slot', 'empty_can:1') | |
182 self.assert_inventory_item('empty_can:1', False) | |
183 self.assert_game_data( | |
184 'contents', ['tube', 'can'], 'machine.welder.slot') | |
185 self.interact_thing('machine.welder.button') | |
186 self.assert_game_data('contents', [], 'machine.welder.slot') | |
187 self.assert_inventory_item('cryo_pipes_one:') | |
188 | |
189 self.assert_game_data('contents', [], 'machine.welder.slot') | |
190 self.interact_thing('machine.welder.slot', 'tube_fragment:2') | |
191 self.assert_inventory_item('tube_fragment:2', False) | |
192 self.assert_game_data('contents', ['tube'], 'machine.welder.slot') | |
193 self.interact_thing('machine.welder.slot', 'empty_can:2') | |
194 self.assert_inventory_item('empty_can:2', False) | |
195 self.assert_game_data( | |
196 'contents', ['tube', 'can'], 'machine.welder.slot') | |
197 self.interact_thing('machine.welder.button') | |
198 self.assert_game_data('contents', [], 'machine.welder.slot') | |
199 self.assert_inventory_item('cryo_pipes_one', False) | |
200 self.assert_inventory_item('cryo_pipes_two:') | |
201 | |
202 self.assert_game_data('contents', [], 'machine.welder.slot') | |
203 self.interact_thing('machine.welder.slot', 'tube_fragment:1') | |
204 self.assert_inventory_item('tube_fragment:1', False) | |
205 self.assert_game_data('contents', ['tube'], 'machine.welder.slot') | |
206 self.interact_thing('machine.welder.slot', 'empty_can:0') | |
207 self.assert_inventory_item('empty_can:0', False) | |
208 self.assert_game_data( | |
209 'contents', ['tube', 'can'], 'machine.welder.slot') | |
210 self.interact_thing('machine.welder.button') | |
211 self.assert_game_data('contents', [], 'machine.welder.slot') | |
212 self.assert_inventory_item('cryo_pipes_two', False) | |
213 self.assert_inventory_item('cryo_pipes_three:') | |
214 | |
215 # Go to the mess. | |
216 self.move_to('mess') | |
217 | |
218 # Replace the tubes. | |
219 self.interact_thing('mess.tubes', 'cryo_pipes_three:') | |
220 self.assert_inventory_item('cryo_pipes_three', False) | |
221 self.assert_game_data('status', 'replaced', 'mess.tubes') | |
222 | |
223 # Check that life support is replaced | |
224 self.assert_game_data('life support status', 'replaced') | |
225 | |
226 # Tape up the tubes. | |
227 self.interact_thing('mess.tubes', 'duct_tape:') | |
228 self.assert_game_data('status', 'fixed', 'mess.tubes') | |
229 | |
230 # Check that life support is fixed | |
231 self.assert_game_data('life support status', 'fixed') | |
232 | |
233 # Get the detergent bottle. | |
234 self.interact_thing('mess.detergent') | |
235 self.assert_inventory_item('detergent_bottle:') | |
236 | |
237 # Go to the cryo room. | |
238 self.move_to('cryo') | |
239 | |
240 # Fill the detergent bottle. | |
241 self.interact_thing('cryo.pool', 'detergent_bottle:') | |
242 self.assert_inventory_item('detergent_bottle', False) | |
243 self.assert_inventory_item('full_detergent_bottle:') | |
244 | |
245 # Go to the engine room. | |
246 self.move_to('engine') | |
247 | |
248 # Patch the cracked pipe. | |
249 self.assert_game_data('fixed', False, 'engine.cracked_pipe') | |
250 self.interact_thing('engine.cracked_pipe', 'duct_tape:') | |
251 self.assert_game_data('fixed', True, 'engine.cracked_pipe') | |
252 | |
253 # Fill the cryofluid receptacles. | |
254 self.assert_game_data('filled', False, 'engine.cryo_containers') | |
255 self.interact_thing( | |
256 'engine.cryo_container_receptacle', 'full_detergent_bottle:') | |
257 self.assert_game_data('filled', True, 'engine.cryo_containers') | |
258 self.assert_inventory_item('full_detergent_bottle', False) | |
259 | |
260 # Remove the burned-out superconductor. | |
261 self.assert_game_data('present', True, 'engine.superconductor') | |
262 self.assert_game_data('working', False, 'engine.superconductor') | |
263 self.interact_thing('engine.superconductor', 'machete:') | |
264 self.assert_game_data('present', False, 'engine.superconductor') | |
265 self.assert_game_data('working', False, 'engine.superconductor') | |
266 | |
267 # Tape up new superconductor. | |
268 self.interact_item('superconductor:', 'duct_tape:') | |
269 self.assert_inventory_item('superconductor', False) | |
270 self.assert_inventory_item('taped_superconductor:') | |
271 | |
272 # Install superconductor. | |
273 self.interact_thing('engine.superconductor', 'taped_superconductor:') | |
274 self.assert_inventory_item('taped_superconductor', False) | |
275 self.assert_game_data('present', True, 'engine.superconductor') | |
276 self.assert_game_data('working', True, 'engine.superconductor') | |
277 | |
278 # Check that we've fixed the engines. | |
279 self.assert_game_data('engine online', True) | |
280 | |
281 # Go to the bridge. | |
282 self.move_to('bridge') | |
283 | |
284 # Show JIM the poster. | |
285 self.interact_thing('bridge.camera', 'escher_poster:') | |
286 self.assert_game_data('ai status', 'looping') | |
287 | |
288 # Get at JIM. | |
289 self.assert_game_data('ai panel', 'closed') | |
290 self.interact_thing('jim_panel', 'machete:') | |
291 self.assert_game_data('ai panel', 'open') | |
292 | |
293 # Break JIM. | |
294 self.interact_thing('jim_panel', 'machete:') | |
295 self.assert_game_data('ai panel', 'broken') | |
296 | |
297 # Check that we've turned off JIM. | |
298 self.assert_game_data('ai status', 'dead') | |
299 | |
300 # Bring up nav console. | |
301 self.interact_thing('bridge.comp') | |
302 self.interact_thing('bridge_comp.nav_tab', detail='bridge_comp_detail') | |
303 self.assert_game_data('tab', 'nav', detail='bridge_comp_detail') | |
304 | |
305 # Go somewhere interesting. | |
306 self.interact_thing('bridge_comp.nav_line2', | |
307 detail='bridge_comp_detail') |