diff options
Diffstat (limited to 'test/core/managed/ManagedTest.cpp')
-rw-r--r-- | test/core/managed/ManagedTest.cpp | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/test/core/managed/ManagedTest.cpp b/test/core/managed/ManagedTest.cpp new file mode 100644 index 0000000..f196770 --- /dev/null +++ b/test/core/managed/ManagedTest.cpp @@ -0,0 +1,123 @@ +/* + Ousía + Copyright (C) 2014, 2015 Benjamin Paaßen, Andreas Stöckel + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <gtest/gtest.h> + +#include <core/managed/Managed.hpp> + +#include "TestManaged.hpp" + +namespace ousia { + +TEST(Managed, data) +{ + Manager mgr{1}; + + Rooted<Managed> n{new Managed{mgr}}; + + Rooted<Managed> m1{new Managed{mgr}}; + n->storeData("info", m1); + ASSERT_TRUE(n->hasDataKey("info")); + ASSERT_FALSE(n->hasDataKey("test")); + + Rooted<Managed> m2{new Managed{mgr}}; + n->storeData("test", m2); + ASSERT_TRUE(n->hasDataKey("info")); + ASSERT_TRUE(n->hasDataKey("test")); + + ASSERT_TRUE(n->deleteData("info")); + ASSERT_FALSE(n->deleteData("info")); + ASSERT_FALSE(n->hasDataKey("info")); + ASSERT_TRUE(n->hasDataKey("test")); + + n->storeData("info2", m1); + + std::map<std::string, Rooted<Managed>> m = n->readData(); + ASSERT_TRUE(m.find("info2") != m.end()); + ASSERT_TRUE(m.find("test") != m.end()); + + ASSERT_EQ(m1, m.find("info2")->second); + ASSERT_EQ(m2, m.find("test")->second); +} + +class TypeTestManaged1 : public Managed { + using Managed::Managed; +}; + +class TypeTestManaged2 : public Managed { + using Managed::Managed; +}; + +class TypeTestManaged3 : public Managed { + using Managed::Managed; +}; + +class TypeTestManaged4 : public Managed { + using Managed::Managed; +}; + +class TypeTestManaged5 : public Managed { + using Managed::Managed; +}; + +ManagedType Type1("Type1", typeid(TypeTestManaged1)); +ManagedType Type2("Type2", typeid(TypeTestManaged2)); +ManagedType Type3("Type3", typeid(TypeTestManaged3), {&Type1}); +ManagedType Type4("Type2", typeid(TypeTestManaged4), {&Type3, &Type2}); + +TEST(ManagedType, isa) +{ + ASSERT_TRUE(Type1.isa(Type1)); + ASSERT_FALSE(Type1.isa(Type2)); + ASSERT_FALSE(Type1.isa(Type3)); + ASSERT_FALSE(Type1.isa(Type4)); + + ASSERT_FALSE(Type2.isa(Type1)); + ASSERT_TRUE(Type2.isa(Type2)); + ASSERT_FALSE(Type2.isa(Type3)); + ASSERT_FALSE(Type2.isa(Type4)); + + ASSERT_TRUE(Type3.isa(Type1)); + ASSERT_FALSE(Type3.isa(Type2)); + ASSERT_TRUE(Type3.isa(Type3)); + ASSERT_FALSE(Type3.isa(Type4)); + + ASSERT_TRUE(Type4.isa(Type1)); + ASSERT_TRUE(Type4.isa(Type2)); + ASSERT_TRUE(Type4.isa(Type3)); + ASSERT_TRUE(Type4.isa(Type4)); +} + +TEST(Managed, type) +{ + Manager mgr(1); + + Rooted<TypeTestManaged1> m1{new TypeTestManaged1(mgr)}; + Rooted<TypeTestManaged2> m2{new TypeTestManaged2(mgr)}; + Rooted<TypeTestManaged3> m3{new TypeTestManaged3(mgr)}; + Rooted<TypeTestManaged4> m4{new TypeTestManaged4(mgr)}; + Rooted<TypeTestManaged5> m5{new TypeTestManaged5(mgr)}; + + ASSERT_EQ(&Type1, &m1->type()); + ASSERT_EQ(&Type2, &m2->type()); + ASSERT_EQ(&Type3, &m3->type()); + ASSERT_EQ(&Type4, &m4->type()); + ASSERT_EQ(&ManagedType::None, &m5->type()); +} +} + |