aboutsummaryrefslogtreecommitdiff
path: root/Tests
diff options
context:
space:
mode:
Diffstat (limited to 'Tests')
-rw-r--r--Tests/ttLib/sfnt_test.py56
-rw-r--r--Tests/ttLib/tables/_n_a_m_e_test.py14
-rw-r--r--Tests/varLib/data/test_results/BuildTestCFF2.ttx10
-rw-r--r--Tests/varLib/varLib_test.py3
4 files changed, 76 insertions, 7 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()
diff --git a/Tests/varLib/data/test_results/BuildTestCFF2.ttx b/Tests/varLib/data/test_results/BuildTestCFF2.ttx
index 29044525..9f7d6388 100644
--- a/Tests/varLib/data/test_results/BuildTestCFF2.ttx
+++ b/Tests/varLib/data/test_results/BuildTestCFF2.ttx
@@ -27,31 +27,31 @@
<!-- Regular -->
<!-- PostScript: TestCFF2Roman-Regular -->
- <NamedInstance flags="0x0" postscriptNameID="262" subfamilyNameID="261">
+ <NamedInstance flags="0x0" postscriptNameID="261" subfamilyNameID="2">
<coord axis="wght" value="400.0"/>
</NamedInstance>
<!-- Medium -->
<!-- PostScript: TestCFF2Roman-Medium -->
- <NamedInstance flags="0x0" postscriptNameID="264" subfamilyNameID="263">
+ <NamedInstance flags="0x0" postscriptNameID="263" subfamilyNameID="262">
<coord axis="wght" value="500.0"/>
</NamedInstance>
<!-- Semibold -->
<!-- PostScript: TestCFF2Roman-Semibold -->
- <NamedInstance flags="0x0" postscriptNameID="266" subfamilyNameID="265">
+ <NamedInstance flags="0x0" postscriptNameID="265" subfamilyNameID="264">
<coord axis="wght" value="600.0"/>
</NamedInstance>
<!-- Bold -->
<!-- PostScript: TestCFF2Roman-Bold -->
- <NamedInstance flags="0x0" postscriptNameID="268" subfamilyNameID="267">
+ <NamedInstance flags="0x0" postscriptNameID="267" subfamilyNameID="266">
<coord axis="wght" value="700.0"/>
</NamedInstance>
<!-- Black -->
<!-- PostScript: TestCFF2Roman-Black -->
- <NamedInstance flags="0x0" postscriptNameID="270" subfamilyNameID="269">
+ <NamedInstance flags="0x0" postscriptNameID="269" subfamilyNameID="268">
<coord axis="wght" value="900.0"/>
</NamedInstance>
</fvar>
diff --git a/Tests/varLib/varLib_test.py b/Tests/varLib/varLib_test.py
index 5d36d687..42e04bd9 100644
--- a/Tests/varLib/varLib_test.py
+++ b/Tests/varLib/varLib_test.py
@@ -22,6 +22,9 @@ def reload_font(font):
"""(De)serialize to get final binary layout."""
buf = BytesIO()
font.save(buf)
+ # Close the font to release filesystem resources so that on Windows the tearDown
+ # method can successfully remove the temporary directory created during setUp.
+ font.close()
buf.seek(0)
return TTFont(buf)