diff options
Diffstat (limited to 'Tests/varLib/stat_test.py')
-rw-r--r-- | Tests/varLib/stat_test.py | 167 |
1 files changed, 167 insertions, 0 deletions
diff --git a/Tests/varLib/stat_test.py b/Tests/varLib/stat_test.py new file mode 100644 index 00000000..6aa88a05 --- /dev/null +++ b/Tests/varLib/stat_test.py @@ -0,0 +1,167 @@ +from pathlib import Path + +import pytest +from fontTools.designspaceLib import DesignSpaceDocument +from fontTools.designspaceLib.split import Range +from fontTools.varLib.stat import getStatAxes, getStatLocations + + +@pytest.fixture +def datadir(): + return Path(__file__).parent / "../designspaceLib/data" + + +def test_getStatAxes(datadir): + doc = DesignSpaceDocument.fromfile(datadir / "test_v5.designspace") + + assert getStatAxes( + doc, {"Italic": 0, "width": Range(50, 150), "weight": Range(200, 900)} + ) == [ + { + "values": [ + { + "flags": 0, + "name": { + "de": "Extraleicht", + "en": "Extra Light", + "fr": "Extra léger", + }, + "nominalValue": 200.0, + "rangeMaxValue": 250.0, + "rangeMinValue": 200.0, + }, + { + "flags": 0, + "name": {"en": "Light"}, + "nominalValue": 300.0, + "rangeMaxValue": 350.0, + "rangeMinValue": 250.0, + }, + { + "flags": 2, + "name": {"en": "Regular"}, + "nominalValue": 400.0, + "rangeMaxValue": 450.0, + "rangeMinValue": 350.0, + }, + { + "flags": 0, + "name": {"en": "Semi Bold"}, + "nominalValue": 600.0, + "rangeMaxValue": 650.0, + "rangeMinValue": 450.0, + }, + { + "flags": 0, + "name": {"en": "Bold"}, + "nominalValue": 700.0, + "rangeMaxValue": 850.0, + "rangeMinValue": 650.0, + }, + { + "flags": 0, + "name": {"en": "Black"}, + "nominalValue": 900.0, + "rangeMaxValue": 900.0, + "rangeMinValue": 850.0, + }, + ], + "name": {"en": "Wéíght", "fa-IR": "قطر"}, + "ordering": 2, + "tag": "wght", + }, + { + "values": [ + {"flags": 0, "name": {"en": "Condensed"}, "value": 50.0}, + {"flags": 3, "name": {"en": "Normal"}, "value": 100.0}, + {"flags": 0, "name": {"en": "Wide"}, "value": 125.0}, + { + "flags": 0, + "name": {"en": "Extra Wide"}, + "nominalValue": 150.0, + "rangeMinValue": 150.0, + }, + ], + "name": {"en": "width", "fr": "Chasse"}, + "ordering": 1, + "tag": "wdth", + }, + { + "values": [ + {"flags": 2, "linkedValue": 1.0, "name": {"en": "Roman"}, "value": 0.0}, + ], + "name": {"en": "Italic"}, + "ordering": 3, + "tag": "ital", + }, + ] + + assert getStatAxes(doc, {"Italic": 1, "width": 100, "weight": Range(400, 700)}) == [ + { + "values": [ + { + "flags": 2, + "name": {"en": "Regular"}, + "nominalValue": 400.0, + "rangeMaxValue": 450.0, + "rangeMinValue": 350.0, + }, + { + "flags": 0, + "name": {"en": "Semi Bold"}, + "nominalValue": 600.0, + "rangeMaxValue": 650.0, + "rangeMinValue": 450.0, + }, + { + "flags": 0, + "name": {"en": "Bold"}, + "nominalValue": 700.0, + "rangeMaxValue": 850.0, + "rangeMinValue": 650.0, + }, + ], + "name": {"en": "Wéíght", "fa-IR": "قطر"}, + "ordering": 2, + "tag": "wght", + }, + { + "values": [ + {"flags": 3, "name": {"en": "Normal"}, "value": 100.0}, + ], + "name": {"en": "width", "fr": "Chasse"}, + "ordering": 1, + "tag": "wdth", + }, + { + "values": [ + {"flags": 0, "name": {"en": "Italic"}, "value": 1.0}, + ], + "name": {"en": "Italic"}, + "ordering": 3, + "tag": "ital", + }, + ] + + +def test_getStatLocations(datadir): + doc = DesignSpaceDocument.fromfile(datadir / "test_v5.designspace") + + assert getStatLocations( + doc, {"Italic": 0, "width": Range(50, 150), "weight": Range(200, 900)} + ) == [ + { + "flags": 0, + "location": {"ital": 0.0, "wdth": 50.0, "wght": 300.0}, + "name": {"en": "Some Style", "fr": "Un Style"}, + }, + ] + assert getStatLocations( + doc, {"Italic": 1, "width": Range(50, 150), "weight": Range(200, 900)} + ) == [ + { + "flags": 0, + "location": {"ital": 1.0, "wdth": 100.0, "wght": 700.0}, + "name": {"en": "Other"}, + }, + ] |