wxWidgets/tests/testableframe.cpp

88 lines
2.0 KiB
C++

///////////////////////////////////////////////////////////////////////////////
// Name: testableframe.cpp
// Purpose: An improved wxFrame for unit-testing
// Author: Steven Lamerton
// RCS-ID: $Id$
// Copyright: (c) 2010 Steven Lamerton
// Licence: wxWidgets licence
///////////////////////////////////////////////////////////////////////////////
// For compilers that support precompilation, includes "wx/wx.h".
#include "testprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#include "wx/app.h"
#include "testableframe.h"
wxTestableFrame::wxTestableFrame() : wxFrame(NULL, wxID_ANY, "Test Frame")
{
}
void wxTestableFrame::OnEvent(wxEvent& evt)
{
m_count[evt.GetEventType()]++;
if(! evt.IsCommandEvent() )
evt.Skip();
}
int wxTestableFrame::GetEventCount(wxEventType type)
{
if (type == wxEVT_ANY)
{
//Get the total event count
long total = 0;
for(wxLongToLongHashMap::iterator iter = m_count.begin();
iter != m_count.end();
iter++)
{
total += iter->second;
iter->second = 0;
}
return total;
}
else
{
long count = m_count[type];
m_count[type] = 0;
return count;
}
}
void wxTestableFrame::ClearEventCount(wxEventType type)
{
m_count[type] = 0;
}
EventCounter::EventCounter(wxWindow* win, wxEventType type) : m_type(type),
m_win(win)
{
m_frame = wxStaticCast(wxTheApp->GetTopWindow(),
wxTestableFrame);
m_win->Connect(m_type,
wxEventHandler(wxTestableFrame::OnEvent),
NULL,
m_frame);
}
EventCounter::~EventCounter()
{
m_win->Disconnect(m_type,
wxEventHandler(wxTestableFrame::OnEvent),
NULL,
m_frame);
//This stops spurious counts from previous tests
m_frame->ClearEventCount(m_type);
m_frame = NULL;
m_win = NULL;
}