Mercurial > nagslang
annotate nagslang/tests/test_level.py @ 416:bea0ea5b98df
Well, gravity.
author | davidsharpe@lantea.local |
---|---|
date | Sat, 07 Sep 2013 12:52:16 +0200 |
parents | ad1d3de210cd |
children | f3e79d6225b5 |
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 |
209
ad1d3de210cd
Drop compatibility imports, and allow an optional module on classnames
Stefano Rivera <stefano@rivera.za.net>
parents:
202
diff
changeset
|
6 from nagslang import puzzle |
145
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
7 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
|
8 from nagslang.yamlish import load |
145
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 |
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
11 class FakeSpace(object): |
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
12 def add(self, *objs): |
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
13 pass |
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 |
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
16 class TestLevel(TestCase): |
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
17 def make_level(self, name, data): |
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
18 level = Level(name) |
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
19 level._get_data = lambda: data |
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
20 return level |
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
21 |
164
06c681ff53aa
Round-tripping through load/save shouldn't discard objects
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
22 def roundtrip_level(self, level): |
06c681ff53aa
Round-tripping through load/save shouldn't discard objects
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
23 newlevel = Level(level.name) |
06c681ff53aa
Round-tripping through load/save shouldn't discard objects
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
24 f = StringIO() |
06c681ff53aa
Round-tripping through load/save shouldn't discard objects
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
25 level._dump_data(f) |
06c681ff53aa
Round-tripping through load/save shouldn't discard objects
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
26 f.seek(0) |
06c681ff53aa
Round-tripping through load/save shouldn't discard objects
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
27 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
|
28 return newlevel |
06c681ff53aa
Round-tripping through load/save shouldn't discard objects
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
29 |
145
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
30 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
|
31 def do_test(level): |
06c681ff53aa
Round-tripping through load/save shouldn't discard objects
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
32 level.load(FakeSpace()) |
06c681ff53aa
Round-tripping through load/save shouldn't discard objects
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
33 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
|
34 self.assertEqual([], level.get_walls()) |
202
63d7ab8ede83
Level doesn't gave a get_drawables() getter any more, that was rubbish
Stefano Rivera <stefano@rivera.za.net>
parents:
186
diff
changeset
|
35 self.assertEqual([], level.drawables) |
164
06c681ff53aa
Round-tripping through load/save shouldn't discard objects
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
36 |
145
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
37 level = self.make_level('foo', { |
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
38 'size': [5, 10], |
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
39 'base_tile': 'tiles/floor.png', |
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
40 'polygons': {}, |
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
41 }) |
164
06c681ff53aa
Round-tripping through load/save shouldn't discard objects
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
42 |
06c681ff53aa
Round-tripping through load/save shouldn't discard objects
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
43 do_test(level) |
06c681ff53aa
Round-tripping through load/save shouldn't discard objects
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
44 level2 = self.roundtrip_level(level) |
06c681ff53aa
Round-tripping through load/save shouldn't discard objects
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
45 do_test(level2) |
145
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
46 |
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
47 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
|
48 def do_test(level): |
06c681ff53aa
Round-tripping through load/save shouldn't discard objects
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
49 level.load(FakeSpace()) |
06c681ff53aa
Round-tripping through load/save shouldn't discard objects
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
50 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
|
51 self.assertEqual([[(1, 1), (2, 1), (1, 2)]], level.get_walls()) |
202
63d7ab8ede83
Level doesn't gave a get_drawables() getter any more, that was rubbish
Stefano Rivera <stefano@rivera.za.net>
parents:
186
diff
changeset
|
52 self.assertEqual([], level.drawables) |
164
06c681ff53aa
Round-tripping through load/save shouldn't discard objects
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
53 |
145
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
54 level = self.make_level('foo', { |
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
55 'size': [5, 10], |
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
56 'base_tile': 'tiles/floor.png', |
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
57 'polygons': { |
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
58 1: [[1, 1], [2, 1], [1, 2]], |
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
59 }, |
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
60 }) |
164
06c681ff53aa
Round-tripping through load/save shouldn't discard objects
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
61 do_test(level) |
06c681ff53aa
Round-tripping through load/save shouldn't discard objects
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
62 level2 = self.roundtrip_level(level) |
06c681ff53aa
Round-tripping through load/save shouldn't discard objects
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
63 do_test(level2) |
145
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
64 |
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
65 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
|
66 def do_test(level): |
06c681ff53aa
Round-tripping through load/save shouldn't discard objects
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
67 level.load(FakeSpace()) |
06c681ff53aa
Round-tripping through load/save shouldn't discard objects
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
68 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
|
69 self.assertEqual([], level.get_walls()) |
202
63d7ab8ede83
Level doesn't gave a get_drawables() getter any more, that was rubbish
Stefano Rivera <stefano@rivera.za.net>
parents:
186
diff
changeset
|
70 [box, switch] = level.drawables |
164
06c681ff53aa
Round-tripping through load/save shouldn't discard objects
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
71 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
|
72 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
|
73 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
|
74 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
|
75 |
06c681ff53aa
Round-tripping through load/save shouldn't discard objects
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
76 puzzle_bits = level._glue._components |
06c681ff53aa
Round-tripping through load/save shouldn't discard objects
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
77 self.assertEqual(['foo', 'foo_proxy'], |
06c681ff53aa
Round-tripping through load/save shouldn't discard objects
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
78 sorted(puzzle_bits.keys())) |
06c681ff53aa
Round-tripping through load/save shouldn't discard objects
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
79 self.assertTrue( |
209
ad1d3de210cd
Drop compatibility imports, and allow an optional module on classnames
Stefano Rivera <stefano@rivera.za.net>
parents:
202
diff
changeset
|
80 isinstance(puzzle_bits['foo_proxy'], puzzle.StateProxyPuzzler)) |
164
06c681ff53aa
Round-tripping through load/save shouldn't discard objects
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
81 self.assertEqual('foo', puzzle_bits['foo_proxy']._state_source) |
209
ad1d3de210cd
Drop compatibility imports, and allow an optional module on classnames
Stefano Rivera <stefano@rivera.za.net>
parents:
202
diff
changeset
|
82 self.assertTrue(isinstance(puzzle_bits['foo'], |
ad1d3de210cd
Drop compatibility imports, and allow an optional module on classnames
Stefano Rivera <stefano@rivera.za.net>
parents:
202
diff
changeset
|
83 puzzle.CollidePuzzler)) |
164
06c681ff53aa
Round-tripping through load/save shouldn't discard objects
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
84 |
145
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
85 level = self.make_level('foo', { |
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
86 'size': [5, 10], |
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
87 'base_tile': 'tiles/floor.png', |
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
88 'polygons': {}, |
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
89 'game_objects': [ |
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
90 { |
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
91 'classname': 'Box', |
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
92 'args': [[3, 3]], |
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 { |
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
95 'name': 'foo', |
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
96 'classname': 'FloorSwitch', |
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
97 'args': [[4, 4]], |
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 { |
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
100 'name': 'foo_proxy', |
209
ad1d3de210cd
Drop compatibility imports, and allow an optional module on classnames
Stefano Rivera <stefano@rivera.za.net>
parents:
202
diff
changeset
|
101 'classname': 'puzzle.StateProxyPuzzler', |
145
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
102 'args': ['foo'], |
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 }) |
0c49627920eb
Load game objects from level.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
106 |
164
06c681ff53aa
Round-tripping through load/save shouldn't discard objects
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
107 do_test(level) |
06c681ff53aa
Round-tripping through load/save shouldn't discard objects
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
108 level2 = self.roundtrip_level(level) |
06c681ff53aa
Round-tripping through load/save shouldn't discard objects
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
109 do_test(level2) |