xref: /aosp_15_r20/external/fonttools/Tests/varLib/stat_test.py (revision e1fe3e4ad2793916b15cccdc4a7da52a7e1dd0e9)
1*e1fe3e4aSElliott Hughesfrom pathlib import Path
2*e1fe3e4aSElliott Hughes
3*e1fe3e4aSElliott Hughesimport pytest
4*e1fe3e4aSElliott Hughesfrom fontTools.designspaceLib import DesignSpaceDocument
5*e1fe3e4aSElliott Hughesfrom fontTools.designspaceLib.split import Range
6*e1fe3e4aSElliott Hughesfrom fontTools.varLib.stat import getStatAxes, getStatLocations
7*e1fe3e4aSElliott Hughes
8*e1fe3e4aSElliott Hughes
9*e1fe3e4aSElliott Hughes@pytest.fixture
10*e1fe3e4aSElliott Hughesdef datadir():
11*e1fe3e4aSElliott Hughes    return Path(__file__).parent / "../designspaceLib/data"
12*e1fe3e4aSElliott Hughes
13*e1fe3e4aSElliott Hughes
14*e1fe3e4aSElliott Hughesdef test_getStatAxes(datadir):
15*e1fe3e4aSElliott Hughes    doc = DesignSpaceDocument.fromfile(datadir / "test_v5.designspace")
16*e1fe3e4aSElliott Hughes
17*e1fe3e4aSElliott Hughes    assert getStatAxes(
18*e1fe3e4aSElliott Hughes        doc, {"Italic": 0, "Width": Range(50, 150), "Weight": Range(200, 900)}
19*e1fe3e4aSElliott Hughes    ) == [
20*e1fe3e4aSElliott Hughes        {
21*e1fe3e4aSElliott Hughes            "values": [
22*e1fe3e4aSElliott Hughes                {
23*e1fe3e4aSElliott Hughes                    "flags": 0,
24*e1fe3e4aSElliott Hughes                    "name": {
25*e1fe3e4aSElliott Hughes                        "de": "Extraleicht",
26*e1fe3e4aSElliott Hughes                        "en": "Extra Light",
27*e1fe3e4aSElliott Hughes                        "fr": "Extra léger",
28*e1fe3e4aSElliott Hughes                    },
29*e1fe3e4aSElliott Hughes                    "nominalValue": 200.0,
30*e1fe3e4aSElliott Hughes                    "rangeMaxValue": 250.0,
31*e1fe3e4aSElliott Hughes                    "rangeMinValue": 200.0,
32*e1fe3e4aSElliott Hughes                },
33*e1fe3e4aSElliott Hughes                {
34*e1fe3e4aSElliott Hughes                    "flags": 0,
35*e1fe3e4aSElliott Hughes                    "name": {"en": "Light"},
36*e1fe3e4aSElliott Hughes                    "nominalValue": 300.0,
37*e1fe3e4aSElliott Hughes                    "rangeMaxValue": 350.0,
38*e1fe3e4aSElliott Hughes                    "rangeMinValue": 250.0,
39*e1fe3e4aSElliott Hughes                },
40*e1fe3e4aSElliott Hughes                {
41*e1fe3e4aSElliott Hughes                    "flags": 2,
42*e1fe3e4aSElliott Hughes                    "name": {"en": "Regular"},
43*e1fe3e4aSElliott Hughes                    "nominalValue": 400.0,
44*e1fe3e4aSElliott Hughes                    "rangeMaxValue": 450.0,
45*e1fe3e4aSElliott Hughes                    "rangeMinValue": 350.0,
46*e1fe3e4aSElliott Hughes                },
47*e1fe3e4aSElliott Hughes                {
48*e1fe3e4aSElliott Hughes                    "flags": 0,
49*e1fe3e4aSElliott Hughes                    "name": {"en": "Semi Bold"},
50*e1fe3e4aSElliott Hughes                    "nominalValue": 600.0,
51*e1fe3e4aSElliott Hughes                    "rangeMaxValue": 650.0,
52*e1fe3e4aSElliott Hughes                    "rangeMinValue": 450.0,
53*e1fe3e4aSElliott Hughes                },
54*e1fe3e4aSElliott Hughes                {
55*e1fe3e4aSElliott Hughes                    "flags": 0,
56*e1fe3e4aSElliott Hughes                    "name": {"en": "Bold"},
57*e1fe3e4aSElliott Hughes                    "nominalValue": 700.0,
58*e1fe3e4aSElliott Hughes                    "rangeMaxValue": 850.0,
59*e1fe3e4aSElliott Hughes                    "rangeMinValue": 650.0,
60*e1fe3e4aSElliott Hughes                },
61*e1fe3e4aSElliott Hughes                {
62*e1fe3e4aSElliott Hughes                    "flags": 0,
63*e1fe3e4aSElliott Hughes                    "name": {"en": "Black"},
64*e1fe3e4aSElliott Hughes                    "nominalValue": 900.0,
65*e1fe3e4aSElliott Hughes                    "rangeMaxValue": 900.0,
66*e1fe3e4aSElliott Hughes                    "rangeMinValue": 850.0,
67*e1fe3e4aSElliott Hughes                },
68*e1fe3e4aSElliott Hughes                {
69*e1fe3e4aSElliott Hughes                    "flags": 2,
70*e1fe3e4aSElliott Hughes                    "name": {"en": "Regular"},
71*e1fe3e4aSElliott Hughes                    "value": 400.0,
72*e1fe3e4aSElliott Hughes                    "linkedValue": 700.0,
73*e1fe3e4aSElliott Hughes                },
74*e1fe3e4aSElliott Hughes                {
75*e1fe3e4aSElliott Hughes                    "flags": 0,
76*e1fe3e4aSElliott Hughes                    "name": {"en": "Bold"},
77*e1fe3e4aSElliott Hughes                    "value": 700.0,
78*e1fe3e4aSElliott Hughes                    "linkedValue": 400.0,
79*e1fe3e4aSElliott Hughes                },
80*e1fe3e4aSElliott Hughes            ],
81*e1fe3e4aSElliott Hughes            "name": {"en": "Wéíght", "fa-IR": "قطر"},
82*e1fe3e4aSElliott Hughes            "ordering": 2,
83*e1fe3e4aSElliott Hughes            "tag": "wght",
84*e1fe3e4aSElliott Hughes        },
85*e1fe3e4aSElliott Hughes        {
86*e1fe3e4aSElliott Hughes            "values": [
87*e1fe3e4aSElliott Hughes                {"flags": 0, "name": {"en": "Condensed"}, "value": 50.0},
88*e1fe3e4aSElliott Hughes                {"flags": 3, "name": {"en": "Normal"}, "value": 100.0},
89*e1fe3e4aSElliott Hughes                {"flags": 0, "name": {"en": "Wide"}, "value": 125.0},
90*e1fe3e4aSElliott Hughes                {
91*e1fe3e4aSElliott Hughes                    "flags": 0,
92*e1fe3e4aSElliott Hughes                    "name": {"en": "Extra Wide"},
93*e1fe3e4aSElliott Hughes                    "nominalValue": 150.0,
94*e1fe3e4aSElliott Hughes                    "rangeMinValue": 150.0,
95*e1fe3e4aSElliott Hughes                },
96*e1fe3e4aSElliott Hughes            ],
97*e1fe3e4aSElliott Hughes            "name": {"en": "Width", "fr": "Chasse"},
98*e1fe3e4aSElliott Hughes            "ordering": 1,
99*e1fe3e4aSElliott Hughes            "tag": "wdth",
100*e1fe3e4aSElliott Hughes        },
101*e1fe3e4aSElliott Hughes        {
102*e1fe3e4aSElliott Hughes            "values": [
103*e1fe3e4aSElliott Hughes                {"flags": 2, "linkedValue": 1.0, "name": {"en": "Roman"}, "value": 0.0},
104*e1fe3e4aSElliott Hughes            ],
105*e1fe3e4aSElliott Hughes            "name": {"en": "Italic"},
106*e1fe3e4aSElliott Hughes            "ordering": 3,
107*e1fe3e4aSElliott Hughes            "tag": "ital",
108*e1fe3e4aSElliott Hughes        },
109*e1fe3e4aSElliott Hughes    ]
110*e1fe3e4aSElliott Hughes
111*e1fe3e4aSElliott Hughes    assert getStatAxes(doc, {"Italic": 1, "Width": 100, "Weight": Range(400, 700)}) == [
112*e1fe3e4aSElliott Hughes        {
113*e1fe3e4aSElliott Hughes            "values": [
114*e1fe3e4aSElliott Hughes                {
115*e1fe3e4aSElliott Hughes                    "flags": 2,
116*e1fe3e4aSElliott Hughes                    "name": {"en": "Regular"},
117*e1fe3e4aSElliott Hughes                    "nominalValue": 400.0,
118*e1fe3e4aSElliott Hughes                    "rangeMaxValue": 450.0,
119*e1fe3e4aSElliott Hughes                    "rangeMinValue": 350.0,
120*e1fe3e4aSElliott Hughes                },
121*e1fe3e4aSElliott Hughes                {
122*e1fe3e4aSElliott Hughes                    "flags": 0,
123*e1fe3e4aSElliott Hughes                    "name": {"en": "Semi Bold"},
124*e1fe3e4aSElliott Hughes                    "nominalValue": 600.0,
125*e1fe3e4aSElliott Hughes                    "rangeMaxValue": 650.0,
126*e1fe3e4aSElliott Hughes                    "rangeMinValue": 450.0,
127*e1fe3e4aSElliott Hughes                },
128*e1fe3e4aSElliott Hughes                {
129*e1fe3e4aSElliott Hughes                    "flags": 0,
130*e1fe3e4aSElliott Hughes                    "name": {"en": "Bold"},
131*e1fe3e4aSElliott Hughes                    "nominalValue": 700.0,
132*e1fe3e4aSElliott Hughes                    "rangeMaxValue": 850.0,
133*e1fe3e4aSElliott Hughes                    "rangeMinValue": 650.0,
134*e1fe3e4aSElliott Hughes                },
135*e1fe3e4aSElliott Hughes                {
136*e1fe3e4aSElliott Hughes                    "flags": 2,
137*e1fe3e4aSElliott Hughes                    "name": {"en": "Regular"},
138*e1fe3e4aSElliott Hughes                    "value": 400.0,
139*e1fe3e4aSElliott Hughes                    "linkedValue": 700.0,
140*e1fe3e4aSElliott Hughes                },
141*e1fe3e4aSElliott Hughes                {
142*e1fe3e4aSElliott Hughes                    "flags": 0,
143*e1fe3e4aSElliott Hughes                    "name": {"en": "Bold"},
144*e1fe3e4aSElliott Hughes                    "value": 700.0,
145*e1fe3e4aSElliott Hughes                    "linkedValue": 400.0,
146*e1fe3e4aSElliott Hughes                },
147*e1fe3e4aSElliott Hughes            ],
148*e1fe3e4aSElliott Hughes            "name": {"en": "Wéíght", "fa-IR": "قطر"},
149*e1fe3e4aSElliott Hughes            "ordering": 2,
150*e1fe3e4aSElliott Hughes            "tag": "wght",
151*e1fe3e4aSElliott Hughes        },
152*e1fe3e4aSElliott Hughes        {
153*e1fe3e4aSElliott Hughes            "values": [
154*e1fe3e4aSElliott Hughes                {"flags": 3, "name": {"en": "Normal"}, "value": 100.0},
155*e1fe3e4aSElliott Hughes            ],
156*e1fe3e4aSElliott Hughes            "name": {"en": "Width", "fr": "Chasse"},
157*e1fe3e4aSElliott Hughes            "ordering": 1,
158*e1fe3e4aSElliott Hughes            "tag": "wdth",
159*e1fe3e4aSElliott Hughes        },
160*e1fe3e4aSElliott Hughes        {
161*e1fe3e4aSElliott Hughes            "values": [
162*e1fe3e4aSElliott Hughes                {"flags": 0, "name": {"en": "Italic"}, "value": 1.0},
163*e1fe3e4aSElliott Hughes            ],
164*e1fe3e4aSElliott Hughes            "name": {"en": "Italic"},
165*e1fe3e4aSElliott Hughes            "ordering": 3,
166*e1fe3e4aSElliott Hughes            "tag": "ital",
167*e1fe3e4aSElliott Hughes        },
168*e1fe3e4aSElliott Hughes    ]
169*e1fe3e4aSElliott Hughes
170*e1fe3e4aSElliott Hughes
171*e1fe3e4aSElliott Hughesdef test_getStatLocations(datadir):
172*e1fe3e4aSElliott Hughes    doc = DesignSpaceDocument.fromfile(datadir / "test_v5.designspace")
173*e1fe3e4aSElliott Hughes
174*e1fe3e4aSElliott Hughes    assert getStatLocations(
175*e1fe3e4aSElliott Hughes        doc, {"Italic": 0, "Width": Range(50, 150), "Weight": Range(200, 900)}
176*e1fe3e4aSElliott Hughes    ) == [
177*e1fe3e4aSElliott Hughes        {
178*e1fe3e4aSElliott Hughes            "flags": 0,
179*e1fe3e4aSElliott Hughes            "location": {"ital": 0.0, "wdth": 50.0, "wght": 300.0},
180*e1fe3e4aSElliott Hughes            "name": {"en": "Some Style", "fr": "Un Style"},
181*e1fe3e4aSElliott Hughes        },
182*e1fe3e4aSElliott Hughes    ]
183*e1fe3e4aSElliott Hughes    assert getStatLocations(
184*e1fe3e4aSElliott Hughes        doc, {"Italic": 1, "Width": Range(50, 150), "Weight": Range(200, 900)}
185*e1fe3e4aSElliott Hughes    ) == [
186*e1fe3e4aSElliott Hughes        {
187*e1fe3e4aSElliott Hughes            "flags": 0,
188*e1fe3e4aSElliott Hughes            "location": {"ital": 1.0, "wdth": 100.0, "wght": 700.0},
189*e1fe3e4aSElliott Hughes            "name": {"en": "Other"},
190*e1fe3e4aSElliott Hughes        },
191*e1fe3e4aSElliott Hughes    ]
192