From 17e757300c780b7a88378b4478a3ee8b5cd8ab31 Mon Sep 17 00:00:00 2001 From: Cosimo Lupo Date: Mon, 26 Oct 2015 00:10:21 +0000 Subject: [PATCH] [macRes_test] add tests for ResourceReader --- Lib/fontTools/misc/macRes_test.py | 97 +++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 Lib/fontTools/misc/macRes_test.py diff --git a/Lib/fontTools/misc/macRes_test.py b/Lib/fontTools/misc/macRes_test.py new file mode 100644 index 000000000..dd3feb359 --- /dev/null +++ b/Lib/fontTools/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 .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__': + unittest.main()