///////////////////////////////////////////////////////////////////////////////
// Name: tests/misc/misctests.cpp
// Purpose: test miscellaneous stuff
-// Author: Peter Most
+// Author: Peter Most, Vadim Zeitlin
// Created: 2008-07-10
// RCS-ID: $Id$
// Copyright: (c) 2008 Peter Most
+// (c) 2009 Vadim Zeitlin
///////////////////////////////////////////////////////////////////////////////
// ----------------------------------------------------------------------------
#include "wx/defs.h"
+// just some classes using wxRTTI for wxStaticCast() test
+#include "wx/tarstrm.h"
+#include "wx/zipstrm.h"
+
// ----------------------------------------------------------------------------
// test class
// ----------------------------------------------------------------------------
private:
CPPUNIT_TEST_SUITE( MiscTestCase );
+ CPPUNIT_TEST( Assert );
CPPUNIT_TEST( Delete );
+ CPPUNIT_TEST( StaticCast );
CPPUNIT_TEST_SUITE_END();
+ void Assert();
void Delete();
+ void StaticCast();
DECLARE_NO_COPY_CLASS(MiscTestCase)
};
// also include in it's own registry so that these tests can be run alone
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( MiscTestCase, "MiscTestCase" );
+namespace
+{
+
+bool AssertIfOdd(int n)
+{
+ wxCHECK_MSG( !(n % 2), false, "parameter must be even" );
+
+ return true;
+}
+
+} // anonymous namespace
+
+void MiscTestCase::Assert()
+{
+ AssertIfOdd(0);
+ WX_ASSERT_FAILS_WITH_ASSERT(AssertIfOdd(1));
+
+ // doesn't fail any more
+ wxAssertHandler_t oldHandler = wxSetAssertHandler(NULL);
+ AssertIfOdd(17);
+ wxSetAssertHandler(oldHandler);
+}
+
void MiscTestCase::Delete()
{
// Allocate some arbitrary memory to get a valid pointer:
#endif
}
+namespace
+{
+
+// helper function used just to avoid warnings about value computed not being
+// used in WX_ASSERT_FAILS_WITH_ASSERT() in StaticCast() below
+bool IsNull(void *p)
+{
+ return p == NULL;
+}
+
+} // anonymous namespace
+
+void MiscTestCase::StaticCast()
+{
+ wxTarEntry tarEntry;
+ CPPUNIT_ASSERT( wxStaticCast(&tarEntry, wxArchiveEntry) );
+
+ wxArchiveEntry *entry = &tarEntry;
+ CPPUNIT_ASSERT( wxStaticCast(entry, wxTarEntry) );
+
+ wxZipEntry zipEntry;
+ entry = &zipEntry;
+ CPPUNIT_ASSERT( wxStaticCast(entry, wxZipEntry) );
+
+ WX_ASSERT_FAILS_WITH_ASSERT( IsNull(wxStaticCast(entry, wxTarEntry)) );
+ WX_ASSERT_FAILS_WITH_ASSERT( IsNull(wxStaticCast(&zipEntry, wxTarEntry)) );
+}
+