def test_unslot_block(self): self._move_player(1400, 2600) self.play_area.use_item('block_E') item = cast(interactions.Item, interactions.obtain('slotted_block_E_in_L')) self.play_area.apply_effects(item.play_area_effects) self.assertNotIn('slotted_block_E_in_L', self.play_area._objects) self.assertIn('puzzle_slot_L', self.play_area._objects)
def test_key(self): item = interactions.obtain('key') assert item # for pytype self.assertSequenceEqual(item.item_effects, (interactions.Effect.add_item('key'), )) self.assertSequenceEqual(item.play_area_effects, (interactions.Effect.remove_object('key'), )) self.assertIn('key', item.reason)
def test_can_use(self): for name in itertools.chain(self.play_area._objects, self.play_area._hidden_objects): item = interactions.obtain(name) if not item: continue effects = list(item.item_effects) while effects: effect = effects.pop(0) if effect.type is not interactions.ItemEffectType.ADD: continue for use in interactions.use(effect.target): self.assertIsInstance(use, interactions.Use) effects.extend(use.item_effects)
def test_solve_block_puzzle_twice(self): # Solve the puzzle. self._move_player(1400, 2600) self.play_area.use_item('block_L') self._move_player(120, 0) self.play_area.use_item('block_O') self._move_player(200, 0) self.play_area.use_item('block_V') self._move_player(140, 0) self.play_area.use_item('block_E') # Take block E out and put it back in. item = cast(interactions.Item, interactions.obtain('slotted_block_E_in_E')) self.play_area.apply_effects(item.play_area_effects) self.play_area.use_item('block_E')
def test_can_obtain(self): for name in itertools.chain(self.play_area._objects, self.play_area._hidden_objects): self.assertIsInstance(interactions.obtain(name), (type(None), interactions.Item))
def test_noop(self): self.assertIsNone(interactions.obtain('wall_1'))