2
0
mirror of https://github.com/boostorg/fiber.git synced 2026-02-20 02:32:19 +00:00
Files
fiber/libs/reflection/test/inheritance_test.cpp
Oliver Kowalke 39ec793737 initial checkin
2011-02-09 18:41:35 +01:00

93 lines
1.6 KiB
C++

/*
* Boost.Reflection / inheritance tests
*
* (C) Copyright Jeremy Pack 2008
* Distributed under the Boost Software License, Version 1.0. (See
* accompanying file LICENSE_1_0.txt or copy at
* http://www.boost.org/LICENSE_1_0.txt)
*
* See http://www.boost.org/ for latest version.
*/
#include <string>
#include <iostream>
#define BOOST_TEST_MAIN
#define BOOST_TEST_DYN_LINK 1
#include <boost/test/unit_test.hpp>
#include <boost/reflection/reflection.hpp>
#include <iostream>
using namespace boost::reflections;
class A {
public:
virtual ~A() {}
virtual char get_val() {
return 'A';
}
};
class B : public A {
public:
virtual char get_val() {
return 'B';
}
};
class C : virtual public A {
public:
virtual char get_val() {
return 'C';
}
};
class D : virtual public A {
public:
virtual char get_val() {
return 'D';
}
};
class E : public D, public C {
public:
virtual char get_val() {
return 'E';
}
};
class DSub : public D {
public:
};
template <class T, char Name>
void TestClass() {
reflection r;
r.reflect<T>()
.constructor()
.function(&T::get_val, "get_val");
instance i = r.get_constructor()();
BOOST_CHECK_EQUAL(Name, r.get_function<char>("get_val")(i));
}
BOOST_AUTO_TEST_CASE(shared_library_basic_test) {
TestClass<A, 'A'>();
TestClass<B, 'B'>();
TestClass<C, 'C'>();
TestClass<D, 'D'>();
TestClass<E, 'E'>();
// TestClass<DSub, 'D'>();
}
BOOST_AUTO_TEST_CASE(DSubTest) {
reflection r;
r.reflect<DSub>()
.constructor()
.function(&DSub::get_val, "get_val");
instance i = r.get_constructor()();
BOOST_CHECK_EQUAL('D', r.get_function<char>("get_val")(i));
}