Merge branch 'timerevent-no-def-ctor'
Remove wxTimerEvent default constructor. See https://github.com/wxWidgets/wxWidgets/pull/1409
This commit is contained in:
@@ -159,26 +159,23 @@ private:
|
||||
class WXDLLIMPEXP_BASE wxTimerEvent : public wxEvent
|
||||
{
|
||||
public:
|
||||
wxTimerEvent()
|
||||
: wxEvent(wxID_ANY, wxEVT_TIMER) { m_timer=NULL; }
|
||||
|
||||
wxTimerEvent(wxTimer& timer)
|
||||
: wxEvent(timer.GetId(), wxEVT_TIMER),
|
||||
m_timer(&timer)
|
||||
m_timer(timer)
|
||||
{
|
||||
SetEventObject(timer.GetOwner());
|
||||
}
|
||||
|
||||
// accessors
|
||||
int GetInterval() const { return m_timer->GetInterval(); }
|
||||
wxTimer& GetTimer() const { return *m_timer; }
|
||||
int GetInterval() const { return m_timer.GetInterval(); }
|
||||
wxTimer& GetTimer() const { return m_timer; }
|
||||
|
||||
// implement the base class pure virtual
|
||||
virtual wxEvent *Clone() const wxOVERRIDE { return new wxTimerEvent(*this); }
|
||||
virtual wxEventCategory GetEventCategory() const wxOVERRIDE { return wxEVT_CATEGORY_TIMER; }
|
||||
|
||||
private:
|
||||
wxTimer* m_timer;
|
||||
wxTimer& m_timer;
|
||||
|
||||
wxDECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxTimerEvent);
|
||||
};
|
||||
|
@@ -38,7 +38,9 @@
|
||||
// wxWin macros
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
wxIMPLEMENT_DYNAMIC_CLASS(wxTimerEvent, wxEvent);
|
||||
// This class is not really abstract, but this macro has to be used because it
|
||||
// doesn't have a default ctor.
|
||||
wxIMPLEMENT_ABSTRACT_CLASS(wxTimerEvent, wxEvent);
|
||||
|
||||
wxDEFINE_EVENT(wxEVT_TIMER, wxTimerEvent);
|
||||
|
||||
|
@@ -18,35 +18,14 @@
|
||||
|
||||
#ifndef WX_PRECOMP
|
||||
#include "wx/event.h"
|
||||
#include "wx/timer.h"
|
||||
#endif // WX_PRECOMP
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
// test class
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
class EventCloneTestCase : public CppUnit::TestCase
|
||||
TEST_CASE("EventClone", "[wxEvent][clone]")
|
||||
{
|
||||
public:
|
||||
EventCloneTestCase() {}
|
||||
// Dummy timer needed just to create a wxTimerEvent.
|
||||
wxTimer dummyTimer;
|
||||
|
||||
private:
|
||||
CPPUNIT_TEST_SUITE( EventCloneTestCase );
|
||||
CPPUNIT_TEST( CheckAll );
|
||||
CPPUNIT_TEST_SUITE_END();
|
||||
|
||||
void CheckAll();
|
||||
|
||||
wxDECLARE_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 its 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
|
||||
@@ -61,20 +40,30 @@ void EventCloneTestCase::CheckAll()
|
||||
cn == "wxEvent" )
|
||||
continue;
|
||||
|
||||
const std::string
|
||||
msg = std::string("Event class \"") +
|
||||
std::string(cn.c_str()) + "\"";
|
||||
INFO("Event class \"" << cn << "\"");
|
||||
|
||||
CPPUNIT_ASSERT_MESSAGE( msg, ci->IsDynamic() );
|
||||
wxEvent* test;
|
||||
if ( ci->IsDynamic() )
|
||||
{
|
||||
test = wxDynamicCast(ci->CreateObject(),wxEvent);
|
||||
}
|
||||
else if ( cn == "wxTimerEvent" )
|
||||
{
|
||||
test = new wxTimerEvent(dummyTimer);
|
||||
}
|
||||
else
|
||||
{
|
||||
FAIL("Can't create objects of type " + cn);
|
||||
continue;
|
||||
}
|
||||
|
||||
wxEvent * const test = wxDynamicCast(ci->CreateObject(),wxEvent);
|
||||
CPPUNIT_ASSERT_MESSAGE( msg, test );
|
||||
REQUIRE( test );
|
||||
|
||||
wxEvent * const cloned = test->Clone();
|
||||
delete test;
|
||||
|
||||
CPPUNIT_ASSERT_MESSAGE( msg, cloned );
|
||||
CPPUNIT_ASSERT_MESSAGE( msg, cloned->GetClassInfo() == ci );
|
||||
REQUIRE( cloned );
|
||||
CHECK( cloned->GetClassInfo() == ci );
|
||||
|
||||
delete cloned;
|
||||
}
|
||||
|
Reference in New Issue
Block a user