#include "bej_tree.h" #include #include #include namespace libbej { TEST(BejTreeTest, InitSet) { const char* name = "SomeProperty"; struct RedfishPropertyParent node; bejTreeInitSet(&node, name); EXPECT_THAT(node.nodeAttr.name, name); EXPECT_THAT(node.nodeAttr.format.principalDataType, bejSet); EXPECT_THAT(node.nodeAttr.format.deferredBinding, 0); EXPECT_THAT(node.nodeAttr.format.readOnlyProperty, 0); EXPECT_THAT(node.nodeAttr.format.nullableProperty, 0); EXPECT_THAT(node.nodeAttr.sibling, nullptr); EXPECT_THAT(node.nChildren, 0); EXPECT_THAT(node.firstChild, nullptr); EXPECT_THAT(node.lastChild, nullptr); } TEST(BejTreeTest, InitArray) { const char* name = "SomeProperty"; struct RedfishPropertyParent node; bejTreeInitArray(&node, name); EXPECT_THAT(node.nodeAttr.name, name); EXPECT_THAT(node.nodeAttr.format.principalDataType, bejArray); EXPECT_THAT(node.nodeAttr.format.deferredBinding, 0); EXPECT_THAT(node.nodeAttr.format.readOnlyProperty, 0); EXPECT_THAT(node.nodeAttr.format.nullableProperty, 0); EXPECT_THAT(node.nodeAttr.sibling, nullptr); EXPECT_THAT(node.nChildren, 0); EXPECT_THAT(node.firstChild, nullptr); EXPECT_THAT(node.lastChild, nullptr); } TEST(BejTreeTest, InitAnnotatedProp) { const char* name = "SomeProperty"; struct RedfishPropertyParent node; bejTreeInitPropertyAnnotated(&node, name); EXPECT_THAT(node.nodeAttr.name, name); EXPECT_THAT(node.nodeAttr.format.principalDataType, bejPropertyAnnotation); EXPECT_THAT(node.nodeAttr.format.deferredBinding, 0); EXPECT_THAT(node.nodeAttr.format.readOnlyProperty, 0); EXPECT_THAT(node.nodeAttr.format.nullableProperty, 0); EXPECT_THAT(node.nodeAttr.sibling, nullptr); EXPECT_THAT(node.nChildren, 0); EXPECT_THAT(node.firstChild, nullptr); EXPECT_THAT(node.lastChild, nullptr); } TEST(BejTreeTest, ChildLinking) { struct RedfishPropertyParent parent; struct RedfishPropertyLeafInt child1; struct RedfishPropertyLeafInt child2; bejTreeInitSet(&parent, nullptr); EXPECT_THAT(parent.nChildren, 0); EXPECT_THAT(parent.firstChild, nullptr); EXPECT_THAT(parent.lastChild, nullptr); bejTreeAddInteger(&parent, &child1, nullptr, 1024); EXPECT_THAT(parent.nChildren, 1); EXPECT_THAT(parent.firstChild, &child1); EXPECT_THAT(parent.lastChild, &child1); bejTreeAddInteger(&parent, &child2, nullptr, 20); EXPECT_THAT(parent.nChildren, 2); EXPECT_THAT(parent.firstChild, &child1); EXPECT_THAT(parent.lastChild, &child2); // child2 should be a sibling of child1. EXPECT_THAT(child1.leaf.nodeAttr.sibling, &child2); } TEST(BejTreeTest, AddInteger) { const char* name = "SomeProperty"; struct RedfishPropertyParent parent; struct RedfishPropertyLeafInt child; bejTreeInitSet(&parent, nullptr); bejTreeAddInteger(&parent, &child, name, 1024); EXPECT_THAT(child.leaf.nodeAttr.name, name); EXPECT_THAT(child.leaf.nodeAttr.format.principalDataType, bejInteger); EXPECT_THAT(child.leaf.nodeAttr.format.deferredBinding, 0); EXPECT_THAT(child.leaf.nodeAttr.format.readOnlyProperty, 0); EXPECT_THAT(child.leaf.nodeAttr.format.nullableProperty, 0); EXPECT_THAT(child.leaf.nodeAttr.sibling, nullptr); EXPECT_THAT(child.value, 1024); } TEST(BejTreeTest, SetInteger) { const char* name = "SomeProperty"; struct RedfishPropertyParent parent; struct RedfishPropertyLeafInt child; bejTreeInitSet(&parent, nullptr); bejTreeAddInteger(&parent, &child, name, 1024); EXPECT_THAT(child.value, 1024); bejTreeSetInteger(&child, 20); EXPECT_THAT(child.value, 20); } TEST(BejTreeTest, AddEnum) { const char* name = "SomeProperty"; const char* enumValue = "EnumValue"; struct RedfishPropertyParent parent; struct RedfishPropertyLeafEnum child; bejTreeInitSet(&parent, nullptr); bejTreeAddEnum(&parent, &child, name, enumValue); EXPECT_THAT(child.leaf.nodeAttr.name, name); EXPECT_THAT(child.leaf.nodeAttr.format.principalDataType, bejEnum); EXPECT_THAT(child.leaf.nodeAttr.format.deferredBinding, 0); EXPECT_THAT(child.leaf.nodeAttr.format.readOnlyProperty, 0); EXPECT_THAT(child.leaf.nodeAttr.format.nullableProperty, 0); EXPECT_THAT(child.leaf.nodeAttr.sibling, nullptr); EXPECT_THAT(child.value, enumValue); } TEST(BejTreeTest, AddString) { const char* name = "SomeProperty"; const char* stringValue = "StringValue"; struct RedfishPropertyParent parent; struct RedfishPropertyLeafString child; bejTreeInitSet(&parent, nullptr); bejTreeAddString(&parent, &child, name, stringValue); EXPECT_THAT(child.leaf.nodeAttr.name, name); EXPECT_THAT(child.leaf.nodeAttr.format.principalDataType, bejString); EXPECT_THAT(child.leaf.nodeAttr.format.deferredBinding, 0); EXPECT_THAT(child.leaf.nodeAttr.format.readOnlyProperty, 0); EXPECT_THAT(child.leaf.nodeAttr.format.nullableProperty, 0); EXPECT_THAT(child.leaf.nodeAttr.sibling, nullptr); EXPECT_THAT(child.value, stringValue); } TEST(BejTreeTest, AddReal) { const char* name = "SomeProperty"; double value = 10.50; struct RedfishPropertyParent parent; struct RedfishPropertyLeafReal child; bejTreeInitSet(&parent, nullptr); bejTreeAddReal(&parent, &child, name, value); EXPECT_THAT(child.leaf.nodeAttr.name, name); EXPECT_THAT(child.leaf.nodeAttr.format.principalDataType, bejReal); EXPECT_THAT(child.leaf.nodeAttr.format.deferredBinding, 0); EXPECT_THAT(child.leaf.nodeAttr.format.readOnlyProperty, 0); EXPECT_THAT(child.leaf.nodeAttr.format.nullableProperty, 0); EXPECT_THAT(child.leaf.nodeAttr.sibling, nullptr); EXPECT_THAT(child.value, value); } TEST(BejTreeTest, AddBool) { const char* name = "SomeProperty"; bool value = true; struct RedfishPropertyParent parent; struct RedfishPropertyLeafBool child; bejTreeInitSet(&parent, nullptr); bejTreeAddBool(&parent, &child, name, value); EXPECT_THAT(child.leaf.nodeAttr.name, name); EXPECT_THAT(child.leaf.nodeAttr.format.principalDataType, bejBoolean); EXPECT_THAT(child.leaf.nodeAttr.format.deferredBinding, 0); EXPECT_THAT(child.leaf.nodeAttr.format.readOnlyProperty, 0); EXPECT_THAT(child.leaf.nodeAttr.format.nullableProperty, 0); EXPECT_THAT(child.leaf.nodeAttr.sibling, nullptr); EXPECT_THAT(child.value, value); } TEST(BejTreeTest, NodeFlags) { struct RedfishPropertyParent parent; bejTreeInitSet(&parent, nullptr); EXPECT_THAT(parent.nodeAttr.format.deferredBinding, 0); EXPECT_THAT(parent.nodeAttr.format.readOnlyProperty, 0); EXPECT_THAT(parent.nodeAttr.format.nullableProperty, 0); bejTreeUpdateNodeFlags(&parent.nodeAttr, true, true, true); EXPECT_THAT(parent.nodeAttr.format.deferredBinding, 1); EXPECT_THAT(parent.nodeAttr.format.readOnlyProperty, 1); EXPECT_THAT(parent.nodeAttr.format.nullableProperty, 1); } TEST(BejTreeTest, NodeType) { struct RedfishPropertyParent parent; struct RedfishPropertyLeafBool child1; struct RedfishPropertyLeafReal child2; bejTreeInitSet(&parent, nullptr); bejTreeAddBool(&parent, &child1, nullptr, true); bejTreeAddReal(&parent, &child2, nullptr, 10.5); EXPECT_THAT(bejTreeIsParentType(&parent.nodeAttr), true); EXPECT_THAT(bejTreeIsParentType(&child1.leaf.nodeAttr), false); EXPECT_THAT(bejTreeIsParentType(&child2.leaf.nodeAttr), false); } } // namespace libbej