Skip to content

Commit 9729ab5

Browse files
committed
add new model tests for L3 sub-spacing support, revise tests of Axis Editor header strings
1 parent 50009fc commit 9729ab5

File tree

1 file changed

+113
-19
lines changed

1 file changed

+113
-19
lines changed

tests/test_models_designaxis.py

Lines changed: 113 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ def test_designaxis_model_filled(qtbot, qtmodeltester):
3939
qtmodeltester.check(model)
4040

4141
# confirm that font data loaded appropriately
42-
assert model._h_header == ["(Min, Max) [Default]", "Edit Values"]
42+
assert model._h_header == ["Min : Max [Default]", "Edit Values"]
4343
assert model.ordered_axis_tags == ["MONO", "CASL", "wght", "slnt", "CRSV"]
4444
assert model._v_header == ["MONO", "CASL", "wght", "slnt", "CRSV"]
4545
assert model.fvar_axes == {
@@ -50,11 +50,11 @@ def test_designaxis_model_filled(qtbot, qtmodeltester):
5050
"CRSV": [0.0, 0.5, 1.0],
5151
}
5252
assert model._data == [
53-
["(0.0, 1.0) [0.0]", ""],
54-
["(0.0, 1.0) [0.0]", ""],
55-
["(300.0, 1000.0) [300.0]", ""],
56-
["(-15.0, 0.0) [0.0]", ""],
57-
["(0.0, 1.0) [0.5]", ""],
53+
["0.0 : 1.0 [0.0]", ""],
54+
["0.0 : 1.0 [0.0]", ""],
55+
["300.0 : 1000.0 [300.0]", ""],
56+
["-15.0 : 0.0 [0.0]", ""],
57+
["0.0 : 1.0 [0.5]", ""],
5858
]
5959

6060

@@ -69,7 +69,7 @@ def test_designaxis_model_filled_woff(qtbot, qtmodeltester):
6969
qtmodeltester.check(model)
7070

7171
# confirm that font data loaded appropriately
72-
assert model._h_header == ["(Min, Max) [Default]", "Edit Values"]
72+
assert model._h_header == ["Min : Max [Default]", "Edit Values"]
7373
assert model.ordered_axis_tags == ["MONO", "CASL", "wght", "slnt", "CRSV"]
7474
assert model._v_header == ["MONO", "CASL", "wght", "slnt", "CRSV"]
7575
assert model.fvar_axes == {
@@ -80,11 +80,11 @@ def test_designaxis_model_filled_woff(qtbot, qtmodeltester):
8080
"CRSV": [0.0, 0.5, 1.0],
8181
}
8282
assert model._data == [
83-
["(0.0, 1.0) [0.0]", ""],
84-
["(0.0, 1.0) [0.0]", ""],
85-
["(300.0, 1000.0) [300.0]", ""],
86-
["(-15.0, 0.0) [0.0]", ""],
87-
["(0.0, 1.0) [0.5]", ""],
83+
["0.0 : 1.0 [0.0]", ""],
84+
["0.0 : 1.0 [0.0]", ""],
85+
["300.0 : 1000.0 [300.0]", ""],
86+
["-15.0 : 0.0 [0.0]", ""],
87+
["0.0 : 1.0 [0.5]", ""],
8888
]
8989

9090

@@ -99,7 +99,7 @@ def test_designaxis_model_filled_woff2(qtbot, qtmodeltester):
9999
qtmodeltester.check(model)
100100

101101
# confirm that font data loaded appropriately
102-
assert model._h_header == ["(Min, Max) [Default]", "Edit Values"]
102+
assert model._h_header == ["Min : Max [Default]", "Edit Values"]
103103
assert model.ordered_axis_tags == ["MONO", "CASL", "wght", "slnt", "CRSV"]
104104
assert model._v_header == ["MONO", "CASL", "wght", "slnt", "CRSV"]
105105
assert model.fvar_axes == {
@@ -110,11 +110,11 @@ def test_designaxis_model_filled_woff2(qtbot, qtmodeltester):
110110
"CRSV": [0.0, 0.5, 1.0],
111111
}
112112
assert model._data == [
113-
["(0.0, 1.0) [0.0]", ""],
114-
["(0.0, 1.0) [0.0]", ""],
115-
["(300.0, 1000.0) [300.0]", ""],
116-
["(-15.0, 0.0) [0.0]", ""],
117-
["(0.0, 1.0) [0.5]", ""],
113+
["0.0 : 1.0 [0.0]", ""],
114+
["0.0 : 1.0 [0.0]", ""],
115+
["300.0 : 1000.0 [300.0]", ""],
116+
["-15.0 : 0.0 [0.0]", ""],
117+
["0.0 : 1.0 [0.5]", ""],
118118
]
119119

120120

@@ -245,7 +245,7 @@ def test_designaxis_model_subspace_data_validates_includes_default(qtbot):
245245
qtbot.addWidget(tableview)
246246
model.load_font(get_font_model())
247247

248-
# all values include the default axis value in range
248+
# all values include the default axis value (300) in range
249249
passing_values = (
250250
[100, 300],
251251
[200, 400],
@@ -274,6 +274,100 @@ def test_designaxis_model_subspace_data_validates_includes_default(qtbot):
274274
model.subspace_data_validates_includes_default_value(failing_value, "wght")
275275

276276

277+
def test_designaxis_model_parse_subspace_range_pass(qtbot):
278+
tableview = QTableView()
279+
model = DesignAxisModel()
280+
tableview.setModel(model)
281+
qtbot.addWidget(tableview)
282+
model.load_font(get_font_model())
283+
284+
# The following list includes valid, supported axis range
285+
# restriction values for the requested syntax `min_val:max_val [default_val]`
286+
# the test font includes wght axis range with 300 default value
287+
# this must be included in the range until L4 sub-spacing support
288+
# is added
289+
passing_values = [
290+
("100:300", (100.0, 300.0), None),
291+
("100 : 300", (100.0, 300.0), None),
292+
(" 100 : 300 ", (100.0, 300.0), None),
293+
("300:100", (100.0, 300.0), None),
294+
("300 : 100", (100.0, 300.0), None),
295+
(" 300 : 100 ", (100.0, 300.0), None),
296+
("100.0:300.0", (100.0, 300.0), None),
297+
("100.0 : 300.0", (100.0, 300.0), None),
298+
(" 100.0 : 300.0 ", (100.0, 300.0), None),
299+
("100:300 [300]", (100.0, 300.0), "300"),
300+
("100 : 300 [300]", (100.0, 300.0), "300"),
301+
(" 100 : 300 [ 300 ]", (100.0, 300.0), "300"),
302+
("100.0:300.0 [300.0]", (100.0, 300.0), "300.0"),
303+
("100.0 : 300.0 [300.0]", (100.0, 300.0), "300.0"),
304+
(" 100.0 : 300.0 [300.0]", (100.0, 300.0), "300.0"),
305+
("100.0:300.0 [ 300.0 ]", (100.0, 300.0), "300.0"),
306+
("300.0:100.0 [ 300.0 ]", (100.0, 300.0), "300.0"),
307+
("300:100 [ 300 ]", (100.0, 300.0), "300"),
308+
# the following is not recommended because default will not match in the future
309+
("(100:300)", (100.0, 300.0), None),
310+
]
311+
312+
for passing_value in passing_values:
313+
match = model.parse_subspace_range(passing_value[0], "wght")
314+
# range should match tuple
315+
assert match[0] == passing_value[1]
316+
# default value should match string
317+
assert match[1] == passing_value[2]
318+
319+
320+
def test_designaxis_model_parse_subspace_range_fail_invalid_syntax(qtbot):
321+
tableview = QTableView()
322+
model = DesignAxisModel()
323+
tableview.setModel(model)
324+
qtbot.addWidget(tableview)
325+
model.load_font(get_font_model())
326+
327+
# The following list includes invalid values that
328+
# raise errors during execution
329+
failing_values = [
330+
# invalid syntax
331+
"100,300",
332+
"(100,300)",
333+
"100,300 [300]",
334+
"(100,300) [300]",
335+
# invalid types
336+
"100:bogus",
337+
"bogus:100",
338+
]
339+
340+
for failing_value in failing_values:
341+
with pytest.raises(ValueError):
342+
model.parse_subspace_range(failing_value, "wght")
343+
344+
345+
def test_designaxis_model_parse_subspace_range_fail_invalid_range_without_default(qtbot):
346+
tableview = QTableView()
347+
model = DesignAxisModel()
348+
tableview.setModel(model)
349+
qtbot.addWidget(tableview)
350+
model.load_font(get_font_model())
351+
352+
# The following list includes invalid values that
353+
# raise errors during execution b/c axis default not in range
354+
# this applies until L4 support is available
355+
failing_values = [
356+
"100:200",
357+
"400:700",
358+
"100.0:299.9",
359+
"300.1:400.0",
360+
"100:299.9",
361+
"300.1:700",
362+
"200:100",
363+
"299.9 : 100.0",
364+
]
365+
366+
for failing_value in failing_values:
367+
with pytest.raises(ValueError):
368+
model.parse_subspace_range(failing_value, "wght")
369+
370+
277371
def test_designaxis_model_get_number_of_axes(qtbot):
278372
tableview = QTableView()
279373
model = DesignAxisModel()

0 commit comments

Comments
 (0)