aboutsummaryrefslogtreecommitdiff
path: root/Tests/ttLib/tables/_n_a_m_e_test.py
diff options
context:
space:
mode:
Diffstat (limited to 'Tests/ttLib/tables/_n_a_m_e_test.py')
-rw-r--r--Tests/ttLib/tables/_n_a_m_e_test.py112
1 files changed, 110 insertions, 2 deletions
diff --git a/Tests/ttLib/tables/_n_a_m_e_test.py b/Tests/ttLib/tables/_n_a_m_e_test.py
index 8e829704..5e8a0c2b 100644
--- a/Tests/ttLib/tables/_n_a_m_e_test.py
+++ b/Tests/ttLib/tables/_n_a_m_e_test.py
@@ -1,12 +1,12 @@
-from fontTools.misc.py23 import bytesjoin, tostr
from fontTools.misc import sstruct
from fontTools.misc.loggingTools import CapturingLogHandler
from fontTools.misc.testTools import FakeFont
+from fontTools.misc.textTools import bytesjoin, tostr
from fontTools.misc.xmlWriter import XMLWriter
from io import BytesIO
import struct
import unittest
-from fontTools.ttLib import newTable
+from fontTools.ttLib import TTFont, newTable
from fontTools.ttLib.tables._n_a_m_e import (
table__n_a_m_e, NameRecord, nameRecordFormat, nameRecordSize, makeName, log)
@@ -305,6 +305,17 @@ class NameTableTest(unittest.TestCase):
self.assertGreaterEqual(nameID, 256)
self.assertEqual(nameID, table.findMultilingualName(names, minNameID=256))
+ def test_addMultilingualName_name_inconsistencies(self):
+ # Check what happens, when there are
+ # inconsistencies in the name table
+ table = table__n_a_m_e()
+ table.setName('Weight', 270, 3, 1, 0x409)
+ names = {'en': 'Weight', }
+ nameID = table.addMultilingualName(names, minNameID=256)
+ # Because there is an inconsistency in the names,
+ # addMultilingualName adds a new name ID
+ self.assertEqual(271, nameID)
+
def test_decompile_badOffset(self):
# https://github.com/fonttools/fonttools/issues/525
table = table__n_a_m_e()
@@ -450,6 +461,103 @@ class NameRecordTest(unittest.TestCase):
self.assertEqual(name.getEncoding(None), None)
self.assertEqual(name.getEncoding(default=None), None)
+ def test_get_family_name(self):
+ name = table__n_a_m_e()
+ name.names = [
+ makeName("Copyright", 0, 1, 0, 0),
+ makeName("Family Name ID 1", 1, 1, 0, 0),
+ makeName("SubFamily Name ID 2", 2, 1, 0, 0),
+ makeName("Unique Name ID 3", 3, 1, 0, 0),
+ makeName("Full Name ID 4", 4, 1, 0, 0),
+ makeName("PS Name ID 6", 6, 1, 0, 0),
+ makeName("Version Name ID 5", 5, 1, 0, 0),
+ makeName("Trademark Name ID 7", 7, 1, 0, 0),
+ ]
+
+ result_value = name.getBestFamilyName()
+ self.assertEqual("Family Name ID 1", result_value)
+
+ expected_value = "Family Name ID 16"
+ name.setName(expected_value, 16, 1, 0, 0)
+ result_value = name.getBestFamilyName()
+ self.assertEqual(expected_value, result_value)
+
+ expected_value = "Family Name ID 21"
+ name.setName(expected_value, 21, 1, 0, 0)
+ result_value = name.getBestFamilyName()
+ self.assertEqual(expected_value, result_value)
+
+ def test_get_subfamily_name(self):
+ name = table__n_a_m_e()
+ name.names = [
+ makeName("Copyright", 0, 1, 0, 0),
+ makeName("Family Name ID 1", 1, 1, 0, 0),
+ makeName("SubFamily Name ID 2", 2, 1, 0, 0),
+ makeName("Unique Name ID 3", 3, 1, 0, 0),
+ makeName("Full Name ID 4", 4, 1, 0, 0),
+ makeName("PS Name ID 6", 6, 1, 0, 0),
+ makeName("Version Name ID 5", 5, 1, 0, 0),
+ makeName("Trademark Name ID 7", 7, 1, 0, 0),
+ ]
+
+ result_value = name.getBestSubFamilyName()
+ self.assertEqual("SubFamily Name ID 2", result_value)
+
+ expected_value = "Family Name ID 17"
+ name.setName(expected_value, 17, 1, 0, 0)
+ result_value = name.getBestSubFamilyName()
+ self.assertEqual(expected_value, result_value)
+
+ expected_value = "Family Name ID 22"
+ name.setName(expected_value, 22, 1, 0, 0)
+ result_value = name.getBestSubFamilyName()
+ self.assertEqual(expected_value, result_value)
+
+ def test_get_nice_full_name(self):
+ name = table__n_a_m_e()
+ name.names = [
+ makeName("NID 1", 1, 1, 0, 0),
+ makeName("NID 2", 2, 1, 0, 0),
+ makeName("NID 4", 4, 1, 0, 0),
+ makeName("NID 6", 6, 1, 0, 0),
+ ]
+
+ result_value = name.getBestFullName()
+ self.assertEqual("NID 1 NID 2", result_value)
+
+ expected_value = "NID 1 NID 2"
+ # expection is still NID 1 NID 2,
+ # because name ID 17 is missing
+ name.setName("NID 16", 16, 1, 0, 0)
+ result_value = name.getBestFullName()
+ self.assertEqual(expected_value, result_value)
+
+ name.setName('NID 17', 17, 1, 0, 0)
+ result_value = name.getBestFullName()
+ self.assertEqual("NID 16 NID 17", result_value)
+
+ expected_value = "NID 16 NID 17"
+ # expection is still NID 16 NID 17,
+ # because name ID 21 is missing
+ name.setName('NID 21', 21, 1, 0, 0)
+ result_value = name.getBestFullName()
+ self.assertEqual(expected_value, result_value)
+
+ name.setName('NID 22', 22, 1, 0, 0)
+ result_value = name.getBestFullName()
+ self.assertEqual("NID 21 NID 22", result_value)
+
+ for NID in [2, 16, 17, 21, 22]:
+ name.removeNames(NID)
+
+ result_value = name.getBestFullName()
+ self.assertEqual("NID 4", result_value)
+
+ name.setName('Regular', 2, 1, 0, 0)
+ result_value = name.getBestFullName()
+ self.assertEqual("NID 1", result_value)
+
+
if __name__ == "__main__":
import sys
sys.exit(unittest.main())