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)