aboutsummaryrefslogtreecommitdiff
path: root/Tests/ttLib/tables/otBase_test.py
blob: 27efcba984ce2e4ea958546a7ccf3d18ae29650e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
from fontTools.misc.textTools import deHexStr
from fontTools.ttLib.tables.otBase import OTTableReader, OTTableWriter
import unittest


class OTTableReaderTest(unittest.TestCase):
    def test_readShort(self):
        reader = OTTableReader(deHexStr("CA FE"))
        self.assertEqual(reader.readShort(), -13570)
        self.assertEqual(reader.pos, 2)

    def test_readLong(self):
        reader = OTTableReader(deHexStr("CA FE BE EF"))
        self.assertEqual(reader.readLong(), -889274641)
        self.assertEqual(reader.pos, 4)

    def test_readUInt8(self):
        reader = OTTableReader(deHexStr("C3"))
        self.assertEqual(reader.readUInt8(), 0xC3)
        self.assertEqual(reader.pos, 1)

    def test_readUShort(self):
        reader = OTTableReader(deHexStr("CA FE"))
        self.assertEqual(reader.readUShort(), 0xCAFE)
        self.assertEqual(reader.pos, 2)

    def test_readUShortArray(self):
        reader = OTTableReader(deHexStr("DE AD BE EF CA FE"))
        self.assertEqual(list(reader.readUShortArray(3)), [0xDEAD, 0xBEEF, 0xCAFE])
        self.assertEqual(reader.pos, 6)

    def test_readUInt24(self):
        reader = OTTableReader(deHexStr("C3 13 37"))
        self.assertEqual(reader.readUInt24(), 0xC31337)
        self.assertEqual(reader.pos, 3)

    def test_readULong(self):
        reader = OTTableReader(deHexStr("CA FE BE EF"))
        self.assertEqual(reader.readULong(), 0xCAFEBEEF)
        self.assertEqual(reader.pos, 4)

    def test_readTag(self):
        reader = OTTableReader(deHexStr("46 6F 6F 64"))
        self.assertEqual(reader.readTag(), "Food")
        self.assertEqual(reader.pos, 4)

    def test_readData(self):
        reader = OTTableReader(deHexStr("48 65 6C 6C 6F"))
        self.assertEqual(reader.readData(5), b"Hello")
        self.assertEqual(reader.pos, 5)

    def test_getSubReader(self):
        reader = OTTableReader(deHexStr("CAFE F00D"))
        sub = reader.getSubReader(2)
        self.assertEqual(sub.readUShort(), 0xF00D)
        self.assertEqual(reader.readUShort(), 0xCAFE)


class OTTableWriterTest(unittest.TestCase):
    def test_writeShort(self):
        writer = OTTableWriter()
        writer.writeShort(-12345)
        self.assertEqual(writer.getData(), deHexStr("CF C7"))

    def test_writeLong(self):
        writer = OTTableWriter()
        writer.writeLong(-12345678)
        self.assertEqual(writer.getData(), deHexStr("FF 43 9E B2"))

    def test_writeUInt8(self):
        writer = OTTableWriter()
        writer.writeUInt8(0xBE)
        self.assertEqual(writer.getData(), deHexStr("BE"))

    def test_writeUShort(self):
        writer = OTTableWriter()
        writer.writeUShort(0xBEEF)
        self.assertEqual(writer.getData(), deHexStr("BE EF"))

    def test_writeUInt24(self):
        writer = OTTableWriter()
        writer.writeUInt24(0xBEEF77)
        self.assertEqual(writer.getData(), deHexStr("BE EF 77"))

    def test_writeULong(self):
        writer = OTTableWriter()
        writer.writeULong(0xBEEFCAFE)
        self.assertEqual(writer.getData(), deHexStr("BE EF CA FE"))


if __name__ == "__main__":
    import sys

    sys.exit(unittest.main())