1 | from unittest import TestCase
|
---|
2 |
|
---|
3 | from StringIO import StringIO
|
---|
4 |
|
---|
5 | from nagslang import game_object as go
|
---|
6 | from nagslang.level import Level
|
---|
7 | from nagslang.yamlish import load
|
---|
8 |
|
---|
9 |
|
---|
10 | class FakeSpace(object):
|
---|
11 | def add(self, *objs):
|
---|
12 | pass
|
---|
13 |
|
---|
14 |
|
---|
15 | class TestLevel(TestCase):
|
---|
16 | def make_level(self, name, data):
|
---|
17 | level = Level(name)
|
---|
18 | level._get_data = lambda: data
|
---|
19 | return level
|
---|
20 |
|
---|
21 | def roundtrip_level(self, level):
|
---|
22 | newlevel = Level(level.name)
|
---|
23 | f = StringIO()
|
---|
24 | level._dump_data(f)
|
---|
25 | f.seek(0)
|
---|
26 | newlevel._get_data = lambda: load(f)
|
---|
27 | return newlevel
|
---|
28 |
|
---|
29 | def test_empty_level(self):
|
---|
30 | def do_test(level):
|
---|
31 | level.load(FakeSpace())
|
---|
32 | self.assertEqual((5, 10), level.get_size())
|
---|
33 | self.assertEqual([], level.get_walls())
|
---|
34 | self.assertEqual([], level.get_drawables())
|
---|
35 |
|
---|
36 | level = self.make_level('foo', {
|
---|
37 | 'size': [5, 10],
|
---|
38 | 'base_tile': 'tiles/floor.png',
|
---|
39 | 'polygons': {},
|
---|
40 | })
|
---|
41 |
|
---|
42 | do_test(level)
|
---|
43 | level2 = self.roundtrip_level(level)
|
---|
44 | do_test(level2)
|
---|
45 |
|
---|
46 | def test_level_walls(self):
|
---|
47 | def do_test(level):
|
---|
48 | level.load(FakeSpace())
|
---|
49 | self.assertEqual((5, 10), level.get_size())
|
---|
50 | self.assertEqual([[(1, 1), (2, 1), (1, 2)]], level.get_walls())
|
---|
51 | self.assertEqual([], level.get_drawables())
|
---|
52 |
|
---|
53 | level = self.make_level('foo', {
|
---|
54 | 'size': [5, 10],
|
---|
55 | 'base_tile': 'tiles/floor.png',
|
---|
56 | 'polygons': {
|
---|
57 | 1: [[1, 1], [2, 1], [1, 2]],
|
---|
58 | },
|
---|
59 | })
|
---|
60 | do_test(level)
|
---|
61 | level2 = self.roundtrip_level(level)
|
---|
62 | do_test(level2)
|
---|
63 |
|
---|
64 | def test_level_game_objects(self):
|
---|
65 | def do_test(level):
|
---|
66 | level.load(FakeSpace())
|
---|
67 | self.assertEqual((5, 10), level.get_size())
|
---|
68 | self.assertEqual([], level.get_walls())
|
---|
69 | [box, switch] = level.get_drawables()
|
---|
70 | self.assertTrue(isinstance(box, go.Box))
|
---|
71 | self.assertEqual(box.shape.body.position, (3, 3))
|
---|
72 | self.assertTrue(isinstance(switch, go.FloorSwitch))
|
---|
73 | self.assertEqual(switch.shape.body.position, (4, 4))
|
---|
74 |
|
---|
75 | puzzle_bits = level._glue._components
|
---|
76 | self.assertEqual(['foo', 'foo_proxy'],
|
---|
77 | sorted(puzzle_bits.keys()))
|
---|
78 | self.assertTrue(
|
---|
79 | isinstance(puzzle_bits['foo_proxy'], go.StateProxyPuzzler))
|
---|
80 | self.assertEqual('foo', puzzle_bits['foo_proxy']._state_source)
|
---|
81 | self.assertTrue(isinstance(puzzle_bits['foo'],
|
---|
82 | go.FloorSwitchPuzzler))
|
---|
83 |
|
---|
84 | level = self.make_level('foo', {
|
---|
85 | 'size': [5, 10],
|
---|
86 | 'base_tile': 'tiles/floor.png',
|
---|
87 | 'polygons': {},
|
---|
88 | 'game_objects': [
|
---|
89 | {
|
---|
90 | 'classname': 'Box',
|
---|
91 | 'args': [[3, 3]],
|
---|
92 | },
|
---|
93 | {
|
---|
94 | 'name': 'foo',
|
---|
95 | 'classname': 'FloorSwitch',
|
---|
96 | 'args': [[4, 4]],
|
---|
97 | },
|
---|
98 | {
|
---|
99 | 'name': 'foo_proxy',
|
---|
100 | 'classname': 'StateProxyPuzzler',
|
---|
101 | 'args': ['foo'],
|
---|
102 | },
|
---|
103 | ],
|
---|
104 | })
|
---|
105 |
|
---|
106 | do_test(level)
|
---|
107 | level2 = self.roundtrip_level(level)
|
---|
108 | do_test(level2)
|
---|