aboutsummaryrefslogtreecommitdiff
path: root/Tests/varLib/stat_test.py
diff options
context:
space:
mode:
Diffstat (limited to 'Tests/varLib/stat_test.py')
-rw-r--r--Tests/varLib/stat_test.py167
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"},
+ },
+ ]