fonttools/Tests/misc/macRes_test.py

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

95 lines
4.0 KiB
Python
Raw Normal View History

from io import BytesIO
import sys
import os
import tempfile
import unittest
from fontTools.misc.textTools import deHexStr
from fontTools.misc.macRes import ResourceReader
# test resource data in DeRez notation
"""
data 'TEST' (128, "name1") { $"4865 6C6C 6F" }; /* Hello */
data 'TEST' (129, "name2") { $"576F 726C 64" }; /* World */
data 'test' (130, "name3") { $"486F 7720 6172 6520 796F 753F" }; /* How are you? */
"""
# the same data, compiled using Rez
# $ /usr/bin/Rez testdata.rez -o compiled
# $ hexdump -v compiled/..namedfork/rsrc
TEST_RSRC_FORK = deHexStr(
"00 00 01 00 00 00 01 22 00 00 00 22 00 00 00 64 " # 0x00000000
"00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " # 0x00000010
"00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " # 0x00000020
"00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " # 0x00000030
"00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " # 0x00000040
"00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " # 0x00000050
"00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " # 0x00000060
"00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " # 0x00000070
"00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " # 0x00000080
"00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " # 0x00000090
"00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " # 0x000000A0
"00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " # 0x000000B0
"00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " # 0x000000C0
"00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " # 0x000000D0
"00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " # 0x000000E0
"00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " # 0x000000F0
"00 00 00 05 48 65 6c 6c 6f 00 00 00 05 57 6f 72 " # 0x00000100
"6c 64 00 00 00 0c 48 6f 77 20 61 72 65 20 79 6f " # 0x00000110
"75 3f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " # 0x00000120
"00 00 00 00 00 00 00 00 00 00 00 1c 00 52 00 01 " # 0x00000130
"54 45 53 54 00 01 00 12 74 65 73 74 00 00 00 2a " # 0x00000140
"00 80 00 00 00 00 00 00 00 00 00 00 00 81 00 06 " # 0x00000150
"00 00 00 09 00 00 00 00 00 82 00 0c 00 00 00 12 " # 0x00000160
"00 00 00 00 05 6e 61 6d 65 31 05 6e 61 6d 65 32 " # 0x00000170
"05 6e 61 6d 65 33 " # 0x00000180
)
class ResourceReaderTest(unittest.TestCase):
def test_read_file(self):
infile = BytesIO(TEST_RSRC_FORK)
reader = ResourceReader(infile)
resources = [res for typ in reader.keys() for res in reader[typ]]
self.assertExpected(resources)
def test_read_datafork(self):
with tempfile.NamedTemporaryFile(delete=False) as tmp:
tmp.write(TEST_RSRC_FORK)
2022-12-13 11:26:36 +00:00
try:
reader = ResourceReader(tmp.name)
resources = [res for typ in reader.keys() for res in reader[typ]]
reader.close()
self.assertExpected(resources)
2022-12-13 11:26:36 +00:00
finally:
os.remove(tmp.name)
def test_read_namedfork_rsrc(self):
if sys.platform != "darwin":
self.skipTest('Not supported on "%s"' % sys.platform)
tmp = tempfile.NamedTemporaryFile(delete=False)
tmp.close()
2022-12-13 11:26:36 +00:00
try:
with open(tmp.name + "/..namedfork/rsrc", "wb") as fork:
fork.write(TEST_RSRC_FORK)
reader = ResourceReader(tmp.name)
resources = [res for typ in reader.keys() for res in reader[typ]]
reader.close()
self.assertExpected(resources)
finally:
os.remove(tmp.name)
def assertExpected(self, resources):
self.assertRezEqual(resources[0], "TEST", b"Hello", 128, "name1")
self.assertRezEqual(resources[1], "TEST", b"World", 129, "name2")
self.assertRezEqual(resources[2], "test", b"How are you?", 130, "name3")
def assertRezEqual(self, res, type_, data, id, name):
self.assertEqual(res.type, type_)
self.assertEqual(res.data, data)
self.assertEqual(res.id, id)
self.assertEqual(res.name, name)
if __name__ == "__main__":
sys.exit(unittest.main())