test: add failing tests for NaN/undefined variable integer comparison bug
Add 5 tests covering the ValueError crash in __eval_basiccondition() when int() is called on empty/non-numeric variable values during integer comparisons. Tests verify expected behavior for warn mode (comparison evaluates to false) and stop mode (proper PPPInterrupt).
This commit is contained in:
@@ -1328,6 +1328,82 @@ class TestPromptPostProcessor(TestPromptPostProcessorBase):
|
||||
ppp=self.nocupppp,
|
||||
)
|
||||
|
||||
# NaN/undefined variable integer comparison tests
|
||||
|
||||
def test_cmd_if_undefined_var_int_compare_warn(self): # undefined var integer compare with on_warning=warn
|
||||
self.process(
|
||||
PromptPair(
|
||||
"<ppp:if undefined_var gt 0>YES<ppp:else>NO<ppp:/if>",
|
||||
"",
|
||||
),
|
||||
PromptPair("NO", ""),
|
||||
ppp=PromptPostProcessor(
|
||||
self.ppp_logger,
|
||||
self.interrupt,
|
||||
self.def_env_info,
|
||||
{**self.defopts, "on_warning": PromptPostProcessor.ONWARNING_CHOICES.warn.value},
|
||||
self.grammar_content,
|
||||
self.wildcards_obj,
|
||||
self.extranetwork_maps_obj,
|
||||
),
|
||||
)
|
||||
|
||||
def test_cmd_if_undefined_var_int_compare_stop(self): # undefined var integer compare with on_warning=stop
|
||||
self.process(
|
||||
PromptPair(
|
||||
"<ppp:if undefined_var gt 0>YES<ppp:else>NO<ppp:/if>",
|
||||
"",
|
||||
),
|
||||
PromptPair("", ""),
|
||||
interrupted=True,
|
||||
)
|
||||
|
||||
def test_cmd_if_nonnumeric_var_int_compare_warn(self): # non-numeric var integer compare with on_warning=warn
|
||||
self.process(
|
||||
PromptPair(
|
||||
"<ppp:set myvar>abc<ppp:/set><ppp:if myvar gt 0>YES<ppp:else>NO<ppp:/if>",
|
||||
"",
|
||||
),
|
||||
PromptPair("NO", ""),
|
||||
ppp=PromptPostProcessor(
|
||||
self.ppp_logger,
|
||||
self.interrupt,
|
||||
self.def_env_info,
|
||||
{**self.defopts, "on_warning": PromptPostProcessor.ONWARNING_CHOICES.warn.value},
|
||||
self.grammar_content,
|
||||
self.wildcards_obj,
|
||||
self.extranetwork_maps_obj,
|
||||
),
|
||||
)
|
||||
|
||||
def test_cmd_if_nonnumeric_var_int_compare_stop(self): # non-numeric var integer compare with on_warning=stop
|
||||
self.process(
|
||||
PromptPair(
|
||||
"<ppp:set myvar>abc<ppp:/set><ppp:if myvar gt 0>YES<ppp:else>NO<ppp:/if>",
|
||||
"",
|
||||
),
|
||||
PromptPair("", ""),
|
||||
interrupted=True,
|
||||
)
|
||||
|
||||
def test_cmd_if_empty_var_int_compare(self): # empty string var integer compare with on_warning=warn
|
||||
self.process(
|
||||
PromptPair(
|
||||
"<ppp:set myvar><ppp:/set><ppp:if myvar gt 0>YES<ppp:else>NO<ppp:/if>",
|
||||
"",
|
||||
),
|
||||
PromptPair("NO", ""),
|
||||
ppp=PromptPostProcessor(
|
||||
self.ppp_logger,
|
||||
self.interrupt,
|
||||
self.def_env_info,
|
||||
{**self.defopts, "on_warning": PromptPostProcessor.ONWARNING_CHOICES.warn.value},
|
||||
self.grammar_content,
|
||||
self.wildcards_obj,
|
||||
self.extranetwork_maps_obj,
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user