1*95269dbcSPatrick Venture #include <systemd/sd-bus-protocol.h> 2*95269dbcSPatrick Venture 3a1e9e2aeSWilliam A. Kennington III #include <array> 4a1e9e2aeSWilliam A. Kennington III #include <map> 57802c074SPatrick Williams #include <sdbusplus/message.hpp> 6a1e9e2aeSWilliam A. Kennington III #include <sdbusplus/test/sdbus_mock.hpp> 728dc36d5SEd Tanous #include <set> 8a1e9e2aeSWilliam A. Kennington III #include <string> 9a1e9e2aeSWilliam A. Kennington III #include <tuple> 10a1e9e2aeSWilliam A. Kennington III #include <unordered_map> 11a1e9e2aeSWilliam A. Kennington III #include <vector> 121807fa47SPatrick Williams 13*95269dbcSPatrick Venture #include <gmock/gmock.h> 14*95269dbcSPatrick Venture #include <gtest/gtest.h> 15*95269dbcSPatrick Venture 16a1e9e2aeSWilliam A. Kennington III namespace 171807fa47SPatrick Williams { 185b485794SPatrick Williams 19a1e9e2aeSWilliam A. Kennington III using testing::Eq; 20a1e9e2aeSWilliam A. Kennington III using testing::MatcherCast; 21a1e9e2aeSWilliam A. Kennington III using testing::Pointee; 22a1e9e2aeSWilliam A. Kennington III using testing::Return; 23a1e9e2aeSWilliam A. Kennington III using testing::SafeMatcherCast; 24a1e9e2aeSWilliam A. Kennington III using testing::StrEq; 25a1e9e2aeSWilliam A. Kennington III 26a1e9e2aeSWilliam A. Kennington III class AppendTest : public testing::Test 27a1e9e2aeSWilliam A. Kennington III { 28a1e9e2aeSWilliam A. Kennington III protected: 29a1e9e2aeSWilliam A. Kennington III testing::StrictMock<sdbusplus::SdBusMock> mock; 30a1e9e2aeSWilliam A. Kennington III 31a1e9e2aeSWilliam A. Kennington III void SetUp() override 32a1e9e2aeSWilliam A. Kennington III { 33a1e9e2aeSWilliam A. Kennington III EXPECT_CALL(mock, sd_bus_message_new_method_call(testing::_, testing::_, 34a1e9e2aeSWilliam A. Kennington III nullptr, nullptr, 35a1e9e2aeSWilliam A. Kennington III nullptr, nullptr)) 36a1e9e2aeSWilliam A. Kennington III .WillRepeatedly(Return(0)); 37a1e9e2aeSWilliam A. Kennington III }; 38a1e9e2aeSWilliam A. Kennington III 39a1e9e2aeSWilliam A. Kennington III sdbusplus::message::message new_message() 40a1e9e2aeSWilliam A. Kennington III { 41a1e9e2aeSWilliam A. Kennington III return sdbusplus::get_mocked_new(&mock).new_method_call( 42a1e9e2aeSWilliam A. Kennington III nullptr, nullptr, nullptr, nullptr); 431807fa47SPatrick Williams } 441807fa47SPatrick Williams 45a1e9e2aeSWilliam A. Kennington III template <typename T> void expect_basic(char type, T val) 461807fa47SPatrick Williams { 47a1e9e2aeSWilliam A. Kennington III EXPECT_CALL(mock, 48a1e9e2aeSWilliam A. Kennington III sd_bus_message_append_basic( 49a1e9e2aeSWilliam A. Kennington III nullptr, type, 50a1e9e2aeSWilliam A. Kennington III MatcherCast<const void *>( 51a1e9e2aeSWilliam A. Kennington III SafeMatcherCast<const T *>(Pointee(Eq(val)))))) 52a1e9e2aeSWilliam A. Kennington III .WillOnce(Return(0)); 531807fa47SPatrick Williams } 541807fa47SPatrick Williams 55a1e9e2aeSWilliam A. Kennington III void expect_basic_string(char type, const char *str) 561807fa47SPatrick Williams { 57a1e9e2aeSWilliam A. Kennington III EXPECT_CALL(mock, sd_bus_message_append_basic( 58a1e9e2aeSWilliam A. Kennington III nullptr, type, 59a1e9e2aeSWilliam A. Kennington III MatcherCast<const void *>( 60a1e9e2aeSWilliam A. Kennington III SafeMatcherCast<const char *>(StrEq(str))))) 61a1e9e2aeSWilliam A. Kennington III .WillOnce(Return(0)); 62a1e9e2aeSWilliam A. Kennington III } 63a1e9e2aeSWilliam A. Kennington III 64a1e9e2aeSWilliam A. Kennington III void expect_open_container(char type, const char *contents) 6507e1d6f3SPatrick Williams { 66a1e9e2aeSWilliam A. Kennington III EXPECT_CALL( 67a1e9e2aeSWilliam A. Kennington III mock, sd_bus_message_open_container(nullptr, type, StrEq(contents))) 68a1e9e2aeSWilliam A. Kennington III .WillOnce(Return(0)); 69a1e9e2aeSWilliam A. Kennington III } 70a1e9e2aeSWilliam A. Kennington III 71a1e9e2aeSWilliam A. Kennington III void expect_close_container() 72a1e9e2aeSWilliam A. Kennington III { 73a1e9e2aeSWilliam A. Kennington III EXPECT_CALL(mock, sd_bus_message_close_container(nullptr)) 74a1e9e2aeSWilliam A. Kennington III .WillOnce(Return(0)); 75a1e9e2aeSWilliam A. Kennington III } 76a1e9e2aeSWilliam A. Kennington III }; 77a1e9e2aeSWilliam A. Kennington III 78a1e9e2aeSWilliam A. Kennington III TEST_F(AppendTest, RValueInt) 79a1e9e2aeSWilliam A. Kennington III { 80a1e9e2aeSWilliam A. Kennington III expect_basic<int>(SD_BUS_TYPE_INT32, 1); 81a1e9e2aeSWilliam A. Kennington III new_message().append(1); 82a1e9e2aeSWilliam A. Kennington III } 83a1e9e2aeSWilliam A. Kennington III 84a1e9e2aeSWilliam A. Kennington III TEST_F(AppendTest, LValueInt) 85a1e9e2aeSWilliam A. Kennington III { 86a1e9e2aeSWilliam A. Kennington III const int a = 1; 87a1e9e2aeSWilliam A. Kennington III expect_basic<int>(SD_BUS_TYPE_INT32, a); 88a1e9e2aeSWilliam A. Kennington III new_message().append(a); 89a1e9e2aeSWilliam A. Kennington III } 90a1e9e2aeSWilliam A. Kennington III 91a1e9e2aeSWilliam A. Kennington III TEST_F(AppendTest, XValueInt) 92a1e9e2aeSWilliam A. Kennington III { 93a1e9e2aeSWilliam A. Kennington III int a = 1; 94a1e9e2aeSWilliam A. Kennington III expect_basic<int>(SD_BUS_TYPE_INT32, a); 95a1e9e2aeSWilliam A. Kennington III new_message().append(std::move(a)); 96a1e9e2aeSWilliam A. Kennington III } 97a1e9e2aeSWilliam A. Kennington III 98a1e9e2aeSWilliam A. Kennington III TEST_F(AppendTest, RValueBool) 99a1e9e2aeSWilliam A. Kennington III { 100a1e9e2aeSWilliam A. Kennington III expect_basic<int>(SD_BUS_TYPE_BOOLEAN, true); 101a1e9e2aeSWilliam A. Kennington III new_message().append(true); 102a1e9e2aeSWilliam A. Kennington III } 103a1e9e2aeSWilliam A. Kennington III 104a1e9e2aeSWilliam A. Kennington III TEST_F(AppendTest, LValueBool) 105a1e9e2aeSWilliam A. Kennington III { 106a1e9e2aeSWilliam A. Kennington III const bool a = false; 107a1e9e2aeSWilliam A. Kennington III expect_basic<int>(SD_BUS_TYPE_BOOLEAN, false); 108a1e9e2aeSWilliam A. Kennington III new_message().append(a); 109a1e9e2aeSWilliam A. Kennington III } 110a1e9e2aeSWilliam A. Kennington III 111a1e9e2aeSWilliam A. Kennington III TEST_F(AppendTest, XValueBool) 112a1e9e2aeSWilliam A. Kennington III { 113a1e9e2aeSWilliam A. Kennington III bool a = false; 114a1e9e2aeSWilliam A. Kennington III expect_basic<int>(SD_BUS_TYPE_BOOLEAN, false); 115a1e9e2aeSWilliam A. Kennington III new_message().append(std::move(a)); 116a1e9e2aeSWilliam A. Kennington III } 117a1e9e2aeSWilliam A. Kennington III 118a1e9e2aeSWilliam A. Kennington III TEST_F(AppendTest, RValueDouble) 119a1e9e2aeSWilliam A. Kennington III { 120a1e9e2aeSWilliam A. Kennington III expect_basic<double>(SD_BUS_TYPE_DOUBLE, 1.1); 121a1e9e2aeSWilliam A. Kennington III new_message().append(1.1); 122a1e9e2aeSWilliam A. Kennington III } 123a1e9e2aeSWilliam A. Kennington III 124a1e9e2aeSWilliam A. Kennington III TEST_F(AppendTest, LValueDouble) 125a1e9e2aeSWilliam A. Kennington III { 126a1e9e2aeSWilliam A. Kennington III const double a = 1.1; 127a1e9e2aeSWilliam A. Kennington III expect_basic<double>(SD_BUS_TYPE_DOUBLE, a); 128a1e9e2aeSWilliam A. Kennington III new_message().append(a); 129a1e9e2aeSWilliam A. Kennington III } 130a1e9e2aeSWilliam A. Kennington III 131a1e9e2aeSWilliam A. Kennington III TEST_F(AppendTest, XValueDouble) 132a1e9e2aeSWilliam A. Kennington III { 133a1e9e2aeSWilliam A. Kennington III double a = 1.1; 134a1e9e2aeSWilliam A. Kennington III expect_basic<double>(SD_BUS_TYPE_DOUBLE, a); 135a1e9e2aeSWilliam A. Kennington III new_message().append(std::move(a)); 136a1e9e2aeSWilliam A. Kennington III } 137a1e9e2aeSWilliam A. Kennington III 138a1e9e2aeSWilliam A. Kennington III TEST_F(AppendTest, RValueCString) 139a1e9e2aeSWilliam A. Kennington III { 140a1e9e2aeSWilliam A. Kennington III expect_basic_string(SD_BUS_TYPE_STRING, "asdf"); 141a1e9e2aeSWilliam A. Kennington III new_message().append("asdf"); 142a1e9e2aeSWilliam A. Kennington III } 143a1e9e2aeSWilliam A. Kennington III 144a1e9e2aeSWilliam A. Kennington III TEST_F(AppendTest, LValueCString) 145a1e9e2aeSWilliam A. Kennington III { 146a1e9e2aeSWilliam A. Kennington III const char *const s = "asdf"; 147a1e9e2aeSWilliam A. Kennington III expect_basic_string(SD_BUS_TYPE_STRING, s); 148a1e9e2aeSWilliam A. Kennington III new_message().append(s); 149a1e9e2aeSWilliam A. Kennington III } 150a1e9e2aeSWilliam A. Kennington III 151a1e9e2aeSWilliam A. Kennington III TEST_F(AppendTest, XValueCString) 152a1e9e2aeSWilliam A. Kennington III { 153a1e9e2aeSWilliam A. Kennington III const char *s = "asdf"; 154a1e9e2aeSWilliam A. Kennington III expect_basic_string(SD_BUS_TYPE_STRING, s); 155a1e9e2aeSWilliam A. Kennington III new_message().append(std::move(s)); 156a1e9e2aeSWilliam A. Kennington III } 157a1e9e2aeSWilliam A. Kennington III 158a1e9e2aeSWilliam A. Kennington III TEST_F(AppendTest, RValueString) 159a1e9e2aeSWilliam A. Kennington III { 160a1e9e2aeSWilliam A. Kennington III expect_basic_string(SD_BUS_TYPE_STRING, "asdf"); 161a1e9e2aeSWilliam A. Kennington III new_message().append(std::string{"asdf"}); 162a1e9e2aeSWilliam A. Kennington III } 163a1e9e2aeSWilliam A. Kennington III 164a1e9e2aeSWilliam A. Kennington III TEST_F(AppendTest, LValueString) 165a1e9e2aeSWilliam A. Kennington III { 166a1e9e2aeSWilliam A. Kennington III std::string s{"asdf"}; 167a1e9e2aeSWilliam A. Kennington III expect_basic_string(SD_BUS_TYPE_STRING, s.c_str()); 168a1e9e2aeSWilliam A. Kennington III new_message().append(s); 169a1e9e2aeSWilliam A. Kennington III } 170a1e9e2aeSWilliam A. Kennington III 171a1e9e2aeSWilliam A. Kennington III TEST_F(AppendTest, XValueString) 172a1e9e2aeSWilliam A. Kennington III { 173a1e9e2aeSWilliam A. Kennington III std::string s{"asdf"}; 174a1e9e2aeSWilliam A. Kennington III expect_basic_string(SD_BUS_TYPE_STRING, s.c_str()); 175a1e9e2aeSWilliam A. Kennington III new_message().append(std::move(s)); 176a1e9e2aeSWilliam A. Kennington III } 177a1e9e2aeSWilliam A. Kennington III 178a1e9e2aeSWilliam A. Kennington III TEST_F(AppendTest, ObjectPath) 179a1e9e2aeSWilliam A. Kennington III { 180a1e9e2aeSWilliam A. Kennington III sdbusplus::message::object_path o{"/asdf"}; 181a1e9e2aeSWilliam A. Kennington III expect_basic_string(SD_BUS_TYPE_OBJECT_PATH, o.str.c_str()); 182a1e9e2aeSWilliam A. Kennington III new_message().append(o); 183a1e9e2aeSWilliam A. Kennington III } 184a1e9e2aeSWilliam A. Kennington III 185a1e9e2aeSWilliam A. Kennington III TEST_F(AppendTest, Signature) 186a1e9e2aeSWilliam A. Kennington III { 187a1e9e2aeSWilliam A. Kennington III sdbusplus::message::signature g{"ii"}; 188a1e9e2aeSWilliam A. Kennington III expect_basic_string(SD_BUS_TYPE_SIGNATURE, g.str.c_str()); 189a1e9e2aeSWilliam A. Kennington III new_message().append(g); 190a1e9e2aeSWilliam A. Kennington III } 191a1e9e2aeSWilliam A. Kennington III 192a1e9e2aeSWilliam A. Kennington III TEST_F(AppendTest, CombinedBasic) 193a1e9e2aeSWilliam A. Kennington III { 194a1e9e2aeSWilliam A. Kennington III const int c = 3; 195a1e9e2aeSWilliam A. Kennington III const std::string s1{"fdsa"}; 196a1e9e2aeSWilliam A. Kennington III const char *const s2 = "asdf"; 197a1e9e2aeSWilliam A. Kennington III 198a1e9e2aeSWilliam A. Kennington III { 199a1e9e2aeSWilliam A. Kennington III testing::InSequence seq; 200a1e9e2aeSWilliam A. Kennington III expect_basic<int>(SD_BUS_TYPE_INT32, 1); 201a1e9e2aeSWilliam A. Kennington III expect_basic<double>(SD_BUS_TYPE_DOUBLE, 2.2); 202a1e9e2aeSWilliam A. Kennington III expect_basic<int>(SD_BUS_TYPE_INT32, c); 203a1e9e2aeSWilliam A. Kennington III expect_basic_string(SD_BUS_TYPE_STRING, s1.c_str()); 204a1e9e2aeSWilliam A. Kennington III expect_basic<int>(SD_BUS_TYPE_BOOLEAN, false); 205a1e9e2aeSWilliam A. Kennington III expect_basic_string(SD_BUS_TYPE_STRING, s2); 206a1e9e2aeSWilliam A. Kennington III } 207a1e9e2aeSWilliam A. Kennington III new_message().append(1, 2.2, c, s1, false, s2); 208a1e9e2aeSWilliam A. Kennington III } 209a1e9e2aeSWilliam A. Kennington III 210a1e9e2aeSWilliam A. Kennington III TEST_F(AppendTest, Array) 211a1e9e2aeSWilliam A. Kennington III { 212a1e9e2aeSWilliam A. Kennington III const std::array<double, 4> a{1.1, 2.2, 3.3, 4.4}; 213a1e9e2aeSWilliam A. Kennington III 214a1e9e2aeSWilliam A. Kennington III { 215a1e9e2aeSWilliam A. Kennington III testing::InSequence seq; 216a1e9e2aeSWilliam A. Kennington III expect_open_container(SD_BUS_TYPE_ARRAY, "d"); 217a1e9e2aeSWilliam A. Kennington III for (const auto &i : a) 218a1e9e2aeSWilliam A. Kennington III { 219a1e9e2aeSWilliam A. Kennington III expect_basic<double>(SD_BUS_TYPE_DOUBLE, i); 220a1e9e2aeSWilliam A. Kennington III } 221a1e9e2aeSWilliam A. Kennington III expect_close_container(); 222a1e9e2aeSWilliam A. Kennington III } 223a1e9e2aeSWilliam A. Kennington III new_message().append(a); 224a1e9e2aeSWilliam A. Kennington III } 225a1e9e2aeSWilliam A. Kennington III 226a1e9e2aeSWilliam A. Kennington III TEST_F(AppendTest, Vector) 227a1e9e2aeSWilliam A. Kennington III { 228a1e9e2aeSWilliam A. Kennington III const std::vector<int> v{1, 2, 3, 4}; 229a1e9e2aeSWilliam A. Kennington III 230a1e9e2aeSWilliam A. Kennington III { 231a1e9e2aeSWilliam A. Kennington III testing::InSequence seq; 232a1e9e2aeSWilliam A. Kennington III expect_open_container(SD_BUS_TYPE_ARRAY, "i"); 233a1e9e2aeSWilliam A. Kennington III for (const auto &i : v) 234a1e9e2aeSWilliam A. Kennington III { 235a1e9e2aeSWilliam A. Kennington III expect_basic<int>(SD_BUS_TYPE_INT32, i); 236a1e9e2aeSWilliam A. Kennington III } 237a1e9e2aeSWilliam A. Kennington III expect_close_container(); 238a1e9e2aeSWilliam A. Kennington III } 239a1e9e2aeSWilliam A. Kennington III new_message().append(v); 240a1e9e2aeSWilliam A. Kennington III } 241a1e9e2aeSWilliam A. Kennington III 242a1e9e2aeSWilliam A. Kennington III TEST_F(AppendTest, Set) 243a1e9e2aeSWilliam A. Kennington III { 244a1e9e2aeSWilliam A. Kennington III const std::set<std::string> s{"one", "two", "eight"}; 245a1e9e2aeSWilliam A. Kennington III 246a1e9e2aeSWilliam A. Kennington III { 247a1e9e2aeSWilliam A. Kennington III testing::InSequence seq; 248a1e9e2aeSWilliam A. Kennington III expect_open_container(SD_BUS_TYPE_ARRAY, "s"); 249a1e9e2aeSWilliam A. Kennington III for (const auto &i : s) 250a1e9e2aeSWilliam A. Kennington III { 251a1e9e2aeSWilliam A. Kennington III expect_basic_string(SD_BUS_TYPE_STRING, i.c_str()); 252a1e9e2aeSWilliam A. Kennington III } 253a1e9e2aeSWilliam A. Kennington III expect_close_container(); 254a1e9e2aeSWilliam A. Kennington III } 255a1e9e2aeSWilliam A. Kennington III new_message().append(s); 256a1e9e2aeSWilliam A. Kennington III } 257a1e9e2aeSWilliam A. Kennington III 258a1e9e2aeSWilliam A. Kennington III TEST_F(AppendTest, Map) 259a1e9e2aeSWilliam A. Kennington III { 260a1e9e2aeSWilliam A. Kennington III const std::map<int, std::string> m{ 261a1e9e2aeSWilliam A. Kennington III {1, "a"}, 262a1e9e2aeSWilliam A. Kennington III {2, "bc"}, 263a1e9e2aeSWilliam A. Kennington III {3, "def"}, 264a1e9e2aeSWilliam A. Kennington III {4, "ghij"}, 265a1e9e2aeSWilliam A. Kennington III }; 266a1e9e2aeSWilliam A. Kennington III 267a1e9e2aeSWilliam A. Kennington III { 268a1e9e2aeSWilliam A. Kennington III testing::InSequence seq; 269a1e9e2aeSWilliam A. Kennington III expect_open_container(SD_BUS_TYPE_ARRAY, "{is}"); 270a1e9e2aeSWilliam A. Kennington III for (const auto &i : m) 271a1e9e2aeSWilliam A. Kennington III { 272a1e9e2aeSWilliam A. Kennington III expect_open_container(SD_BUS_TYPE_DICT_ENTRY, "is"); 273a1e9e2aeSWilliam A. Kennington III expect_basic<int>(SD_BUS_TYPE_INT32, i.first); 274a1e9e2aeSWilliam A. Kennington III expect_basic_string(SD_BUS_TYPE_STRING, i.second.c_str()); 275a1e9e2aeSWilliam A. Kennington III expect_close_container(); 276a1e9e2aeSWilliam A. Kennington III } 277a1e9e2aeSWilliam A. Kennington III expect_close_container(); 278a1e9e2aeSWilliam A. Kennington III } 279a1e9e2aeSWilliam A. Kennington III new_message().append(m); 280a1e9e2aeSWilliam A. Kennington III } 281a1e9e2aeSWilliam A. Kennington III 282a1e9e2aeSWilliam A. Kennington III TEST_F(AppendTest, UnorderedMap) 283a1e9e2aeSWilliam A. Kennington III { 284a1e9e2aeSWilliam A. Kennington III const std::unordered_map<int, bool> m{ 285a1e9e2aeSWilliam A. Kennington III {1, false}, 286a1e9e2aeSWilliam A. Kennington III {2, true}, 287a1e9e2aeSWilliam A. Kennington III {3, true}, 288a1e9e2aeSWilliam A. Kennington III {4, false}, 289a1e9e2aeSWilliam A. Kennington III }; 290a1e9e2aeSWilliam A. Kennington III 291a1e9e2aeSWilliam A. Kennington III { 292a1e9e2aeSWilliam A. Kennington III testing::InSequence seq; 293a1e9e2aeSWilliam A. Kennington III expect_open_container(SD_BUS_TYPE_ARRAY, "{ib}"); 294a1e9e2aeSWilliam A. Kennington III for (const auto &i : m) 295a1e9e2aeSWilliam A. Kennington III { 296a1e9e2aeSWilliam A. Kennington III expect_open_container(SD_BUS_TYPE_DICT_ENTRY, "ib"); 297a1e9e2aeSWilliam A. Kennington III expect_basic<int>(SD_BUS_TYPE_INT32, i.first); 298a1e9e2aeSWilliam A. Kennington III expect_basic<int>(SD_BUS_TYPE_BOOLEAN, i.second); 299a1e9e2aeSWilliam A. Kennington III expect_close_container(); 300a1e9e2aeSWilliam A. Kennington III } 301a1e9e2aeSWilliam A. Kennington III expect_close_container(); 302a1e9e2aeSWilliam A. Kennington III } 303a1e9e2aeSWilliam A. Kennington III new_message().append(m); 304a1e9e2aeSWilliam A. Kennington III } 305a1e9e2aeSWilliam A. Kennington III 306a1e9e2aeSWilliam A. Kennington III TEST_F(AppendTest, Tuple) 307a1e9e2aeSWilliam A. Kennington III { 308a1e9e2aeSWilliam A. Kennington III const std::tuple<int, std::string, bool> t{5, "asdf", false}; 309a1e9e2aeSWilliam A. Kennington III 310a1e9e2aeSWilliam A. Kennington III { 311a1e9e2aeSWilliam A. Kennington III testing::InSequence seq; 312a1e9e2aeSWilliam A. Kennington III expect_open_container(SD_BUS_TYPE_STRUCT, "isb"); 313a1e9e2aeSWilliam A. Kennington III expect_basic<int>(SD_BUS_TYPE_INT32, std::get<0>(t)); 314a1e9e2aeSWilliam A. Kennington III expect_basic_string(SD_BUS_TYPE_STRING, std::get<1>(t).c_str()); 315a1e9e2aeSWilliam A. Kennington III expect_basic<int>(SD_BUS_TYPE_BOOLEAN, std::get<2>(t)); 316a1e9e2aeSWilliam A. Kennington III expect_close_container(); 317a1e9e2aeSWilliam A. Kennington III } 318a1e9e2aeSWilliam A. Kennington III new_message().append(t); 319a1e9e2aeSWilliam A. Kennington III } 320a1e9e2aeSWilliam A. Kennington III 321a1e9e2aeSWilliam A. Kennington III TEST_F(AppendTest, Variant) 322a1e9e2aeSWilliam A. Kennington III { 323a1e9e2aeSWilliam A. Kennington III const bool b1 = false; 324a1e9e2aeSWilliam A. Kennington III const std::string s2{"asdf"}; 325a1e9e2aeSWilliam A. Kennington III const sdbusplus::message::variant<int, std::string, bool> v1{b1}, v2{s2}; 326a1e9e2aeSWilliam A. Kennington III 327a1e9e2aeSWilliam A. Kennington III { 328a1e9e2aeSWilliam A. Kennington III testing::InSequence seq; 329a1e9e2aeSWilliam A. Kennington III expect_open_container(SD_BUS_TYPE_VARIANT, "b"); 330a1e9e2aeSWilliam A. Kennington III expect_basic<int>(SD_BUS_TYPE_BOOLEAN, b1); 331a1e9e2aeSWilliam A. Kennington III expect_close_container(); 332a1e9e2aeSWilliam A. Kennington III expect_open_container(SD_BUS_TYPE_VARIANT, "s"); 333a1e9e2aeSWilliam A. Kennington III expect_basic_string(SD_BUS_TYPE_STRING, s2.c_str()); 334a1e9e2aeSWilliam A. Kennington III expect_close_container(); 335a1e9e2aeSWilliam A. Kennington III } 336a1e9e2aeSWilliam A. Kennington III new_message().append(v1, v2); 337a1e9e2aeSWilliam A. Kennington III } 338a1e9e2aeSWilliam A. Kennington III 339a1e9e2aeSWilliam A. Kennington III TEST_F(AppendTest, LargeCombo) 340a1e9e2aeSWilliam A. Kennington III { 341a1e9e2aeSWilliam A. Kennington III std::vector<std::array<std::string, 3>> vas{{"a", "b", "c"}, 342a1e9e2aeSWilliam A. Kennington III {"d", "", "e"}}; 343a1e9e2aeSWilliam A. Kennington III std::map<std::string, sdbusplus::message::variant<int, double>> msv = { 344a1e9e2aeSWilliam A. Kennington III {"a", 3.3}, {"b", 1}, {"c", 4.4}}; 345a1e9e2aeSWilliam A. Kennington III 346a1e9e2aeSWilliam A. Kennington III { 347a1e9e2aeSWilliam A. Kennington III testing::InSequence seq; 348a1e9e2aeSWilliam A. Kennington III 349a1e9e2aeSWilliam A. Kennington III expect_open_container(SD_BUS_TYPE_ARRAY, "as"); 350a1e9e2aeSWilliam A. Kennington III for (const auto &as : vas) 351a1e9e2aeSWilliam A. Kennington III { 352a1e9e2aeSWilliam A. Kennington III expect_open_container(SD_BUS_TYPE_ARRAY, "s"); 353a1e9e2aeSWilliam A. Kennington III for (const auto &s : as) 354a1e9e2aeSWilliam A. Kennington III { 355a1e9e2aeSWilliam A. Kennington III expect_basic_string(SD_BUS_TYPE_STRING, s.c_str()); 356a1e9e2aeSWilliam A. Kennington III } 357a1e9e2aeSWilliam A. Kennington III expect_close_container(); 358a1e9e2aeSWilliam A. Kennington III } 359a1e9e2aeSWilliam A. Kennington III expect_close_container(); 360a1e9e2aeSWilliam A. Kennington III 361a1e9e2aeSWilliam A. Kennington III expect_open_container(SD_BUS_TYPE_ARRAY, "{sv}"); 362a1e9e2aeSWilliam A. Kennington III for (const auto &sv : msv) 363a1e9e2aeSWilliam A. Kennington III { 364a1e9e2aeSWilliam A. Kennington III expect_open_container(SD_BUS_TYPE_DICT_ENTRY, "sv"); 365a1e9e2aeSWilliam A. Kennington III expect_basic_string(SD_BUS_TYPE_STRING, sv.first.c_str()); 366a1e9e2aeSWilliam A. Kennington III if (sv.second.is<int>()) 367a1e9e2aeSWilliam A. Kennington III { 368a1e9e2aeSWilliam A. Kennington III expect_open_container(SD_BUS_TYPE_VARIANT, "i"); 369a1e9e2aeSWilliam A. Kennington III expect_basic<int>(SD_BUS_TYPE_INT32, sv.second.get<int>()); 370a1e9e2aeSWilliam A. Kennington III expect_close_container(); 37107e1d6f3SPatrick Williams } 37207e1d6f3SPatrick Williams else 37307e1d6f3SPatrick Williams { 374a1e9e2aeSWilliam A. Kennington III expect_open_container(SD_BUS_TYPE_VARIANT, "d"); 375a1e9e2aeSWilliam A. Kennington III expect_basic<double>(SD_BUS_TYPE_DOUBLE, 376a1e9e2aeSWilliam A. Kennington III sv.second.get<double>()); 377a1e9e2aeSWilliam A. Kennington III expect_close_container(); 37807e1d6f3SPatrick Williams } 379a1e9e2aeSWilliam A. Kennington III expect_close_container(); 3801807fa47SPatrick Williams } 381a1e9e2aeSWilliam A. Kennington III expect_close_container(); 382a1e9e2aeSWilliam A. Kennington III } 383a1e9e2aeSWilliam A. Kennington III new_message().append(vas, msv); 3841807fa47SPatrick Williams } 385b5645509SWilliam A. Kennington III 386a1e9e2aeSWilliam A. Kennington III } // namespace 387