| #ifndef _MAPCREATEDELETE_H |
| #define _MAPCREATEDELETE_H |
| |
| #include <gtest/gtest.h> |
| |
| #include <BaSyx/shared/types.h> |
| |
| #include <BaSyx/vab/core/IModelProvider.h> |
| |
| #include "macros.h" |
| |
| |
| namespace basyx { |
| namespace tests { |
| namespace regression { |
| namespace vab { |
| namespace snippet { |
| |
| class MapCreateDelete { |
| public: |
| static void test(basyx::vab::core::IModelProvider * modelProvider) |
| { |
| testCreateElements(modelProvider); |
| testDeleteElements(modelProvider); |
| } |
| private: |
| static void testCreateElements(basyx::vab::core::IModelProvider * modelProvider) |
| { |
| // Create property directly in root element |
| modelProvider->createValue("inRoot", 1.2); |
| basyx::object toTest = modelProvider->getModelPropertyValue("inRoot"); |
| ASSERT_ANY_EQ(toTest, 1.2); |
| |
| // Create element in Map (with new key contained in the path) |
| modelProvider->createValue("/structure/map/inMap", std::string{ "34" }); |
| toTest = modelProvider->getModelPropertyValue("/structure/map/inMap"); |
| ASSERT_ANY_EQ(toTest, std::string{ "34" }); |
| |
| // Create map element |
| basyx::object::object_map_t newMap; |
| newMap.emplace("entryA", 3); |
| newMap.emplace("entryB", 4); |
| modelProvider->createValue("mapInRoot", newMap); |
| toTest = modelProvider->getModelPropertyValue("mapInRoot"); |
| |
| ASSERT_TRUE(toTest.InstanceOf<basyx::object::object_map_t>()); |
| ASSERT_EQ(toTest.Get<basyx::object::object_map_t&>().size(), 2); |
| ASSERT_ANY_EQ(toTest.Get<basyx::object::object_map_t&>().at("entryA"), 3); |
| |
| // Try to overwrite existing element (should throw Exception, already exists) |
| auto overwriteError = modelProvider->createValue("inRoot", 0); |
| ASSERT_EQ(overwriteError, basyx::object::error::ObjectAlreadyExists); |
| toTest = modelProvider->getModelPropertyValue("inRoot"); |
| ASSERT_ANY_EQ(toTest, 1.2); |
| |
| // Check case-sensitivity |
| modelProvider->createValue("inroot", 78); |
| toTest = modelProvider->getModelPropertyValue("inRoot"); |
| ASSERT_ANY_EQ(toTest, 1.2); |
| toTest = modelProvider->getModelPropertyValue("inroot"); |
| ASSERT_ANY_EQ(toTest, 78); |
| |
| // Non-existing parent element |
| modelProvider->createValue("unkown/x", 5); |
| toTest = modelProvider->getModelPropertyValue("unknown/x"); |
| ASSERT_TRUE(toTest.IsNull()); |
| ASSERT_TRUE(toTest.IsError()); |
| ASSERT_EQ(toTest.getError(), basyx::object::error::PropertyNotFound); |
| |
| // Empty paths - should execute, but has no effect |
| auto emptyPathError = modelProvider->createValue("", std::string("")); |
| ASSERT_EQ(emptyPathError, basyx::object::error::ObjectAlreadyExists); |
| } |
| |
| static void testDeleteElements(basyx::vab::core::IModelProvider * modelProvider) |
| { |
| // Delete at Root |
| // - by basyx::object - should not work, root is a map |
| modelProvider->deleteValue("inRoot", 1.2); |
| basyx::object toTest = modelProvider->getModelPropertyValue("inRoot"); |
| ASSERT_ANY_EQ(toTest, 1.2); |
| // - by index |
| modelProvider->deleteValue("inRoot"); |
| toTest = modelProvider->getModelPropertyValue("inRoot"); |
| ASSERT_TRUE(toTest.IsNull()); |
| |
| // Check case-sensitivity |
| toTest = modelProvider->getModelPropertyValue("inroot"); |
| ASSERT_ANY_EQ(toTest, 78); |
| modelProvider->deleteValue("inroot"); |
| toTest = modelProvider->getModelPropertyValue("inroot"); |
| ASSERT_TRUE(toTest.IsNull()); |
| |
| // Delete at Map |
| // - by basyx::object - should not work in maps, because basyx::object refers to a contained basyx::object, not the index |
| modelProvider->deleteValue("/structure/map/", "inMap"); |
| toTest = modelProvider->getModelPropertyValue("/structure/map/inMap"); |
| ASSERT_ANY_EQ(toTest, std::string("34")); |
| // - by index |
| modelProvider->deleteValue("/structure/map/inMap"); |
| toTest = modelProvider->getModelPropertyValue("/structure/map"); |
| ASSERT_TRUE(toTest.InstanceOf<basyx::object::object_map_t>()); |
| ASSERT_EQ(toTest.Get<basyx::object::object_map_t&>().size(), 0); |
| |
| // Delete remaining complete Map |
| modelProvider->deleteValue("mapInRoot"); |
| toTest = modelProvider->getModelPropertyValue("mapInRoot"); |
| ASSERT_TRUE(toTest.IsNull()); |
| |
| // Empty paths - should not delete anything |
| modelProvider->deleteValue("", ""); |
| toTest = modelProvider->getModelPropertyValue("/primitives/integer"); |
| ASSERT_ANY_EQ(toTest, 123); |
| } |
| |
| }; |
| |
| } |
| } |
| } |
| } |
| } |
| |
| #endif /* _MAPCREATEDELETE_H */ |