diff --git a/tests/gtest_substitution.cpp b/tests/gtest_substitution.cpp index 172d9ce64..fda7afdfc 100644 --- a/tests/gtest_substitution.cpp +++ b/tests/gtest_substitution.cpp @@ -30,6 +30,14 @@ const char* json_text = R"( } )"; +const char* single_action_xml = R"( + + + + + + )"; + } // namespace TEST(Substitution, Parser) @@ -58,6 +66,42 @@ TEST(Substitution, Parser) ASSERT_EQ(*std::get_if(&rules.at("actionC")), "NotAConfig"); } +TEST(Substitution, TestNodePostScriptUsesRegisteredEnums) +{ + BehaviorTreeFactory factory; + factory.registerScriptingEnum("EXPECTED_VALUE", 42); + factory.registerBehaviorTreeFromText(single_action_xml); + + TestNodeConfig test_config; + test_config.return_status = NodeStatus::SUCCESS; + test_config.post_script = "observed := EXPECTED_VALUE"; + factory.addSubstitutionRule("action_A", test_config); + + auto blackboard = Blackboard::create(); + auto tree = factory.createTree("MainTree", blackboard); + + ASSERT_EQ(tree.tickWhileRunning(), NodeStatus::SUCCESS); + ASSERT_EQ(blackboard->get("observed"), 42); +} + +TEST(Substitution, TestNodePostScriptReadsStatusNamedBlackboardKey) +{ + BehaviorTreeFactory factory; + factory.registerBehaviorTreeFromText(single_action_xml); + + TestNodeConfig test_config; + test_config.return_status = NodeStatus::SUCCESS; + test_config.post_script = "observed := SUCCESS"; + factory.addSubstitutionRule("action_A", test_config); + + auto blackboard = Blackboard::create(); + blackboard->set("SUCCESS", 99); + auto tree = factory.createTree("MainTree", blackboard); + + ASSERT_EQ(tree.tickWhileRunning(), NodeStatus::SUCCESS); + ASSERT_EQ(blackboard->get("observed"), 99); +} + // Regression test for issue #934: segfault when substituting a SubTree node TEST(Substitution, SubTreeNodeSubstitution) {