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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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)