54 lines
1.2 KiB
C++
54 lines
1.2 KiB
C++
#include <catch2/catch_test_macros.hpp>
|
|
|
|
#include "matador/object/schema.hpp"
|
|
|
|
struct node {};
|
|
|
|
using namespace matador;
|
|
|
|
struct person {
|
|
virtual ~person() = default;
|
|
template < typename Operator >
|
|
void process(Operator &/*op*/) {}
|
|
};
|
|
|
|
struct student final : person {};
|
|
struct teacher final : person {};
|
|
|
|
TEST_CASE("Test empty prototype tree", "[schema_node][empty]") {
|
|
const object::schema tree;
|
|
|
|
REQUIRE( tree.empty() );
|
|
}
|
|
|
|
TEST_CASE("Test add type to prototype tree", "[schema_node][add]") {
|
|
object::schema tree;
|
|
|
|
REQUIRE( tree.empty() );
|
|
|
|
auto res = tree.attach<person>("person");
|
|
REQUIRE( res.is_ok() );
|
|
res = tree.attach<student, person>("student");
|
|
REQUIRE( res.is_ok() );
|
|
res = tree.attach<teacher, person>("teacher");
|
|
REQUIRE( res.is_ok() );
|
|
|
|
REQUIRE( !tree.empty() );
|
|
REQUIRE( tree.size() == 3 );
|
|
}
|
|
|
|
TEST_CASE("Test next and previous of schema node", "[schema_node][next][previous]") {
|
|
object::schema tree;
|
|
|
|
REQUIRE( tree.empty() );
|
|
|
|
auto res = tree.attach<person>("person");
|
|
REQUIRE( res.is_ok() );
|
|
|
|
REQUIRE( tree.size() == 1 );
|
|
|
|
auto it = tree.begin();
|
|
REQUIRE( it->name() == "person" );
|
|
REQUIRE( (--it)->name() == "person" );
|
|
REQUIRE( ++it == tree.end() );
|
|
} |