/* 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 . */ #include #include #include #include #include "TestDomain.hpp" namespace ousia { namespace model { void assert_path(std::vector> &result, size_t idx, const RttiBase &expected_type, std::vector expected_path) { ASSERT_TRUE(result.size() > idx); // check class/type ASSERT_TRUE(result[idx]->isa(expected_type)); // cast to node Rooted n = result[idx].cast(); // extract actual path std::vector actual_path = n->path(); // check path ASSERT_EQ(expected_path, actual_path); } TEST(Domain, testDomainResolving) { // Construct Manager Logger logger; Manager mgr{1}; // Get the domain. Rooted domain = constructBookDomain(mgr, logger); /* * Start with the "book" search keyword. This should resolve to the domain * itself (because it is called "book"), as well as the structure "book" * node. */ std::vector> res = domain->resolve(std::vector{"book"}); // First we expect the book domain. assert_path(res, 0, typeOf(), {"book"}); // Then the book structure. assert_path(res, 1, typeOf(), {"book", "book"}); ASSERT_EQ(2, res.size()); /* * If we explicitly ask for the "book, book" path, then only the * StructuredClass should be returned. */ res = domain->resolve(std::vector{"book", "book"}); assert_path(res, 0, typeOf(), {"book", "book"}); ASSERT_EQ(1, res.size()); /* * If we ask for "section" the result should be unique as well. */ res = domain->resolve(std::vector{"section"}); // TODO: Is that the path result we want? assert_path(res, 0, typeOf(), {"book", "section"}); ASSERT_EQ(1, res.size()); /* * If we ask for the path "book", "book", "" we reference the * FieldDescriptor of the StructuredClass "book". */ res = domain->resolve(std::vector{"book", "book", ""}); assert_path(res, 0, typeOf(), {"book", "book", ""}); ASSERT_EQ(1, res.size()); /* * If we ask for "paragraph" it is references two times in the Domain graph, * but should be returned only once. */ res = domain->resolve("paragraph"); assert_path(res, 0, typeOf(), {"book", "paragraph"}); ASSERT_EQ(1, res.size()); } } }