diff --git a/include/behaviortree_cpp/basic_types.h b/include/behaviortree_cpp/basic_types.h index 5907d846f..9e266022c 100644 --- a/include/behaviortree_cpp/basic_types.h +++ b/include/behaviortree_cpp/basic_types.h @@ -281,6 +281,10 @@ template { try { + if(value.empty()) + { + return ""; + } using InnerType = typename is_vector::ValueType; std::stringstream ss; for(auto it = value.begin(); it != --value.end(); ++it) diff --git a/tests/gtest_ports.cpp b/tests/gtest_ports.cpp index cbe644aaf..50e05ad7f 100644 --- a/tests/gtest_ports.cpp +++ b/tests/gtest_ports.cpp @@ -6,13 +6,28 @@ using namespace BT; -TEST(toStr, ConvertsVectors) +TEST(toStr, ConvertsIntVector) { std::string val_str; - ASSERT_NO_THROW(val_str = BT::toStr(std::vector{ 1, 2, 3, 4 })); + ASSERT_NO_THROW(val_str = toStr(std::vector{ 1, 2, 3, 4 })); EXPECT_EQ(val_str, "1;2;3;4"); } +TEST(toStr, ConvertsStringVector) +{ + std::string val_str; + ASSERT_NO_THROW(val_str = + toStr(std::vector{ "hello", "", " ", "world", "!" })); + EXPECT_EQ(val_str, "hello;; ;world;!"); +} + +TEST(toStr, ConvertsEmptyVector) +{ + std::string val_str; + ASSERT_NO_THROW(val_str = toStr(std::vector{})); + EXPECT_EQ(val_str, ""); +} + class NodeWithPorts : public SyncActionNode { public: