Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #include <gtest/gtest.h>
00014 #include "action_test_node.h"
00015 #include "condition_test_node.h"
00016 #include "behaviortree_cpp/behavior_tree.h"
00017 #include "behaviortree_cpp/blackboard/blackboard_local.h"
00018
00019 using namespace BT;
00020
00021 class InitTestNode: public SyncActionNode
00022 {
00023 public:
00024 InitTestNode(bool try_to_access_bb, const std::string& name):
00025 SyncActionNode(name),
00026 _value(0)
00027 {
00028 if( try_to_access_bb )
00029 {
00030
00031 blackboard()->set(KEY(), 33);
00032 }
00033 }
00034
00035 void onInit() {
00036 blackboard()->get(KEY(), _value);
00037 }
00038
00039 NodeStatus tick()
00040 {
00041 _value *= 2;
00042 blackboard()->set(KEY(), _value);
00043 return NodeStatus::SUCCESS;
00044 }
00045
00046 static const char* KEY() { return "my_entry"; }
00047
00048 private:
00049 int _value;
00050 };
00051
00052
00053
00054
00055
00056
00057 TEST(BlackboardTest, CheckOInit)
00058 {
00059 auto bb = Blackboard::create<BlackboardLocal>();
00060 const auto KEY = InitTestNode::KEY();
00061
00062 EXPECT_THROW( InitTestNode(true,"init_test"), std::logic_error );
00063
00064 InitTestNode node(false,"init_test");
00065 node.setBlackboard(bb);
00066
00067 bb->set(KEY, 11 );
00068
00069
00070 node.executeTick();
00071
00072 ASSERT_EQ( bb->get<int>(KEY), 22 );
00073
00074
00075 bb->set(KEY, 1 );
00076
00077
00078 node.setStatus( NodeStatus::IDLE );
00079 node.executeTick();
00080 ASSERT_EQ( bb->get<int>(KEY), 44 );
00081 }