blob: 530fbc31140e1163d56f08215073e12e8630e442 [file] [log] [blame]
Patrick Williams51103a42016-07-20 17:43:38 -05001#include <sdbusplus/message/types.hpp>
2#include <sdbusplus/utility/tuple_to_array.hpp>
3
Patrick Venture95269db2018-08-31 09:19:17 -07004#include <gtest/gtest.h>
5
Patrick Venture2b238af2018-08-31 12:45:01 -07006template <typename... Args>
Patrick Williams78b78032020-05-20 10:32:05 -05007auto dbus_string(Args&&... /*args*/)
Patrick Williams51103a42016-07-20 17:43:38 -05008{
Andrew Geissler072da3e2018-01-18 07:21:42 -08009 return std::string(sdbusplus::utility::tuple_to_array(
10 sdbusplus::message::types::type_id<Args...>())
11 .data());
Patrick Williams51103a42016-07-20 17:43:38 -050012}
13
Patrick Williams450d0ec2017-04-28 16:09:09 -050014TEST(MessageTypes, Integer)
Patrick Williams51103a42016-07-20 17:43:38 -050015{
Andrew Geissler072da3e2018-01-18 07:21:42 -080016 ASSERT_EQ(dbus_string(1), "i");
Patrick Williams450d0ec2017-04-28 16:09:09 -050017}
Patrick Williams51103a42016-07-20 17:43:38 -050018
Patrick Williams450d0ec2017-04-28 16:09:09 -050019TEST(MessageTypes, Double)
20{
21 ASSERT_EQ(dbus_string(1.0), "d");
22}
Patrick Williams51103a42016-07-20 17:43:38 -050023
Patrick Williams450d0ec2017-04-28 16:09:09 -050024TEST(MessageTypes, MultipleParameter)
25{
26 ASSERT_EQ(dbus_string(false, true), "bb");
27 ASSERT_EQ(dbus_string(1, 2, 3, true, 1.0), "iiibd");
28}
Patrick Williams51103a42016-07-20 17:43:38 -050029
Patrick Williams450d0ec2017-04-28 16:09:09 -050030TEST(MessageTypes, StringReferences)
31{
32 std::string a = "a";
33 std::string b = "b";
34 const char* c = "c";
Patrick Williams51103a42016-07-20 17:43:38 -050035
Patrick Williams450d0ec2017-04-28 16:09:09 -050036 ASSERT_EQ(dbus_string(a, std::move(b), c), "sss");
37}
Patrick Williams44982982017-01-06 16:02:37 -060038
Patrick Williams450d0ec2017-04-28 16:09:09 -050039TEST(MessageTypes, ObjectPath)
40{
41 ASSERT_EQ(dbus_string(sdbusplus::message::object_path("/asdf")), "o");
42}
Patrick Williams44982982017-01-06 16:02:37 -060043
Ed Tanousfa0fa3b2021-03-31 17:14:57 -070044TEST(MessageTypes, ObjectPathFilename)
Ed Tanouseb4bd722020-12-18 00:25:21 +000045{
46 ASSERT_EQ(sdbusplus::message::object_path("/abc/def").filename(), "def");
47 ASSERT_EQ(sdbusplus::message::object_path("/abc/").filename(), "");
48 ASSERT_EQ(sdbusplus::message::object_path("/abc").filename(), "abc");
49 ASSERT_EQ(sdbusplus::message::object_path("/").filename(), "");
50 ASSERT_EQ(sdbusplus::message::object_path("").filename(), "");
51 ASSERT_EQ(sdbusplus::message::object_path("abc").filename(), "");
Ed Tanousfa0fa3b2021-03-31 17:14:57 -070052 ASSERT_EQ(sdbusplus::message::object_path("/_2d").filename(), "-");
53 ASSERT_EQ(sdbusplus::message::object_path("/_20").filename(), " ");
54 ASSERT_EQ(sdbusplus::message::object_path("/_2F").filename(), "/");
Ed Tanouseb4bd722020-12-18 00:25:21 +000055}
56
57TEST(MessageTypes, ObjectPathParent)
58{
59 ASSERT_EQ(sdbusplus::message::object_path("/abc/def").parent_path(),
60 sdbusplus::message::object_path("/abc"));
61 ASSERT_EQ(sdbusplus::message::object_path("/abc/").parent_path(),
62 sdbusplus::message::object_path("/abc"));
63 ASSERT_EQ(sdbusplus::message::object_path("/abc").parent_path(),
64 sdbusplus::message::object_path("/"));
65 ASSERT_EQ(sdbusplus::message::object_path("/").parent_path(),
66 sdbusplus::message::object_path("/"));
67}
68
Ed Tanousfa0fa3b2021-03-31 17:14:57 -070069TEST(MessageTypes, ObjectPathOperatorSlash)
70{
71 ASSERT_EQ(sdbusplus::message::object_path("/") / "abc",
72 sdbusplus::message::object_path("/abc"));
73 ASSERT_EQ(sdbusplus::message::object_path("/abc") / "def",
74 sdbusplus::message::object_path("/abc/def"));
75 ASSERT_EQ(sdbusplus::message::object_path("/abc") / "-",
76 sdbusplus::message::object_path("/abc/_2d"));
77 ASSERT_EQ(sdbusplus::message::object_path("/abc") / " ",
78 sdbusplus::message::object_path("/abc/_20"));
79 ASSERT_EQ(sdbusplus::message::object_path("/abc") / "/",
80 sdbusplus::message::object_path("/abc/_2f"));
81
82 // Test the std::string overload. This is largely just for coverage
83 ASSERT_EQ(sdbusplus::message::object_path("/") / std::string("abc"),
84 sdbusplus::message::object_path("/abc"));
85}
86
Ed Tanous74a27112021-04-07 15:40:00 -070087TEST(MessageTypes, ObjectPathOperatorSlashEqual)
88{
89 sdbusplus::message::object_path path("/");
90 path /= "abc";
91 ASSERT_EQ(path, sdbusplus::message::object_path("/abc"));
92
93 sdbusplus::message::object_path path2("/");
94 path2 /= std::string("def");
95 ASSERT_EQ(path2, sdbusplus::message::object_path("/def"));
96}
97
Patrick Williams450d0ec2017-04-28 16:09:09 -050098TEST(MessageTypes, Signature)
99{
100 ASSERT_EQ(dbus_string(sdbusplus::message::signature("sss")), "g");
Patrick Williams51103a42016-07-20 17:43:38 -0500101}
Patrick Williamsb98bdc62020-06-16 16:15:40 -0500102
103TEST(MessageTypes, VectorOfString)
104{
105 std::vector<std::string> s = {"a", "b"};
106
107 ASSERT_EQ(dbus_string(s), "as");
108}
109
110TEST(MessageTypes, SetOfString)
111{
112 std::set<std::string> s = {"a", "b"};
113
114 ASSERT_EQ(dbus_string(s), "as");
115}