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
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
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)