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)), 30 [0xDEAD, 0xBEEF, 0xCAFE]) 31 self.assertEqual(reader.pos, 6) 32 33 def test_readUInt24(self): 34 reader = OTTableReader(deHexStr("C3 13 37")) 35 self.assertEqual(reader.readUInt24(), 0xC31337) 36 self.assertEqual(reader.pos, 3) 37 38 def test_readULong(self): 39 reader = OTTableReader(deHexStr("CA FE BE EF")) 40 self.assertEqual(reader.readULong(), 0xCAFEBEEF) 41 self.assertEqual(reader.pos, 4) 42 43 def test_readTag(self): 44 reader = OTTableReader(deHexStr("46 6F 6F 64")) 45 self.assertEqual(reader.readTag(), "Food") 46 self.assertEqual(reader.pos, 4) 47 48 def test_readData(self): 49 reader = OTTableReader(deHexStr("48 65 6C 6C 6F")) 50 self.assertEqual(reader.readData(5), b"Hello") 51 self.assertEqual(reader.pos, 5) 52 53 def test_getSubReader(self): 54 reader = OTTableReader(deHexStr("CAFE F00D")) 55 sub = reader.getSubReader(2) 56 self.assertEqual(sub.readUShort(), 0xF00D) 57 self.assertEqual(reader.readUShort(), 0xCAFE) 58 59 60class OTTableWriterTest(unittest.TestCase): 61 def test_writeShort(self): 62 writer = OTTableWriter() 63 writer.writeShort(-12345) 64 self.assertEqual(writer.getData(), deHexStr("CF C7")) 65 66 def test_writeLong(self): 67 writer = OTTableWriter() 68 writer.writeLong(-12345678) 69 self.assertEqual(writer.getData(), deHexStr("FF 43 9E B2")) 70 71 def test_writeUInt8(self): 72 writer = OTTableWriter() 73 writer.writeUInt8(0xBE) 74 self.assertEqual(writer.getData(), deHexStr("BE")) 75 76 def test_writeUShort(self): 77 writer = OTTableWriter() 78 writer.writeUShort(0xBEEF) 79 self.assertEqual(writer.getData(), deHexStr("BE EF")) 80 81 def test_writeUInt24(self): 82 writer = OTTableWriter() 83 writer.writeUInt24(0xBEEF77) 84 self.assertEqual(writer.getData(), deHexStr("BE EF 77")) 85 86 def test_writeULong(self): 87 writer = OTTableWriter() 88 writer.writeULong(0xBEEFCAFE) 89 self.assertEqual(writer.getData(), deHexStr("BE EF CA FE")) 90 91 92if __name__ == "__main__": 93 import sys 94 sys.exit(unittest.main()) 95