@@ -39,7 +39,7 @@ def test_designaxis_model_filled(qtbot, qtmodeltester):
39
39
qtmodeltester .check (model )
40
40
41
41
# 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" ]
43
43
assert model .ordered_axis_tags == ["MONO" , "CASL" , "wght" , "slnt" , "CRSV" ]
44
44
assert model ._v_header == ["MONO" , "CASL" , "wght" , "slnt" , "CRSV" ]
45
45
assert model .fvar_axes == {
@@ -50,11 +50,11 @@ def test_designaxis_model_filled(qtbot, qtmodeltester):
50
50
"CRSV" : [0.0 , 0.5 , 1.0 ],
51
51
}
52
52
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]" , "" ],
58
58
]
59
59
60
60
@@ -69,7 +69,7 @@ def test_designaxis_model_filled_woff(qtbot, qtmodeltester):
69
69
qtmodeltester .check (model )
70
70
71
71
# 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" ]
73
73
assert model .ordered_axis_tags == ["MONO" , "CASL" , "wght" , "slnt" , "CRSV" ]
74
74
assert model ._v_header == ["MONO" , "CASL" , "wght" , "slnt" , "CRSV" ]
75
75
assert model .fvar_axes == {
@@ -80,11 +80,11 @@ def test_designaxis_model_filled_woff(qtbot, qtmodeltester):
80
80
"CRSV" : [0.0 , 0.5 , 1.0 ],
81
81
}
82
82
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]" , "" ],
88
88
]
89
89
90
90
@@ -99,7 +99,7 @@ def test_designaxis_model_filled_woff2(qtbot, qtmodeltester):
99
99
qtmodeltester .check (model )
100
100
101
101
# 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" ]
103
103
assert model .ordered_axis_tags == ["MONO" , "CASL" , "wght" , "slnt" , "CRSV" ]
104
104
assert model ._v_header == ["MONO" , "CASL" , "wght" , "slnt" , "CRSV" ]
105
105
assert model .fvar_axes == {
@@ -110,11 +110,11 @@ def test_designaxis_model_filled_woff2(qtbot, qtmodeltester):
110
110
"CRSV" : [0.0 , 0.5 , 1.0 ],
111
111
}
112
112
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]" , "" ],
118
118
]
119
119
120
120
@@ -245,7 +245,7 @@ def test_designaxis_model_subspace_data_validates_includes_default(qtbot):
245
245
qtbot .addWidget (tableview )
246
246
model .load_font (get_font_model ())
247
247
248
- # all values include the default axis value in range
248
+ # all values include the default axis value (300) in range
249
249
passing_values = (
250
250
[100 , 300 ],
251
251
[200 , 400 ],
@@ -274,6 +274,100 @@ def test_designaxis_model_subspace_data_validates_includes_default(qtbot):
274
274
model .subspace_data_validates_includes_default_value (failing_value , "wght" )
275
275
276
276
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
+
277
371
def test_designaxis_model_get_number_of_axes (qtbot ):
278
372
tableview = QTableView ()
279
373
model = DesignAxisModel ()
0 commit comments