def test_string(self): self.assertEqual(d.unpack('=40s', self.buf), ls_odict(['Jonny Normal' + (28 * '\x00')])) self.assertEqual(self.buf.pos, 40) self.buf.pos = 0 self.assertEqual(d.unpack('=5s', self.buf), ls_odict(['Jonny']))
def test_comments(self): self.assertEqual(d.unpack('<5s #6s\n x\n# s\n 6s', self.buf), ls_odict(['Jonny', 'Normal'])) self.buf.pos = 0 self.assertEqual(d.unpack('<(5s\n x #ignore space\n 6s)[name]', self.buf), d.odict(name=ls_odict(['Jonny', 'Normal'])))
def test_dont_care(self): self.assertEqual(d.unpack('<5s x 6s', self.buf), ls_odict(['Jonny', 'Normal'])) self.buf.pos = 0 self.assertEqual(d.unpack('<3s[nickname] 3x c[initial] 5s', self.buf), d.odict([('nickname', 'Jon'), ('initial', 'N'), (2, 'ormal')]))
def test_naming(self): self.assertEqual(d.unpack('<40s[name]', self.buf), d.odict(name='Jonny Normal'+(28*'\x00'))) self.buf.pos = 0 expected = d.odict() expected.append('Jonny Normal' + (28 * '\x00')) expected['pid'] = 0x12e expected['points'] = ls_odict([0, 1, 5, 5, 16, 8, 24] + ([0] * 35)) expected.append(4) self.assertEqual(d.unpack('<40s I [pid] (42B)[points] I', self.buf), expected)
def test_endiannes(self): # make sure endianness distributes through the call stack self.buf.pos = 44 self.assertEqual(d.unpack('<H((HH)H)', self.buf), ls_odict([0x100, ls_odict([ls_odict([0x0505, 0x0810]), 0x18]) ])) self.buf.pos = 44 self.assertEqual(d.unpack('>H((HH)H)', self.buf), ls_odict([0x1, ls_odict([ls_odict([0x0505, 0x1008]), 0x1800]) ]))
def test_nested_string(self): self.assertEqual(d.unpack('=(((s)2s)2s)s(s(5s))', self.buf), ls_odict([ls_odict([ls_odict([ls_odict(['J']), 'on']), 'ny']), ' ', ls_odict(['N', ls_odict(['ormal']) ]) ])) # {{{{J}, on}, ny}, ' ', {N, {ormal}}} self.assertEqual(self.buf.pos, 12)
def test_numbers(self): self.buf.pos = 40 self.assertEqual(d.unpack('<I', self.buf), ls_odict([0x12e])) self.buf.pos = 40 self.assertEqual(d.unpack('>I', self.buf), ls_odict([0x2e010000]))
def test_whitespace(self): self.assertEqual(d.unpack('<\n\n12s [name]\n 28x\n\tI \n\t[pid]\n\n\n', self.buf), d.odict([('name', 'Jonny Normal'), ('pid', 0x12e)]))
def test_combo(self): name, p_id, points, rank = d.unpack('<40s I (42B) I', self.buf).values() self.assertEqual(name, 'Jonny Normal' + (28 * '\x00')) self.assertEqual(p_id, 0x12e) self.assertEqual(points, ls_odict([0, 1, 5, 5, 16, 8, 24] + ([0] * 35))) self.assertEqual(rank, 4)