Mercurial > nagslang
view nagslang/tests/test_level.py @ 684:f3e79d6225b5
Add fake world for the level tests
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Wed, 11 Sep 2013 16:35:18 +0200 |
parents | ad1d3de210cd |
children |
line wrap: on
line source
from unittest import TestCase from StringIO import StringIO from nagslang import game_object as go from nagslang import puzzle from nagslang.level import Level from nagslang.yamlish import load class FakeSpace(object): def add(self, *objs): pass class FakeWorld(object): def __init__(self): self.level_state = {} class TestLevel(TestCase): def make_level(self, name, data): world = FakeWorld() level = Level(name, world) level._get_data = lambda: data return level def roundtrip_level(self, level): world = FakeWorld() newlevel = Level(level.name, world) f = StringIO() level._dump_data(f) f.seek(0) newlevel._get_data = lambda: load(f) return newlevel def test_empty_level(self): def do_test(level): level.load(FakeSpace()) self.assertEqual((5, 10), level.get_size()) self.assertEqual([], level.get_walls()) self.assertEqual([], level.drawables) self.assertEqual('test.ogg', level.music) level = self.make_level('foo', { 'size': [5, 10], 'base_tile': 'tiles/floor.png', 'polygons': {}, 'music': 'test.ogg' }) do_test(level) level2 = self.roundtrip_level(level) do_test(level2) def test_level_walls(self): def do_test(level): level.load(FakeSpace()) self.assertEqual((5, 10), level.get_size()) self.assertEqual([[(1, 1), (2, 1), (1, 2)]], level.get_walls()) self.assertEqual([], level.drawables) level = self.make_level('foo', { 'size': [5, 10], 'base_tile': 'tiles/floor.png', 'polygons': { 1: [[1, 1], [2, 1], [1, 2]], }, 'music': 'test.ogg' }) do_test(level) level2 = self.roundtrip_level(level) do_test(level2) def test_level_game_objects(self): def do_test(level): level.load(FakeSpace()) self.assertEqual((5, 10), level.get_size()) self.assertEqual([], level.get_walls()) [box, switch] = level.drawables self.assertTrue(isinstance(box, go.Box)) self.assertEqual(box.shape.body.position, (3, 3)) self.assertTrue(isinstance(switch, go.FloorSwitch)) self.assertEqual(switch.shape.body.position, (4, 4)) puzzle_bits = level._glue._components self.assertEqual(['foo', 'foo_proxy'], sorted(puzzle_bits.keys())) self.assertTrue( isinstance(puzzle_bits['foo_proxy'], puzzle.StateProxyPuzzler)) self.assertEqual('foo', puzzle_bits['foo_proxy']._state_source) self.assertTrue(isinstance(puzzle_bits['foo'], puzzle.CollidePuzzler)) level = self.make_level('foo', { 'size': [5, 10], 'music': 'test.ogg', 'base_tile': 'tiles/floor.png', 'polygons': {}, 'game_objects': [ { 'classname': 'Box', 'args': [[3, 3]], }, { 'name': 'foo', 'classname': 'FloorSwitch', 'args': [[4, 4]], }, { 'name': 'foo_proxy', 'classname': 'puzzle.StateProxyPuzzler', 'args': ['foo'], }, ], }) do_test(level) level2 = self.roundtrip_level(level) do_test(level2)