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