Harald Welte | d0519e0 | 2022-02-11 18:05:48 +0100 | [diff] [blame] | 1 | #!/usr/bin/env python3 |
| 2 | |
| 3 | import unittest |
Harald Welte | 81f4b40 | 2022-02-12 10:31:27 +0100 | [diff] [blame] | 4 | from pySim.construct import * |
Harald Welte | d0519e0 | 2022-02-11 18:05:48 +0100 | [diff] [blame] | 5 | |
| 6 | tests = [ |
| 7 | ( b'\x80', 0x80 ), |
| 8 | ( b'\x80\x01', 0x8001 ), |
| 9 | ( b'\x80\x00\x01', 0x800001 ), |
| 10 | ( b'\x80\x23\x42\x01', 0x80234201 ), |
| 11 | ] |
| 12 | |
| 13 | class 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 Welte | 81f4b40 | 2022-02-12 10:31:27 +0100 | [diff] [blame] | 24 | class 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 Welte | d0519e0 | 2022-02-11 18:05:48 +0100 | [diff] [blame] | 35 | |
Harald Welte | f6fceb8 | 2023-12-27 21:44:56 +0100 | [diff] [blame] | 36 | class 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 Welte | d0519e0 | 2022-02-11 18:05:48 +0100 | [diff] [blame] | 80 | if __name__ == "__main__": |
| 81 | unittest.main() |