--- /dev/null
+///////////////////////////////////////////////////////////////////////////////
+// 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;
+ }
+}
+
+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);
+
+ m_frame = NULL;
+ m_win = NULL;
+}