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