2016-08-11 22:05:19 -07:00
|
|
|
from fontTools.misc.py23 import *
|
|
|
|
from fontTools import ttLib
|
|
|
|
from fontTools.merge import *
|
|
|
|
import unittest
|
|
|
|
|
|
|
|
|
|
|
|
class MergeIntegrationTest(unittest.TestCase):
|
|
|
|
# TODO
|
|
|
|
pass
|
|
|
|
|
2017-02-27 11:34:48 -08:00
|
|
|
class gaspMergeUnitTest(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
|
|
self.merger = Merger()
|
|
|
|
|
|
|
|
self.table1 = ttLib.newTable('gasp')
|
|
|
|
self.table1.version = 1
|
|
|
|
self.table1.gaspRange = {
|
|
|
|
0x8: 0xA ,
|
|
|
|
0x10: 0x5,
|
|
|
|
}
|
|
|
|
|
|
|
|
self.table2 = ttLib.newTable('gasp')
|
|
|
|
self.table2.version = 1
|
|
|
|
self.table2.gaspRange = {
|
|
|
|
0x6: 0xB ,
|
|
|
|
0xFF: 0x4,
|
|
|
|
}
|
|
|
|
|
|
|
|
self.result = ttLib.newTable('gasp')
|
|
|
|
|
|
|
|
def test_gasp_merge_basic(self):
|
|
|
|
result = self.result.merge(self.merger, [self.table1, self.table2])
|
|
|
|
self.assertEqual(result, self.table1)
|
|
|
|
|
|
|
|
result = self.result.merge(self.merger, [self.table2, self.table1])
|
|
|
|
self.assertEqual(result, self.table2)
|
|
|
|
|
|
|
|
def test_gasp_merge_notImplemented(self):
|
|
|
|
result = self.result.merge(self.merger, [NotImplemented, self.table1])
|
|
|
|
self.assertEqual(result, NotImplemented)
|
|
|
|
|
|
|
|
result = self.result.merge(self.merger, [self.table1, NotImplemented])
|
|
|
|
self.assertEqual(result, self.table1)
|
|
|
|
|
|
|
|
|
2016-08-11 22:05:19 -07:00
|
|
|
class CmapMergeUnitTest(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
|
|
self.merger = Merger()
|
|
|
|
self.table1 = ttLib.newTable('cmap')
|
|
|
|
self.table2 = ttLib.newTable('cmap')
|
|
|
|
self.mergedTable = ttLib.newTable('cmap')
|
|
|
|
pass
|
|
|
|
|
|
|
|
def tearDown(self):
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
def makeSubtable(self, format, platformID, platEncID, cmap):
|
|
|
|
module = ttLib.getTableModule('cmap')
|
|
|
|
subtable = module.cmap_classes[format](format)
|
|
|
|
(subtable.platformID,
|
|
|
|
subtable.platEncID,
|
|
|
|
subtable.language,
|
|
|
|
subtable.cmap) = (platformID, platEncID, 0, cmap)
|
|
|
|
return subtable
|
|
|
|
|
|
|
|
# 4-3-1 table merged with 12-3-10 table with no dupes with codepoints outside BMP
|
|
|
|
def test_cmap_merge_no_dupes(self):
|
|
|
|
table1 = self.table1
|
|
|
|
table2 = self.table2
|
|
|
|
mergedTable = self.mergedTable
|
|
|
|
|
|
|
|
cmap1 = {0x2603: 'SNOWMAN'}
|
|
|
|
table1.tables = [self.makeSubtable(4,3,1, cmap1)]
|
|
|
|
|
|
|
|
cmap2 = {0x26C4: 'SNOWMAN WITHOUT SNOW'}
|
|
|
|
cmap2Extended = {0x1F93C: 'WRESTLERS'}
|
|
|
|
cmap2Extended.update(cmap2)
|
|
|
|
table2.tables = [self.makeSubtable(4,3,1, cmap2), self.makeSubtable(12,3,10, cmap2Extended)]
|
|
|
|
|
|
|
|
self.merger.alternateGlyphsPerFont = [{},{}]
|
|
|
|
mergedTable.merge(self.merger, [table1, table2])
|
|
|
|
|
|
|
|
expectedCmap = cmap2.copy()
|
|
|
|
expectedCmap.update(cmap1)
|
|
|
|
expectedCmapExtended = cmap2Extended.copy()
|
|
|
|
expectedCmapExtended.update(cmap1)
|
|
|
|
self.assertEqual(mergedTable.numSubTables, 2)
|
|
|
|
self.assertEqual([(table.format, table.platformID, table.platEncID, table.language) for table in mergedTable.tables],
|
|
|
|
[(4,3,1,0),(12,3,10,0)])
|
|
|
|
self.assertEqual(mergedTable.tables[0].cmap, expectedCmap)
|
|
|
|
self.assertEqual(mergedTable.tables[1].cmap, expectedCmapExtended)
|
|
|
|
|
|
|
|
# Tests Issue #322
|
|
|
|
def test_cmap_merge_three_dupes(self):
|
|
|
|
table1 = self.table1
|
|
|
|
table2 = self.table2
|
|
|
|
mergedTable = self.mergedTable
|
|
|
|
|
|
|
|
cmap1 = {0x20: 'space#0', 0xA0: 'space#0'}
|
|
|
|
table1.tables = [self.makeSubtable(4,3,1,cmap1)]
|
|
|
|
cmap2 = {0x20: 'space#1', 0xA0: 'uni00A0#1'}
|
|
|
|
table2.tables = [self.makeSubtable(4,3,1,cmap2)]
|
|
|
|
|
|
|
|
self.merger.duplicateGlyphsPerFont = [{},{}]
|
|
|
|
mergedTable.merge(self.merger, [table1, table2])
|
|
|
|
|
|
|
|
expectedCmap = cmap1.copy()
|
|
|
|
self.assertEqual(mergedTable.numSubTables, 1)
|
|
|
|
table = mergedTable.tables[0]
|
|
|
|
self.assertEqual((table.format, table.platformID, table.platEncID, table.language), (4,3,1,0))
|
|
|
|
self.assertEqual(table.cmap, expectedCmap)
|
|
|
|
self.assertEqual(self.merger.duplicateGlyphsPerFont, [{}, {'space#0': 'space#1'}])
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
2017-01-11 13:05:35 +00:00
|
|
|
import sys
|
|
|
|
sys.exit(unittest.main())
|