We already had WX_ASSERT_EVENT_OCCURS_IN macro and a recent commit also added code doing almost the same thing manually in wxTopLevelWindow unit test, which was one version too many. Replace both of them with the new EventCounter::WaitEvent(). No real changes, this is just a refactoring.
		
			
				
	
	
		
			89 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
///////////////////////////////////////////////////////////////////////////////
 | 
						|
// Name:        testableframe.cpp
 | 
						|
// Purpose:     An improved wxFrame for unit-testing
 | 
						|
// Author:      Steven Lamerton
 | 
						|
// Copyright:   (c) 2010 Steven Lamerton
 | 
						|
// Licence:     wxWindows 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")
 | 
						|
{
 | 
						|
    // Use fixed position to facilitate debugging.
 | 
						|
    Move(200, 200);
 | 
						|
 | 
						|
    Show();
 | 
						|
}
 | 
						|
 | 
						|
void wxTestableFrame::OnEvent(wxEvent& evt)
 | 
						|
{
 | 
						|
    m_count[evt.GetEventType()]++;
 | 
						|
 | 
						|
    if(! evt.IsCommandEvent() )
 | 
						|
        evt.Skip();
 | 
						|
}
 | 
						|
 | 
						|
int wxTestableFrame::GetEventCount(wxEventType type)
 | 
						|
{
 | 
						|
    return m_count[type];
 | 
						|
}
 | 
						|
 | 
						|
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
 | 
						|
    Clear();
 | 
						|
 | 
						|
    m_frame = NULL;
 | 
						|
    m_win = NULL;
 | 
						|
}
 | 
						|
 | 
						|
bool EventCounter::WaitEvent(int timeInMs)
 | 
						|
{
 | 
						|
    static const int SINGLE_WAIT_DURATION = 50;
 | 
						|
 | 
						|
    for ( int i = 0; i < timeInMs / SINGLE_WAIT_DURATION; ++i )
 | 
						|
    {
 | 
						|
        wxYield();
 | 
						|
 | 
						|
        const int count = GetCount();
 | 
						|
        if ( count )
 | 
						|
        {
 | 
						|
            CHECK( count == 1 );
 | 
						|
 | 
						|
            Clear();
 | 
						|
            return true;
 | 
						|
        }
 | 
						|
 | 
						|
        wxMilliSleep(SINGLE_WAIT_DURATION);
 | 
						|
    }
 | 
						|
 | 
						|
    return false;
 | 
						|
}
 |