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);
|
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[])
|
int main(int argc, char * argv[])
|
||||||
{
|
{
|
||||||
test_class_hierarchy();
|
test_class_hierarchy();
|
||||||
@ -309,5 +347,6 @@ int main(int argc, char * argv[])
|
|||||||
test_dynamic_cast_failure();
|
test_dynamic_cast_failure();
|
||||||
test_dynamic_cast_move_success();
|
test_dynamic_cast_move_success();
|
||||||
test_dynamic_cast_move_failure();
|
test_dynamic_cast_move_failure();
|
||||||
|
test_external_class();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user