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:
Brandon Wallace
2026-03-19 01:07:13 -05:00
parent fcad5e195c
commit 3409909b05
+76
View File
@@ -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()