blob: 11822a8a2a20e59e31aea2d456786a4c90250cb6 [file] [log] [blame]
Harald Welted0519e02022-02-11 18:05:48 +01001#!/usr/bin/env python3
2
3import unittest
Harald Welte81f4b402022-02-12 10:31:27 +01004from pySim.construct import *
Harald Welted0519e02022-02-11 18:05:48 +01005
6tests = [
7 ( b'\x80', 0x80 ),
8 ( b'\x80\x01', 0x8001 ),
9 ( b'\x80\x00\x01', 0x800001 ),
10 ( b'\x80\x23\x42\x01', 0x80234201 ),
11 ]
12
13class TestGreedyInt(unittest.TestCase):
14 def test_GreedyInt_decoder(self):
15 gi = GreedyInteger()
16 for t in tests:
17 self.assertEqual(gi.parse(t[0]), t[1])
18 def test_GreedyInt_encoder(self):
19 gi = GreedyInteger()
20 for t in tests:
21 self.assertEqual(t[0], gi.build(t[1]))
22 pass
23
Harald Welte81f4b402022-02-12 10:31:27 +010024class TestUtils(unittest.TestCase):
25 def test_filter_dict(self):
26 inp = {'foo': 0xf00, '_bar' : 0xba5, 'baz': 0xba2 }
27 out = {'foo': 0xf00, 'baz': 0xba2 }
28 self.assertEqual(filter_dict(inp), out)
29
30 def test_filter_dict_nested(self):
31 inp = {'foo': 0xf00, 'nest': {'_bar' : 0xba5}, 'baz': 0xba2 }
32 out = {'foo': 0xf00, 'nest': {}, 'baz': 0xba2 }
33 self.assertEqual(filter_dict(inp), out)
34
Harald Welted0519e02022-02-11 18:05:48 +010035
Harald Weltef6fceb82023-12-27 21:44:56 +010036class TestUcs2Adapter(unittest.TestCase):
37 # the three examples from TS 102 221 Annex A
38 EXAMPLE1 = b'\x80\x00\x30\x00\x31\x00\x32\x00\x33'
39 EXAMPLE2 = b'\x81\x05\x13\x53\x95\xa6\xa6\xff\xff'
40 EXAMPLE3 = b'\x82\x05\x05\x30\x2d\x82\xd3\x2d\x31'
41 ad = Ucs2Adapter(GreedyBytes)
42
43 def test_example1_decode(self):
44 dec = self.ad._decode(self.EXAMPLE1, None, None)
45 self.assertEqual(dec, "0123")
46
47 def test_example2_decode(self):
48 dec = self.ad._decode(self.EXAMPLE2, None, None)
49 self.assertEqual(dec, "S\u0995\u09a6\u09a6\u09ff")
50
51 def test_example3_decode(self):
52 dec = self.ad._decode(self.EXAMPLE3, None, None)
53 self.assertEqual(dec, "-\u0532\u0583-1")
54
55 testdata = [
56 # variant 2 with only GSM alphabet characters
57 ( "mahlzeit", '8108006d61686c7a656974' ),
58 # variant 2 with mixed GSM alphabet + UCS2
59 ( "mahlzeit\u099523", '810b136d61686c7a656974953233' ),
60 # variant 3 due to codepoint exceeding 8 bit
61 ( "mahl\u8023zeit", '820980236d61686c807a656974' ),
62 # variant 1 as there is no common codepoint pointer / prefix
63 ( "\u3000\u2000\u1000", '80300020001000' ),
64 ]
65
66 def test_data_decode(self):
67 for string, encoded_hex in self.testdata:
68 encoded = h2b(encoded_hex)
69 dec = self.ad._decode(encoded, None, None)
70 self.assertEqual(dec, string)
71
72 def test_data_encode(self):
73 for string, encoded_hex in self.testdata:
74 encoded = h2b(encoded_hex)
75 re_enc = self.ad._encode(string, None, None)
76 self.assertEqual(encoded, re_enc)
77
78
79
Harald Welted0519e02022-02-11 18:05:48 +010080if __name__ == "__main__":
81 unittest.main()