xref: /aosp_15_r20/external/fonttools/Tests/ttLib/tables/otBase_test.py (revision e1fe3e4ad2793916b15cccdc4a7da52a7e1dd0e9)
1from fontTools.misc.textTools import deHexStr
2from fontTools.ttLib.tables.otBase import OTTableReader, OTTableWriter
3import unittest
4
5
6class OTTableReaderTest(unittest.TestCase):
7    def test_readShort(self):
8        reader = OTTableReader(deHexStr("CA FE"))
9        self.assertEqual(reader.readShort(), -13570)
10        self.assertEqual(reader.pos, 2)
11
12    def test_readLong(self):
13        reader = OTTableReader(deHexStr("CA FE BE EF"))
14        self.assertEqual(reader.readLong(), -889274641)
15        self.assertEqual(reader.pos, 4)
16
17    def test_readUInt8(self):
18        reader = OTTableReader(deHexStr("C3"))
19        self.assertEqual(reader.readUInt8(), 0xC3)
20        self.assertEqual(reader.pos, 1)
21
22    def test_readUShort(self):
23        reader = OTTableReader(deHexStr("CA FE"))
24        self.assertEqual(reader.readUShort(), 0xCAFE)
25        self.assertEqual(reader.pos, 2)
26
27    def test_readUShortArray(self):
28        reader = OTTableReader(deHexStr("DE AD BE EF CA FE"))
29        self.assertEqual(list(reader.readUShortArray(3)), [0xDEAD, 0xBEEF, 0xCAFE])
30        self.assertEqual(reader.pos, 6)
31
32    def test_readUInt24(self):
33        reader = OTTableReader(deHexStr("C3 13 37"))
34        self.assertEqual(reader.readUInt24(), 0xC31337)
35        self.assertEqual(reader.pos, 3)
36
37    def test_readULong(self):
38        reader = OTTableReader(deHexStr("CA FE BE EF"))
39        self.assertEqual(reader.readULong(), 0xCAFEBEEF)
40        self.assertEqual(reader.pos, 4)
41
42    def test_readTag(self):
43        reader = OTTableReader(deHexStr("46 6F 6F 64"))
44        self.assertEqual(reader.readTag(), "Food")
45        self.assertEqual(reader.pos, 4)
46
47    def test_readData(self):
48        reader = OTTableReader(deHexStr("48 65 6C 6C 6F"))
49        self.assertEqual(reader.readData(5), b"Hello")
50        self.assertEqual(reader.pos, 5)
51
52    def test_getSubReader(self):
53        reader = OTTableReader(deHexStr("CAFE F00D"))
54        sub = reader.getSubReader(2)
55        self.assertEqual(sub.readUShort(), 0xF00D)
56        self.assertEqual(reader.readUShort(), 0xCAFE)
57
58
59class OTTableWriterTest(unittest.TestCase):
60    def test_writeShort(self):
61        writer = OTTableWriter()
62        writer.writeShort(-12345)
63        self.assertEqual(writer.getData(), deHexStr("CF C7"))
64
65    def test_writeLong(self):
66        writer = OTTableWriter()
67        writer.writeLong(-12345678)
68        self.assertEqual(writer.getData(), deHexStr("FF 43 9E B2"))
69
70    def test_writeUInt8(self):
71        writer = OTTableWriter()
72        writer.writeUInt8(0xBE)
73        self.assertEqual(writer.getData(), deHexStr("BE"))
74
75    def test_writeUShort(self):
76        writer = OTTableWriter()
77        writer.writeUShort(0xBEEF)
78        self.assertEqual(writer.getData(), deHexStr("BE EF"))
79
80    def test_writeUInt24(self):
81        writer = OTTableWriter()
82        writer.writeUInt24(0xBEEF77)
83        self.assertEqual(writer.getData(), deHexStr("BE EF 77"))
84
85    def test_writeULong(self):
86        writer = OTTableWriter()
87        writer.writeULong(0xBEEFCAFE)
88        self.assertEqual(writer.getData(), deHexStr("BE EF CA FE"))
89
90
91if __name__ == "__main__":
92    import sys
93
94    sys.exit(unittest.main())
95