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')