]> git.saurik.com Git - wxWidgets.git/blobdiff - tests/testableframe.cpp
Merge the new GUI tests from SOC2010_GUI_TEST branch.
[wxWidgets.git] / tests / testableframe.cpp
diff --git a/tests/testableframe.cpp b/tests/testableframe.cpp
new file mode 100644 (file)
index 0000000..efa7396
--- /dev/null
@@ -0,0 +1,79 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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;
+}