diff options
Diffstat (limited to 'Tests/ttLib')
-rw-r--r-- | Tests/ttLib/sfnt_test.py | 56 | ||||
-rw-r--r-- | Tests/ttLib/tables/_n_a_m_e_test.py | 14 |
2 files changed, 68 insertions, 2 deletions
diff --git a/Tests/ttLib/sfnt_test.py b/Tests/ttLib/sfnt_test.py index 91734833..9f817444 100644 --- a/Tests/ttLib/sfnt_test.py +++ b/Tests/ttLib/sfnt_test.py @@ -1,7 +1,59 @@ -from fontTools.misc.py23 import * -from fontTools.ttLib.sfnt import calcChecksum +import io +import copy +import pickle +from fontTools.ttLib.sfnt import calcChecksum, SFNTReader +import pytest def test_calcChecksum(): assert calcChecksum(b"abcd") == 1633837924 assert calcChecksum(b"abcdxyz") == 3655064932 + + +EMPTY_SFNT = b"\x00\x01\x00\x00" + b"\x00" * 8 + + +def pickle_unpickle(obj): + return pickle.loads(pickle.dumps(obj)) + + +class SFNTReaderTest: + @pytest.mark.parametrize("deepcopy", [copy.deepcopy, pickle_unpickle]) + def test_pickle_protocol_FileIO(self, deepcopy, tmp_path): + fontfile = tmp_path / "test.ttf" + fontfile.write_bytes(EMPTY_SFNT) + reader = SFNTReader(fontfile.open("rb")) + + reader2 = deepcopy(reader) + + assert reader2 is not reader + assert reader2.file is not reader.file + + assert isinstance(reader2.file, io.BufferedReader) + assert isinstance(reader2.file.raw, io.FileIO) + assert reader2.file.name == reader.file.name + assert reader2.file.tell() == reader.file.tell() + + for k, v in reader.__dict__.items(): + if k == "file": + continue + assert getattr(reader2, k) == v + + @pytest.mark.parametrize("deepcopy", [copy.deepcopy, pickle_unpickle]) + def test_pickle_protocol_BytesIO(self, deepcopy, tmp_path): + buf = io.BytesIO(EMPTY_SFNT) + reader = SFNTReader(buf) + + reader2 = deepcopy(reader) + + assert reader2 is not reader + assert reader2.file is not reader.file + + assert isinstance(reader2.file, io.BytesIO) + assert reader2.file.tell() == reader.file.tell() + assert reader2.file.getvalue() == reader.file.getvalue() + + for k, v in reader.__dict__.items(): + if k == "file": + continue + assert getattr(reader2, k) == v diff --git a/Tests/ttLib/tables/_n_a_m_e_test.py b/Tests/ttLib/tables/_n_a_m_e_test.py index 5f5c965c..c0275e7b 100644 --- a/Tests/ttLib/tables/_n_a_m_e_test.py +++ b/Tests/ttLib/tables/_n_a_m_e_test.py @@ -166,6 +166,20 @@ class NameTableTest(unittest.TestCase): self.assertEqual(nameID, table.findMultilingualName(namesSubSet)) self.assertEqual(None, table.findMultilingualName(namesSuperSet)) + def test_findMultilingualName_compiled(self): + table = table__n_a_m_e() + names, namesSubSet, namesSuperSet = self._get_test_names() + nameID = table.addMultilingualName(names) + assert nameID is not None + # After compile/decompile, name.string is a bytes sequence, which + # findMultilingualName() should also handle + data = table.compile(None) + table = table__n_a_m_e() + table.decompile(data, None) + self.assertEqual(nameID, table.findMultilingualName(names)) + self.assertEqual(nameID, table.findMultilingualName(namesSubSet)) + self.assertEqual(None, table.findMultilingualName(namesSuperSet)) + def test_addMultilingualNameReuse(self): table = table__n_a_m_e() names, namesSubSet, namesSuperSet = self._get_test_names() |