1
#!/usr/bin/env python -tt
11
from cStringIO import StringIO
12
from itertools import *
16
# General base class for tests that raise
20
class _WLSetup(unittest.TestCase):
23
self.m = WidelandsMap()
26
# {{{ Elemental package
27
class _WLElemental_Base(unittest.TestCase):
30
self.m = WidelandsMap()
31
self.m._read_elemental(StringIO(self.input))
37
class TestElementalReading_ValidInput_ExceptCorrectResult(_WLElemental_Base):
47
descr=_"The breath-taking beauty of these ..."
51
def testDimensions(self):
52
self.assertEqual(self.m.w, 160)
53
self.assertEqual(self.m.h, 132)
54
self.assertEqual(self.m.dim, (132, 160))
56
def testNrPlayers(self):
57
self.assertEqual(self.m.nr_players, 4)
59
def testWorldName(self):
60
self.assertEqual(self.m.world_name, 'greenland')
63
self.assertEqual(self.m.name, 'Elven Forests')
66
self.assertEqual(self.m.author, 'Winterwind')
69
self.assertEqual(self.m.descr, 'The breath-taking beauty of these ...')
76
class TestElementalReading_TestMissingSection_ExceptRaises(_WLSetup):
78
input = """[globalnoglbale]
84
self.assertRaises(InvalidMapPackage, self.m._read_elemental,
88
# {{{ Height package tests
91
class _WLHeight_Base(unittest.TestCase):
94
self.m = WidelandsMap()
95
self.m._dim = self.dim
96
self.m._read_heights(StringIO(self.input))
99
class _WLHeight_Setup(unittest.TestCase):
102
self.m = WidelandsMap()
103
self.m._dim = self.dim
104
self.input = StringIO(self.input)
111
class TestHeightReading_ValidInput_ExceptCorrectResult(_WLHeight_Base):
113
dim = (4, 6) # w6, h4
114
input = '\x01\x00)!\x08*\x0b1\x18-0\x1d\x03\x08.\x1e\x01\x19\x1f\x1d\x17\x17\x1c\x07#5'
115
wanted = array([[41, 33, 8, 42, 11, 49],
116
[24, 45, 48, 29, 3, 8],
117
[46, 30, 1, 25, 31, 29],
118
[23, 23, 28, 7, 35, 53]])
122
self.assertTrue(all(self.wanted == self.m.heights))
129
class TestHeightReading_WrongVersion_ExceptRaises(_WLHeight_Setup):
131
input = '\x00\x02jdhf'
134
self.assertRaises(InvalidMapPackage, self.m._read_heights, self.input)
137
class TestHeightReading_PackageToShort_ExceptRaises(_WLHeight_Setup):
139
input = '\x01\x00jdhf'
142
self.assertRaises(InvalidMapPackage, self.m._read_heights, self.input)
145
class TestHeightReading_PackageToLong(_WLHeight_Setup):
147
input = '\x01\x00jdhkkf'
150
self.assertRaises(InvalidMapPackage, self.m._read_heights, self.input)
153
# {{{ Terrain package tests
156
class _WLTerrain_Base(unittest.TestCase):
159
self.m = WidelandsMap()
160
self.m._dim = self.dim
161
self.m._read_terrains(StringIO(self.input))
164
class _WLTerrain_Setup(unittest.TestCase):
167
self.m = WidelandsMap()
168
self.m._dim = self.dim
169
self.input = StringIO(self.input)
176
class TestTerrainReading_ValidInput_ExceptCorrectResult(_WLTerrain_Base):
178
dim = (1, 2) # w6, h4
179
input = ('\x01\x00' + # Package version
180
'\x02\x00' + # Nr of terrain types
181
'\x00\x00Baum\x00\x01\x00Haus\x00' + # Terrains (id,Name\x00)
182
'\x01\x00\x00\x01' # Terrain data (ter_r,ter_d)*nr_of_fields
184
ter_r_names = array([['Haus', 'Baum']])
185
ter_d_names = array([['Baum', 'Haus']])
189
r = [i.name == j for i, j in izip(
190
self.m.ter_r.flat, self.ter_r_names.flat)]
191
self.assertTrue(all(r))
194
d = [i.name == j for i, j in izip(
195
self.m.ter_d.flat, self.ter_d_names.flat)]
196
self.assertTrue(all(d))
203
class TestTerrainReading_WrongVersion_ExceptRaises(_WLTerrain_Setup):
205
input = '\x00\x02jdhf'
208
self.assertRaises(InvalidMapPackage, self.m._read_terrains, self.input)
211
class TestTerrainReading_PackageToShort_ExceptRaises(_WLTerrain_Setup):
213
input = '\x01\x00jdhf'
216
self.assertRaises(InvalidMapPackage, self.m._read_terrains, self.input)
219
class TestTerrainReading_PackageToLong(_WLTerrain_Setup):
220
dim = (1, 2) # w6, h4
221
input = ('\x01\x00' + # Package version
222
'\x02\x00' + # Nr of terrain types
223
'\x00\x00Baum\x00\x01\x00Haus\x00' + # Terrains (id,Name\x00)
224
# Terrain data (ter_r,ter_d)*nr_of_fields
225
'\x02\x03\x04\x00\x00\x01'
227
ter_r_names = array([['Haus', 'Baum']])
228
ter_d_names = array([['Baum', 'Haus']])
231
self.assertRaises(InvalidMapPackage, self.m._read_terrains, self.input)
234
class TestTerrainReading_WrongTerrainId(_WLTerrain_Setup):
235
dim = (1, 2) # w6, h4
236
input = ('\x01\x00' + # Package version
237
'\x02\x00' + # Nr of terrain types
238
'\x00\x00Baum\x00\x01\x00Haus\x00' + # Terrains (id,Name\x00)
239
'\x00\x00\x02\x00' # Terrain data (ter_r,ter_d)*nr_of_fields
243
self.assertRaises(InvalidMapPackage, self.m._read_terrains, self.input)