@@ -294,40 +294,83 @@ def test_parameter_greater_than_range__ok(self):
294294 ],
295295 )
296296
297- def test_parameter_not_a_multiple_of_step__error (self ):
297+ def test_tick_interval_not_a_multiple_of_step__error (self ):
298298 """Should raise an error if the relevant ticks parameter is not a multiple of 'step'."""
299299 # RI003 RP001
300300 md = """
301301 | survey |
302+ | | type | name | label | parameters |
303+ | | range | q1 | Q1 | start=-3 end=3 step=2 tick_interval={value} |
304+ """
305+ cases = ("-3" , "3" , "-1" , "1" )
306+ for value in cases :
307+ with self .subTest (("tick_interval" , value )):
308+ self .assertPyxformXform (
309+ md = md .format (name = "tick_interval" , value = value ),
310+ errored = True ,
311+ error__contains = [
312+ ErrorCode .RANGE_004 .value .format (row = 2 , name = "tick_interval" )
313+ ],
314+ )
315+
316+ def test_tick_interval_not_a_multiple_of_step__error (self ):
317+ """Should raise an error if the placeholder is not a multiple of 'step' starting at 'start'."""
318+ # RI003 RP001
319+ md = """
320+ | survey |
321+ | | type | name | label | parameters |
322+ | | range | q1 | Q1 | start=-3 end=3 step=2 placeholder={value} |
323+ """
324+ cases = ("-2" , "2" , "0" )
325+ for value in cases :
326+ with self .subTest (("placeholder" , value )):
327+ self .assertPyxformXform (
328+ md = md .format (name = "placeholder" , value = value ),
329+ errored = True ,
330+ error__contains = [
331+ ErrorCode .RANGE_004 .value .format (row = 2 , name = "placeholder" )
332+ ],
333+ )
334+
335+ def test_parameter_not_a_multiple_of_step__ok (self ):
336+ """Should not raise an error if the relevant ticks parameter is a multiple of 'step'."""
337+ # RI003 RP001
338+ md = """
339+ | survey |
302340 | | type | name | label | parameters |
303- | | range | q1 | Q1 | start=-3 end=3 step=2 {name}={value} |
341+ | | range | q1 | Q1 | start=-1 end=1 step=1 {name}={value} |
304342 """
305- params = ("tick_interval" , "placeholder" )
306- cases = ("3" , "-3" )
307- for name in params :
343+ params = (
344+ ("tick_interval" , "odk:tick-interval" ),
345+ ("placeholder" , "odk:placeholder" ),
346+ )
347+ cases = ("1" , "-1" )
348+ for name , attr in params :
308349 for value in cases :
309- with self .subTest ((name , value )):
350+ with self .subTest ((name , attr , value )):
310351 self .assertPyxformXform (
311352 md = md .format (name = name , value = value ),
312- errored = True ,
313- error__contains = [
314- ErrorCode .RANGE_004 .value .format (row = 2 , name = name )
353+ xml__xpath_match = [
354+ xpq .body_range (
355+ "q1" ,
356+ {"start" : "-1" , "end" : "1" , "step" : "1" , attr : value },
357+ ),
315358 ],
316359 )
317360
318- def test_parameter_not_a_multiple_of_step__ok (self ):
361+ def test_parameter_not_a_multiple_of_step_decimal__ok (self ):
319362 """Should not raise an error if the relevant ticks parameter is a multiple of 'step'."""
320363 # RI003 RP001
321364 md = """
322365 | survey |
323366 | | type | name | label | parameters |
324- | | range | q1 | Q1 | start=-1 end=1 step=1 {name}={value} |
367+ | | range | q1 | Q1 | start=-1 end=1 step=0. 1 {name}={value} |
325368 """
326369 params = (
327370 ("tick_interval" , "odk:tick-interval" ),
328371 ("placeholder" , "odk:placeholder" ),
329372 )
330- cases = ("1 " , "-1 " )
373+ cases = ("0.6 " , "-0.6 " )
331374 for name , attr in params :
332375 for value in cases :
333376 with self .subTest ((name , attr , value )):
@@ -336,7 +379,7 @@ def test_parameter_not_a_multiple_of_step__ok(self):
336379 xml__xpath_match = [
337380 xpq .body_range (
338381 "q1" ,
339- {"start" : "-1" , "end" : "1" , "step" : "1" , attr : value },
382+ {"start" : "-1" , "end" : "1" , "step" : "0. 1" , attr : value },
340383 ),
341384 ],
342385 )
@@ -349,7 +392,7 @@ def test_placeholder_outside_range__error(self):
349392 | | type | name | label | parameters |
350393 | | range | q1 | Q1 | start=3 end=7 step=2 placeholder={value} |
351394 """
352- cases = ("2 " , "8 " )
395+ cases = ("1 " , "9 " )
353396 for value in cases :
354397 with self .subTest (value ):
355398 self .assertPyxformXform (
@@ -368,7 +411,7 @@ def test_placeholder_outside_inverted_range__error(self):
368411 | | type | name | label | parameters |
369412 | | range | q1 | Q1 | start=7 end=3 step=2 placeholder={value} |
370413 """
371- cases = ("8 " , "1" )
414+ cases = ("9 " , "1" )
372415 for value in cases :
373416 with self .subTest (value ):
374417 self .assertPyxformXform (
0 commit comments