Add testcases for property and property groups

Change-Id: I4b30d0729a704d6833c840ea08daeee961a5730b
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
diff --git a/src/test/propertygentest.cpp b/src/test/propertygentest.cpp
new file mode 100644
index 0000000..cf32191
--- /dev/null
+++ b/src/test/propertygentest.cpp
@@ -0,0 +1,156 @@
+#include <array>
+#include <string>
+#include <gtest/gtest.h>
+#include "data_types.hpp"
+
+using namespace std::string_literals;
+using namespace phosphor::dbus::monitoring;
+
+using Property =
+    TupleOfRefs <
+    const std::string,
+    const std::string,
+    const std::string >;
+
+using GroupOfProperties = std::vector<Property>;
+
+#include "propertygentest.hpp"
+const std::array<std::string, 3> expectedMeta =
+{
+    "property1"s,
+    "property2"s,
+    "property3"s,
+};
+
+const std::array<std::string, 4> expectedInterfaces =
+{
+    "xyz.openbmc_project.Test.Iface3"s,
+    "xyz.openbmc_project.Test.Iface2"s,
+    "xyz.openbmc_project.Test.Iface6"s,
+    "xyz.openbmc_project.Test.Iface1"s,
+};
+
+const std::array<std::string, 4> expectedProperties =
+{
+    "Foo"s,
+    "Value"s,
+    "Bar"s,
+    "Baz"s,
+};
+
+const std::array<GroupOfProperties, 4> expectedGroups =
+{
+    {
+        {
+            Property{ interfaces[0], properties[0], meta[0] },
+            Property{ interfaces[1], properties[1], meta[1] },
+        },
+        {
+            Property{ interfaces[0], properties[2], meta[0] },
+            Property{ interfaces[1], properties[0], meta[1] },
+        },
+        {
+            Property{ interfaces[2], properties[0], meta[0] },
+            Property{ interfaces[3], properties[1], meta[1] },
+        },
+        {
+            Property{ interfaces[0], properties[2], meta[0] },
+            Property{ interfaces[1], properties[1], meta[1] },
+            Property{ interfaces[2], properties[3], meta[2] },
+        },
+    }
+};
+
+const std::array<std::string, 4> expectedTypes =
+{
+    "uint32_t"s,
+    "int32_t"s,
+    "std::string"s,
+    "int32_t"s,
+};
+
+TEST(PropertyGenTest, MetaSameSize)
+{
+    ASSERT_EQ(sizeof(expectedMeta), sizeof(meta));
+}
+
+TEST(PropertyGenTest, IfacesSameSize)
+{
+    ASSERT_EQ(sizeof(expectedInterfaces), sizeof(interfaces));
+}
+
+TEST(PropertyGenTest, PropertiesSameSize)
+{
+    ASSERT_EQ(sizeof(expectedProperties), sizeof(properties));
+}
+
+TEST(PropertyGenTest, GroupsSameSize)
+{
+    ASSERT_EQ(sizeof(expectedGroups), sizeof(groups));
+}
+
+TEST(PropertyGenTest, TypesSameSize)
+{
+    ASSERT_EQ(sizeof(expectedTypes), sizeof(types));
+}
+
+TEST(PropertyGenTest, MetaSameContent)
+{
+    size_t i;
+    for (i = 0; i < expectedMeta.size(); ++i)
+    {
+        ASSERT_EQ(meta[i],
+                  expectedMeta[i]);
+    }
+}
+
+TEST(PropertyGenTest, IfacesSameContent)
+{
+    size_t i;
+    for (i = 0; i < expectedInterfaces.size(); ++i)
+    {
+        ASSERT_EQ(interfaces[i],
+                  expectedInterfaces[i]);
+    }
+}
+
+TEST(PropertyGenTest, PropertiesSameContent)
+{
+    size_t i;
+    for (i = 0; i < expectedProperties.size(); ++i)
+    {
+        ASSERT_EQ(expectedProperties[i], properties[i]);
+    }
+}
+
+TEST(PropertyGenTest, GroupsSameContent)
+{
+    size_t i;
+    for (i = 0; i < expectedGroups.size(); ++i)
+    {
+        size_t j;
+        for (j = 0; j < expectedGroups[i].size(); ++j)
+        {
+            const auto& expectedIface = std::get<0>(expectedGroups[i][j]).get();
+            const auto& actualIface = std::get<0>(groups[i][j]).get();
+            ASSERT_EQ(expectedIface, actualIface);
+
+            const auto& expectedProperty = std::get<1>(expectedGroups[i][j]).get();
+            const auto& actualProperty = std::get<1>(groups[i][j]).get();
+            ASSERT_EQ(expectedProperty, actualProperty);
+
+            const auto& expectedMeta = std::get<1>(expectedGroups[i][j]).get();
+            const auto& actualMeta = std::get<1>(groups[i][j]).get();
+            ASSERT_EQ(expectedMeta, actualMeta);
+        }
+    }
+}
+
+TEST(PropertyGenTest, TypesSameContent)
+{
+    size_t i;
+    for (i = 0; i < expectedTypes.size(); ++i)
+    {
+        ASSERT_EQ(expectedTypes[i], types[i]);
+    }
+}