aboutsummaryrefslogtreecommitdiff
path: root/Tests/misc/macRes_test.py
diff options
context:
space:
mode:
authorHaibo Huang <hhb@google.com>2018-07-03 17:43:11 -0700
committerHaibo Huang <hhb@google.com>2018-07-04 06:00:25 +0000
commit8b3c57bdcbbbd9cb1dc98546b567a138207b7638 (patch)
treeaf539e10dc3b2b42edd3197b34f1c8b5ee9a82a0 /Tests/misc/macRes_test.py
parentcc9a86e36194f2ef4456e14d98b810e41e4fa52d (diff)
downloadfonttools-8b3c57bdcbbbd9cb1dc98546b567a138207b7638.tar.gz
1. Add METADATA. 2. Run tools/external_updater/updater.sh update fonttools Test: m checkbuild Change-Id: Iab9e8c5da04f4c06347a924b4cea04f743f274c3
Diffstat (limited to 'Tests/misc/macRes_test.py')
-rw-r--r--Tests/misc/macRes_test.py97
1 files changed, 97 insertions, 0 deletions
diff --git a/Tests/misc/macRes_test.py b/Tests/misc/macRes_test.py
new file mode 100644
index 00000000..fde13f87
--- /dev/null
+++ b/Tests/misc/macRes_test.py
@@ -0,0 +1,97 @@
+from __future__ import print_function, division, absolute_import
+from fontTools.misc.py23 import *
+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)
+ try:
+ 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 test_read_namedfork_rsrc(self):
+ if sys.platform != 'darwin':
+ self.skipTest('Not supported on "%s"' % sys.platform)
+ tmp = tempfile.NamedTemporaryFile(delete=False)
+ tmp.close()
+ 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())