diff --git a/data/test/scenarios/event_handlers_in_events.cfg b/data/test/scenarios/event_handlers_in_events.cfg index d95d72afa7a..f17792de1d0 100644 --- a/data/test/scenarios/event_handlers_in_events.cfg +++ b/data/test/scenarios/event_handlers_in_events.cfg @@ -332,7 +332,7 @@ )} ##### -# API(s) being tested: [event]delayed_variable_substitution +# API(s) being tested: [event]delayed_variable_substitution=yes ## # Actions: # Define a nested event with delayed_variable_substitution=yes @@ -340,7 +340,7 @@ # Expected end state: # The nested event delays substituting the variable's value until it executes, rather than when the outer event executes ##### -{GENERIC_UNIT_TEST "event_handers_in_events__delayed" ( +{GENERIC_UNIT_TEST "event_handlers_in_events__delayed" ( [event] name=prestart {VARIABLE pass_test 0} @@ -356,6 +356,42 @@ [/event] )} +##### +# API(s) being tested: [event]delayed_variable_substitution=yes, name=$variable +## +# Actions: +# Define a nested event with delayed_variable_substitution=yes and a dynamic name +## +# Expected end state: +# The nested event delays substituting the variable's value until it executes, rather than when the outer event executes +# Because of this, the variable in the event name is substituted on the fly, so the event never executes. +##### +{GENERIC_UNIT_TEST "event_handlers_in_events__delayed__dynamic_name" ( + [event] + name=turn 1 + {VARIABLE pass_test 0} + + [event] + name="turn $($turn_number + 1)" + delayed_variable_substitution=yes + {VARIABLE_OP pass_test add 1} + [/event] + + {VARIABLE pass_test 1} + [end_turn][/end_turn] + [/event] + [event] + name=side turn + first_time_only=no + [end_turn][/end_turn] + [/event] + [event] + name=turn 2 end + [end_turn][/end_turn] + {RETURN ({VARIABLE_CONDITIONAL pass_test equals 1})} + [/event] +)} + ##### # API(s) being tested: [event]delayed_variable_substitution ## @@ -365,7 +401,7 @@ # Expected end state: # The nested event immediately substitutes the variable's value when the outer event executes ##### -{GENERIC_UNIT_TEST "event_handers_in_events__immediate" ( +{GENERIC_UNIT_TEST "event_handlers_in_events__immediate" ( [event] name=prestart {VARIABLE pass_test 0} @@ -382,17 +418,54 @@ )} ##### -# API(s) being tested: [event][insert_tag] +# API(s) being tested: [event]delayed_variable_substitution=no, name=$variable +## +# Actions: +# Define a nested event with delayed_variable_substitution=no and a dynamic name +## +# Expected end state: +# The nested event immediately substitutes the variable's value when the outer event executes +# Because of this, the variable in the event name is substituted immediately, so the event executes on the next turn. +{GENERIC_UNIT_TEST "event_handlers_in_events__immediate__dynamic_name" ( + [event] + name=turn 1 + {VARIABLE pass_test 0} + + [event] + name="turn $($turn_number + 1)" + delayed_variable_substitution=no + {VARIABLE_OP pass_test add 1} + [/event] + + {VARIABLE pass_test 1} + [end_turn][/end_turn] + [/event] + [event] + name=side turn + first_time_only=no + [end_turn][/end_turn] + [/event] + [event] + name=turn 2 end + [end_turn][/end_turn] + {RETURN ({VARIABLE_CONDITIONAL pass_test equals 2})} + [/event] +)} + +##### +# API(s) being tested: [event]delayed_variable_substitution=yes[insert_tag] ## # Actions: # Define a post_advance event which includes a filter created via [insert_tag] # Two units are created, exactly one of which matches the filter # Both units are advanced a level +# The filter variable is changed to a race not present +# Both units are advanced another level ## # Expected end state: # The event was triggered exactly once ##### -{GENERIC_UNIT_TEST "event_handlers_in_events__dynamic_filter" ( +{GENERIC_UNIT_TEST "event_handlers_in_events__delayed__dynamic_filter" ( [event] name=start {VARIABLE pass_test 0} @@ -407,6 +480,7 @@ [event] name=post_advance first_time_only=no + delayed_variable_substitution=yes [insert_tag] name=filter variable=filter @@ -420,10 +494,82 @@ [/filter] experience=50 [/modify_unit] + [set_variables] + name=filter + [value] + race=bat + [/value] + [/set_variables] + [modify_unit] + [filter] + x=1,2 + y=1,2 + [/filter] + experience=100 + [/modify_unit] {RETURN ({VARIABLE_CONDITIONAL pass_test equals 1})} [/event] )} +##### +# API(s) being tested: [event]delayed_variable_substitution=no[insert_tag] +## +# Actions: +# Define a post_advance event which includes a filter created via [insert_tag] +# Two units are created, exactly one of which matches the filter +# Both units are advanced a level +# The filter variable is changed to a race not present +# Both units are advanced another level +## +# Expected end state: +# The event was triggered twice, because the [insert_tag] is substituted when the event was registered. +##### +{GENERIC_UNIT_TEST "event_handlers_in_events__immediate__dynamic_filter" ( + [event] + name=start + {VARIABLE pass_test 0} + [set_variables] + name=filter + [value] + race=elf + [/value] + [/set_variables] + {UNIT 1 "Orcish Grunt" 1 1 ()} + {UNIT 1 "Elvish Archer" 2 2 ()} + [event] + name=post_advance + first_time_only=no + delayed_variable_substitution=no + [insert_tag] + name=filter + variable=filter + [/insert_tag] + {VARIABLE_OP pass_test add 1} + [/event] + [modify_unit] + [filter] + x=1,2 + y=1,2 + [/filter] + experience=50 + [/modify_unit] + [set_variables] + name=filter + [value] + race=bat + [/value] + [/set_variables] + [modify_unit] + [filter] + x=1,2 + y=1,2 + [/filter] + experience=100 + [/modify_unit] + {RETURN ({VARIABLE_CONDITIONAL pass_test equals 2})} + [/event] +)} + ##### # API(s) being tested: [remove_event] ## diff --git a/wml_test_schedule b/wml_test_schedule index 8c66f4000b5..5b62d71bccf 100644 --- a/wml_test_schedule +++ b/wml_test_schedule @@ -119,9 +119,12 @@ 0 event_handlers_in_events_6 0 event_handlers_in_events_7 0 event_handlers_in_events_8 -0 event_handers_in_events__delayed -0 event_handers_in_events__immediate -0 event_handlers_in_events__dynamic_filter +0 event_handlers_in_events__delayed +0 event_handlers_in_events__delayed__dynamic_name +0 event_handlers_in_events__delayed__dynamic_filter +0 event_handlers_in_events__immediate +0 event_handlers_in_events__immediate__dynamic_name +0 event_handlers_in_events__immediate__dynamic_filter 0 event_remove_test 0 event_repeat_test 0 event_test_auto_variables_side_turn