// register in the unnamed registry so that these tests are run by default
CPPUNIT_TEST_SUITE_REGISTRATION( WeakRefTestCase );
-// also include in it's own registry so that these tests can be run alone
+// also include in its own registry so that these tests can be run alone
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( WeakRefTestCase, "WeakRefTestCase" );
+
+// Test weak reference to an incomplete type, this should work if the type is
+// fully defined before it is used (but currently doesn't, see #11916)
+struct ForwardDeclaredClass;
+wxWeakRef<ForwardDeclaredClass> g_incompleteWeakRef;
+
+struct ForwardDeclaredClass : wxEvtHandler { };
+
void WeakRefTestCase::DeclareTest()
{
{
// Not initializing or initializing with NULL should work too
+ //
+ // FIXME-VC6: but it doesn't with VC6, see comment in wx/weakref.h
+#ifndef __VISUALC6__
wxWeakRef<wxEvtHandler> wroDef;
wxWeakRef<wxEvtHandler> wro0(NULL);
+#endif // __VISUALC6__
wxObject o; // Should not work
wxEvtHandler eh;
CPPUNIT_ASSERT( wreh.get() == &eh );
CPPUNIT_ASSERT( wrot.get() == &ot );
}
+
+ // This test requires a working dynamic_cast<>
+#ifndef wxNO_RTTI
+ {
+ ForwardDeclaredClass fdc;
+ g_incompleteWeakRef = &fdc;
+ CPPUNIT_ASSERT( g_incompleteWeakRef );
+ }
+
+ CPPUNIT_ASSERT( !g_incompleteWeakRef );
+#endif // RTTI enabled
}
void WeakRefTestCase::AssignTest()
CPPUNIT_ASSERT( !wro2 );
// Explicitly resetting should work too
+ //
+ // FIXME-VC6: as above, it doesn't work with VC6, see wx/weakref.h
+#ifndef __VISUALC6__
wxEvtHandler eh;
wxObjectTrackable ot;
CPPUNIT_ASSERT( !wro1 );
CPPUNIT_ASSERT( !wro2 );
+#endif // __VISUALC6__
}
void WeakRefTestCase::AssignWeakRefTest()