Test adding rcp management to an external class via inheritance
This commit is contained in:
parent
011460254d
commit
464527a34d
39
tests.cpp
39
tests.cpp
@ -289,6 +289,44 @@ void test_dynamic_cast_failure()
|
||||
assert(!derived);
|
||||
}
|
||||
|
||||
/* Simulate a external class that cannot be modified */
|
||||
namespace external
|
||||
{
|
||||
class Counter
|
||||
{
|
||||
public:
|
||||
int start;
|
||||
int count;
|
||||
Counter(int start) : start(start), count(start) {}
|
||||
virtual ~Counter() {}
|
||||
};
|
||||
}
|
||||
|
||||
static int external_destruct;
|
||||
|
||||
/* Create a managed wrapper for the external class. */
|
||||
class Counter : public external::Counter
|
||||
{
|
||||
rcp_managed_root(Counter);
|
||||
protected:
|
||||
Counter(int start) : external::Counter(start) {}
|
||||
~Counter() { external_destruct++; }
|
||||
};
|
||||
|
||||
void test_external_class()
|
||||
{
|
||||
int before = external_destruct;
|
||||
{
|
||||
auto a = Counter::create(10);
|
||||
auto b = Counter::create(20);
|
||||
assert(a->count == 10);
|
||||
assert(b->count == 20);
|
||||
a->count++;
|
||||
assert(a->count == 11);
|
||||
}
|
||||
assert(external_destruct == before + 2);
|
||||
}
|
||||
|
||||
int main(int argc, char * argv[])
|
||||
{
|
||||
test_class_hierarchy();
|
||||
@ -309,5 +347,6 @@ int main(int argc, char * argv[])
|
||||
test_dynamic_cast_failure();
|
||||
test_dynamic_cast_move_success();
|
||||
test_dynamic_cast_move_failure();
|
||||
test_external_class();
|
||||
return 0;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user