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