From 8d58f7f730e368fa04b58804f6e4affa2510e36a Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Sun, 4 Aug 2024 15:55:27 -0600 Subject: [PATCH] [varLib.avar] Add roundtrip test Fails currently. --- Tests/varLib/avar_test.py | 113 +++++++++++++++++++++++--------------- 1 file changed, 68 insertions(+), 45 deletions(-) diff --git a/Tests/varLib/avar_test.py b/Tests/varLib/avar_test.py index b4e1132fe..c1208dce1 100644 --- a/Tests/varLib/avar_test.py +++ b/Tests/varLib/avar_test.py @@ -1,51 +1,51 @@ +from fontTools.varLib.models import VariationModel from fontTools.varLib.avar import _pruneLocations import unittest import pytest +TESTS = [ + ( + [ + {"wght": 1}, + {"wght": 0.5}, + ], + [ + {"wght": 0.5}, + ], + [ + {"wght": 0.5}, + ], + ), + ( + [ + {"wght": 1, "wdth": 1}, + {"wght": 0.5, "wdth": 1}, + ], + [ + {"wght": 1, "wdth": 1}, + ], + [ + {"wght": 1, "wdth": 1}, + {"wght": 0.5, "wdth": 1}, + ], + ), + ( + [ + {"wght": 1}, + {"wdth": 1}, + {"wght": 0.5, "wdth": 0.5}, + ], + [ + {"wght": 0.5, "wdth": 0.5}, + ], + [ + {"wght": 0.5, "wdth": 0.5}, + ], + ), +] -@pytest.mark.parametrize( - "locations, poles, expected", - [ - ( - [ - {"wght": 1}, - {"wght": 0.5}, - ], - [ - {"wght": 0.5}, - ], - [ - {"wght": 0.5}, - ], - ), - ( - [ - {"wght": 1, "wdth": 1}, - {"wght": 0.5, "wdth": 1}, - ], - [ - {"wght": 1, "wdth": 1}, - ], - [ - {"wght": 1, "wdth": 1}, - {"wght": 0.5, "wdth": 1}, - ], - ), - ( - [ - {"wght": 1}, - {"wdth": 1}, - {"wght": 0.5, "wdth": 0.5}, - ], - [ - {"wght": 0.5, "wdth": 0.5}, - ], - [ - {"wght": 0.5, "wdth": 0.5}, - ], - ), - ], -) + +@pytest.mark.parametrize("locations, poles, expected", TESTS) def test_pruneLocations(locations, poles, expected): axisTags = set() for location in locations: @@ -54,6 +54,29 @@ def test_pruneLocations(locations, poles, expected): locations = [{}] + locations - output = _pruneLocations(locations, poles, axisTags) + pruned = _pruneLocations(locations, poles, axisTags) - assert output == expected, (output, expected) + assert pruned == expected, (pruned, expected) + + +@pytest.mark.parametrize("locations, poles, expected", TESTS) +def test_roundtrip(locations, poles, expected): + axisTags = set() + for location in locations: + axisTags.update(location.keys()) + axisTags = sorted(axisTags) + + locations = [{}] + locations + expected = [{}] + expected + + model1 = VariationModel(locations, axisTags) + model2 = VariationModel(expected, axisTags) + + for location in poles: + i = model1.locations.index(location) + support1 = model1.supports[i] + + i = model2.locations.index(location) + support2 = model2.supports[i] + + assert support1 == support2, (support1, support2)