2009-03-22 17:31:34 -04:00
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
// Name: tests/events/clone.cpp
|
|
|
|
// Purpose: Test wxEvent::Clone() implementation by all event classes
|
|
|
|
// Author: Vadim Zeitlin, based on the code by Francesco Montorsi
|
|
|
|
// Created: 2009-03-22
|
|
|
|
// RCS-ID: $Id$
|
|
|
|
// Copyright: (c) 2009 Vadim Zeitlin <vadim@wxwidgets.org>
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// headers
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
#include "testprec.h"
|
|
|
|
|
|
|
|
#ifdef __BORLANDC__
|
|
|
|
#pragma hdrstop
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef WX_PRECOMP
|
|
|
|
#include "wx/event.h"
|
|
|
|
#endif // WX_PRECOMP
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
// test class
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
class EventCloneTestCase : public CppUnit::TestCase
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
EventCloneTestCase() {}
|
|
|
|
|
|
|
|
private:
|
|
|
|
CPPUNIT_TEST_SUITE( EventCloneTestCase );
|
|
|
|
CPPUNIT_TEST( CheckAll );
|
|
|
|
CPPUNIT_TEST_SUITE_END();
|
|
|
|
|
|
|
|
void CheckAll();
|
|
|
|
|
|
|
|
DECLARE_NO_COPY_CLASS(EventCloneTestCase)
|
|
|
|
};
|
|
|
|
|
|
|
|
// register in the unnamed registry so that these tests are run by default
|
|
|
|
CPPUNIT_TEST_SUITE_REGISTRATION( EventCloneTestCase );
|
|
|
|
|
|
|
|
// also include in it's own registry so that these tests can be run alone
|
|
|
|
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( EventCloneTestCase, "EventCloneTestCase" );
|
|
|
|
|
|
|
|
void EventCloneTestCase::CheckAll()
|
|
|
|
{
|
|
|
|
// check if event classes implement Clone() correctly
|
|
|
|
// NOTE: the check is done against _all_ event classes which are linked to
|
|
|
|
// the executable currently running, which are not necessarily all
|
|
|
|
// wxWidgets event classes.
|
|
|
|
const wxClassInfo *ci = wxClassInfo::GetFirst();
|
|
|
|
for (; ci; ci = ci->GetNext())
|
|
|
|
{
|
|
|
|
// is this class derived from wxEvent?
|
|
|
|
if ( !ci->IsKindOf(CLASSINFO(wxEvent)) ||
|
|
|
|
wxString(ci->GetClassName()) == "wxEvent" )
|
|
|
|
continue;
|
|
|
|
|
|
|
|
const std::string
|
2009-03-23 06:04:56 -04:00
|
|
|
msg = std::string("Event class \"") +
|
2009-03-23 06:58:32 -04:00
|
|
|
std::string(ci->GetClassName()) + "\"";
|
2009-03-22 17:31:34 -04:00
|
|
|
|
|
|
|
CPPUNIT_ASSERT_MESSAGE( msg, ci->IsDynamic() );
|
|
|
|
|
|
|
|
wxEvent * const test = wxDynamicCast(ci->CreateObject(),wxEvent);
|
|
|
|
CPPUNIT_ASSERT_MESSAGE( msg, test );
|
|
|
|
|
|
|
|
wxEvent * const cloned = test->Clone();
|
|
|
|
delete test;
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT_MESSAGE( msg, cloned );
|
|
|
|
CPPUNIT_ASSERT_MESSAGE( msg, cloned->GetClassInfo() == ci );
|
|
|
|
|
|
|
|
delete cloned;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|