diff --git a/Tests/ttLib/tables/T_S_I__0_test.py b/Tests/ttLib/tables/T_S_I__0_test.py new file mode 100644 index 000000000..1de6b3412 --- /dev/null +++ b/Tests/ttLib/tables/T_S_I__0_test.py @@ -0,0 +1,106 @@ +from __future__ import print_function, division, absolute_import +from fontTools.misc.py23 import SimpleNamespace +from fontTools.misc.textTools import deHexStr +from fontTools.misc.testTools import getXML +from fontTools.ttLib.tables.T_S_I__0 import table_T_S_I__0 +import pytest + + +# (gid, length, offset) for glyph programs +TSI0_INDICES = [ + (0, 1, 0), + (1, 5, 1), + (2, 0, 1), + (3, 0, 1), + (4, 8, 6)] + +# (type, length, offset) for 'extra' programs +TSI0_EXTRA_INDICES = [ + (0xFFFA, 2, 14), # ppgm + (0xFFFB, 4, 16), # cvt + (0xFFFC, 6, 20), # reserved + (0xFFFD, 10, 26)] # fpgm + +# compiled TSI0 table from data above +TSI0_DATA = deHexStr( + "0000 0001 00000000" + "0001 0005 00000001" + "0002 0000 00000001" + "0003 0000 00000001" + "0004 0008 00000006" + "FFFE 0000 ABFC1F34" # 'magic' separates glyph from extra programs + "FFFA 0002 0000000E" + "FFFB 0004 00000010" + "FFFC 0006 00000014" + "FFFD 000A 0000001A") + +# empty font has no glyph programs but 4 extra programs are always present +EMPTY_TSI0_EXTRA_INDICES = [ + (0xFFFA, 0, 0), + (0xFFFB, 0, 0), + (0xFFFC, 0, 0), + (0xFFFD, 0, 0)] + +EMPTY_TSI0_DATA = deHexStr( + "FFFE 0000 ABFC1F34" + "FFFA 0000 00000000" + "FFFB 0000 00000000" + "FFFC 0000 00000000" + "FFFD 0000 00000000") + + +@pytest.fixture +def table(): + return table_T_S_I__0() + + +@pytest.mark.parametrize( + "numGlyphs, data, expected_indices, expected_extra_indices", + [ + (5, TSI0_DATA, TSI0_INDICES, TSI0_EXTRA_INDICES), + (0, EMPTY_TSI0_DATA, [], EMPTY_TSI0_EXTRA_INDICES) + ], + ids=["simple", "empty"] +) +def test_decompile(table, numGlyphs, data, expected_indices, + expected_extra_indices): + font = {'maxp': SimpleNamespace(numGlyphs=numGlyphs)} + + table.decompile(data, font) + + assert len(table.indices) == numGlyphs + assert table.indices == expected_indices + assert len(table.extra_indices) == 4 + assert table.extra_indices == expected_extra_indices + + +@pytest.mark.parametrize( + "numGlyphs, indices, extra_indices, expected_data", + [ + (5, TSI0_INDICES, TSI0_EXTRA_INDICES, TSI0_DATA), + (0, [], EMPTY_TSI0_EXTRA_INDICES, EMPTY_TSI0_DATA) + ], + ids=["simple", "empty"] +) +def test_compile(table, numGlyphs, indices, extra_indices, expected_data): + assert table.compile(ttFont=None) == b"" + + table.set(indices, extra_indices) + data = table.compile(ttFont=None) + assert data == expected_data + + +def test_set(table): + table.set(TSI0_INDICES, TSI0_EXTRA_INDICES) + assert table.indices == TSI0_INDICES + assert table.extra_indices == TSI0_EXTRA_INDICES + + +def test_toXML(table): + assert getXML(table.toXML, ttFont=None) == [ + ''] + + +if __name__ == "__main__": + import sys + sys.exit(pytest.main(sys.argv))