[varStore] Add test for optimize()

Doesn't hit all branches yet.
This commit is contained in:
Behdad Esfahbod 2023-05-24 12:51:24 -06:00
parent cb2f5aacd3
commit e4281b07bc

View File

@ -1,4 +1,6 @@
import pytest
from io import StringIO
from fontTools.misc.xmlWriter import XMLWriter
from fontTools.varLib.models import VariationModel
from fontTools.varLib.varStore import OnlineVarStoreBuilder, VarStoreInstancer
from fontTools.ttLib import TTFont, newTable
@ -80,3 +82,64 @@ def buildAxis(axisTag):
axis = Axis()
axis.axisTag = axisTag
return axis
@pytest.mark.parametrize(
"numRegions, varData, expectedNumVarData, expectedBytes",
[
(
5,
[
[10, 10, 0, 0, 20],
{3: 300},
],
1,
156,
),
(
5,
[
[10, 10, 0, 0, 20],
[10, 11, 0, 0, 20],
[10, 12, 0, 0, 20],
[10, 13, 0, 0, 20],
{3: 300},
],
2,
186,
),
],
)
def test_optimize(numRegions, varData, expectedNumVarData, expectedBytes):
locations = [{i: i / 16384.0} for i in range(numRegions)]
axisTags = sorted({k for loc in locations for k in loc})
model = VariationModel(locations)
builder = OnlineVarStoreBuilder(axisTags)
builder.setModel(model)
for data in varData:
if type(data) is dict:
newData = [0] * numRegions
for k, v in data.items():
newData[k] = v
data = newData
builder.storeMasters(data)
varStore = builder.finish()
mapping = varStore.optimize()
assert len(varStore.VarData) == expectedNumVarData
dummyFont = TTFont()
writer = XMLWriter(StringIO())
varStore.toXML(writer, dummyFont)
xml = writer.file.getvalue()
writer = OTTableWriter()
varStore.compile(writer, dummyFont)
data = writer.getAllData()
assert len(data) == expectedBytes, xml