aboutsummaryrefslogtreecommitdiff
path: root/Tests/ttLib/tables/M_V_A_R_test.py
blob: 356fc1413f2717513394eaaaedc80dccd5656c3e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
from fontTools.misc.py23 import *
from fontTools.misc.testTools import FakeFont, getXML, parseXML
from fontTools.misc.textTools import deHexStr, hexStr
from fontTools.ttLib.tables._f_v_a_r import Axis
from fontTools.ttLib import newTable, TTFont
import unittest


MVAR_DATA = deHexStr(
    '0001 0000 '  # 0:   version=1.0
    '0000 0008 '  # 4:   reserved=0, valueRecordSize=8
    '0007 '       # 8:   valueRecordCount=7
    '0044 '       # 10:  offsetToItemVariationStore=68
    '6861 7363 '  # 12:  ValueRecord.valueTag="hasc"
    '0000 '       # 16:  ValueRecord.deltaSetOuterIndex
    '0003 '       # 18:  ValueRecord.deltaSetInnerIndex
    '6863 6C61 '  # 20:  ValueRecord.valueTag="hcla"
    '0000 '       # 24:  ValueRecord.deltaSetOuterIndex
    '0003 '       # 26:  ValueRecord.deltaSetInnerIndex
    '6863 6C64 '  # 28:  ValueRecord.valueTag="hcld"
    '0000 '       # 32:  ValueRecord.deltaSetOuterIndex
    '0003 '       # 34:  ValueRecord.deltaSetInnerIndex
    '6864 7363 '  # 36:  ValueRecord.valueTag="hdsc"
    '0000 '       # 40:  ValueRecord.deltaSetOuterIndex
    '0000 '       # 42:  ValueRecord.deltaSetInnerIndex
    '686C 6770 '  # 44:  ValueRecord.valueTag="hlgp"
    '0000 '       # 48:  ValueRecord.deltaSetOuterIndex
    '0002 '       # 50:  ValueRecord.deltaSetInnerIndex
    '7362 796F '  # 52:  ValueRecord.valueTag="sbyo"
    '0000 '       # 56:  ValueRecord.deltaSetOuterIndex
    '0001 '       # 58:  ValueRecord.deltaSetInnerIndex
    '7370 796F '  # 60:  ValueRecord.valueTag="spyo"
    '0000 '       # 64:  ValueRecord.deltaSetOuterIndex
    '0002 '       # 66:  ValueRecord.deltaSetInnerIndex
    '0001 '       # 68:  VarStore.format=1
    '0000 000C '  # 70:  VarStore.offsetToVariationRegionList=12
    '0001 '       # 74:  VarStore.itemVariationDataCount=1
    '0000 0016 '  # 76:  VarStore.itemVariationDataOffsets[0]=22
    '0001 '       # 80:  VarRegionList.axisCount=1
    '0001 '       # 82:  VarRegionList.regionCount=1
    '0000 '       # 84:  variationRegions[0].regionAxes[0].startCoord=0.0
    '4000 '       # 86:  variationRegions[0].regionAxes[0].peakCoord=1.0
    '4000 '       # 88:  variationRegions[0].regionAxes[0].endCoord=1.0
    '0004 '       # 90:  VarData.ItemCount=4
    '0001 '       # 92:  VarData.NumShorts=1
    '0001 '       # 94:  VarData.VarRegionCount=1
    '0000 '       # 96:  VarData.VarRegionIndex[0]=0
    'FF38 '       # 98:  VarData.deltaSets[0]=-200
    'FFCE '       # 100: VarData.deltaSets[0]=-50
    '0064 '       # 102: VarData.deltaSets[0]=100
    '00C8 '       # 104: VarData.deltaSets[0]=200
)

MVAR_XML = [
    '<Version value="0x00010000"/>',
    '<Reserved value="0"/>',
    '<ValueRecordSize value="8"/>',
    '<!-- ValueRecordCount=7 -->',
    '<VarStore Format="1">',
    '  <Format value="1"/>',
    '  <VarRegionList>',
    '    <!-- RegionAxisCount=1 -->',
    '    <!-- RegionCount=1 -->',
    '    <Region index="0">',
    '      <VarRegionAxis index="0">',
    '        <StartCoord value="0.0"/>',
    '        <PeakCoord value="1.0"/>',
    '        <EndCoord value="1.0"/>',
    '      </VarRegionAxis>',
    '    </Region>',
    '  </VarRegionList>',
    '  <!-- VarDataCount=1 -->',
    '  <VarData index="0">',
    '    <!-- ItemCount=4 -->',
    '    <NumShorts value="1"/>',
    '    <!-- VarRegionCount=1 -->',
    '    <VarRegionIndex index="0" value="0"/>',
    '    <Item index="0" value="[-200]"/>',
    '    <Item index="1" value="[-50]"/>',
    '    <Item index="2" value="[100]"/>',
    '    <Item index="3" value="[200]"/>',
    '  </VarData>',
    '</VarStore>',
    '<ValueRecord index="0">',
    '  <ValueTag value="hasc"/>',
    '  <VarIdx value="3"/>',
    '</ValueRecord>',
    '<ValueRecord index="1">',
    '  <ValueTag value="hcla"/>',
    '  <VarIdx value="3"/>',
    '</ValueRecord>',
    '<ValueRecord index="2">',
    '  <ValueTag value="hcld"/>',
    '  <VarIdx value="3"/>',
    '</ValueRecord>',
    '<ValueRecord index="3">',
    '  <ValueTag value="hdsc"/>',
    '  <VarIdx value="0"/>',
    '</ValueRecord>',
    '<ValueRecord index="4">',
    '  <ValueTag value="hlgp"/>',
    '  <VarIdx value="2"/>',
    '</ValueRecord>',
    '<ValueRecord index="5">',
    '  <ValueTag value="sbyo"/>',
    '  <VarIdx value="1"/>',
    '</ValueRecord>',
    '<ValueRecord index="6">',
    '  <ValueTag value="spyo"/>',
    '  <VarIdx value="2"/>',
    '</ValueRecord>',
]


class MVARTest(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        cls.maxDiff = None

    def test_decompile_toXML(self):
        mvar = newTable('MVAR')
        font = TTFont()
        mvar.decompile(MVAR_DATA, font)
        self.assertEqual(getXML(mvar.toXML), MVAR_XML)

    def test_compile_fromXML(self):
        mvar = newTable('MVAR')
        font = TTFont()
        for name, attrs, content in parseXML(MVAR_XML):
            mvar.fromXML(name, attrs, content, font=font)
        data = MVAR_DATA
        self.assertEqual(hexStr(mvar.compile(font)), hexStr(data))


if __name__ == '__main__':
    import sys
    sys.exit(unittest.main())