don't sleep too long to avoid missing the timers; added a simple test for timer events processing in console apps
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@56537 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -148,18 +148,6 @@ bool wxConsoleEventLoop::Pending() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool wxConsoleEventLoop::Dispatch()
|
bool wxConsoleEventLoop::Dispatch()
|
||||||
{
|
|
||||||
m_dispatcher->Dispatch();
|
|
||||||
wxTheApp->ProcessPendingEvents();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxConsoleEventLoop::WakeUp()
|
|
||||||
{
|
|
||||||
m_wakeupPipe.WakeUp();
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxConsoleEventLoop::OnNextIteration()
|
|
||||||
{
|
{
|
||||||
// calculate the timeout until the next timer expiration
|
// calculate the timeout until the next timer expiration
|
||||||
int timeout;
|
int timeout;
|
||||||
@@ -183,6 +171,17 @@ void wxConsoleEventLoop::OnNextIteration()
|
|||||||
wxTimerScheduler::Get().NotifyExpired();
|
wxTimerScheduler::Get().NotifyExpired();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
wxTheApp->ProcessPendingEvents();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxConsoleEventLoop::WakeUp()
|
||||||
|
{
|
||||||
|
m_wakeupPipe.WakeUp();
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxConsoleEventLoop::OnNextIteration()
|
||||||
|
{
|
||||||
// call the signal handlers for any signals we caught recently
|
// call the signal handlers for any signals we caught recently
|
||||||
wxTheApp->CheckSignal();
|
wxTheApp->CheckSignal();
|
||||||
}
|
}
|
||||||
|
@@ -60,6 +60,7 @@ TEST_OBJECTS = \
|
|||||||
test_cmdlinetest.o \
|
test_cmdlinetest.o \
|
||||||
test_fileconf.o \
|
test_fileconf.o \
|
||||||
test_datetimetest.o \
|
test_datetimetest.o \
|
||||||
|
test_timertest.o \
|
||||||
test_filekind.o \
|
test_filekind.o \
|
||||||
test_filenametest.o \
|
test_filenametest.o \
|
||||||
test_filesystest.o \
|
test_filesystest.o \
|
||||||
@@ -365,6 +366,9 @@ test_fileconf.o: $(srcdir)/config/fileconf.cpp $(TEST_ODEP)
|
|||||||
test_datetimetest.o: $(srcdir)/datetime/datetimetest.cpp $(TEST_ODEP)
|
test_datetimetest.o: $(srcdir)/datetime/datetimetest.cpp $(TEST_ODEP)
|
||||||
$(CXXC) -c -o $@ $(TEST_CXXFLAGS) $(srcdir)/datetime/datetimetest.cpp
|
$(CXXC) -c -o $@ $(TEST_CXXFLAGS) $(srcdir)/datetime/datetimetest.cpp
|
||||||
|
|
||||||
|
test_timertest.o: $(srcdir)/events/timertest.cpp $(TEST_ODEP)
|
||||||
|
$(CXXC) -c -o $@ $(TEST_CXXFLAGS) $(srcdir)/events/timertest.cpp
|
||||||
|
|
||||||
test_filekind.o: $(srcdir)/filekind/filekind.cpp $(TEST_ODEP)
|
test_filekind.o: $(srcdir)/filekind/filekind.cpp $(TEST_ODEP)
|
||||||
$(CXXC) -c -o $@ $(TEST_CXXFLAGS) $(srcdir)/filekind/filekind.cpp
|
$(CXXC) -c -o $@ $(TEST_CXXFLAGS) $(srcdir)/filekind/filekind.cpp
|
||||||
|
|
||||||
|
139
tests/events/timertest.cpp
Normal file
139
tests/events/timertest.cpp
Normal file
@@ -0,0 +1,139 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: tests/events/timertest.cpp
|
||||||
|
// Purpose: Test wxTimer events
|
||||||
|
// Author: Vadim Zeitlin
|
||||||
|
// Created: 2008-10-22
|
||||||
|
// RCS-ID: $Id$
|
||||||
|
// Copyright: (c) 2008 Vadim Zeitlin <vadim@wxwidgets.org>
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// headers
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#include "testprec.h"
|
||||||
|
|
||||||
|
#ifdef __BORLANDC__
|
||||||
|
#pragma hdrstop
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WX_PRECOMP
|
||||||
|
#endif // WX_PRECOMP
|
||||||
|
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
|
#include "wx/evtloop.h"
|
||||||
|
#include "wx/timer.h"
|
||||||
|
|
||||||
|
// helper class counting the number of timer events
|
||||||
|
class TimerCounterHandler : public wxEvtHandler
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
TimerCounterHandler()
|
||||||
|
{
|
||||||
|
m_events = 0;
|
||||||
|
|
||||||
|
Connect(wxEVT_TIMER, wxTimerEventHandler(TimerCounterHandler::OnTimer));
|
||||||
|
}
|
||||||
|
|
||||||
|
int GetNumEvents() const { return m_events; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
void OnTimer(wxTimerEvent& WXUNUSED(event))
|
||||||
|
{
|
||||||
|
m_events++;
|
||||||
|
|
||||||
|
Tick();
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void Tick() { /* nothing to do in the base class */ }
|
||||||
|
|
||||||
|
int m_events;
|
||||||
|
|
||||||
|
DECLARE_NO_COPY_CLASS(TimerCounterHandler)
|
||||||
|
};
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
// test class
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
class TimerEventTestCase : public CppUnit::TestCase
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
TimerEventTestCase() {}
|
||||||
|
|
||||||
|
private:
|
||||||
|
CPPUNIT_TEST_SUITE( TimerEventTestCase );
|
||||||
|
CPPUNIT_TEST( OneShot );
|
||||||
|
CPPUNIT_TEST( Multiple );
|
||||||
|
CPPUNIT_TEST_SUITE_END();
|
||||||
|
|
||||||
|
void OneShot();
|
||||||
|
void Multiple();
|
||||||
|
|
||||||
|
DECLARE_NO_COPY_CLASS(TimerEventTestCase)
|
||||||
|
};
|
||||||
|
|
||||||
|
// register in the unnamed registry so that these tests are run by default
|
||||||
|
CPPUNIT_TEST_SUITE_REGISTRATION( TimerEventTestCase );
|
||||||
|
|
||||||
|
// also include in it's own registry so that these tests can be run alone
|
||||||
|
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( TimerEventTestCase, "TimerEventTestCase" );
|
||||||
|
|
||||||
|
void TimerEventTestCase::OneShot()
|
||||||
|
{
|
||||||
|
class ExitOnTimerHandler : public TimerCounterHandler
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ExitOnTimerHandler(wxEventLoopBase& loop)
|
||||||
|
: TimerCounterHandler(),
|
||||||
|
m_loop(loop)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void Tick() { m_loop.Exit(); }
|
||||||
|
|
||||||
|
wxEventLoopBase& m_loop;
|
||||||
|
|
||||||
|
// don't use DECLARE_NO_COPY_CLASS() to avoid upsetting MSVC
|
||||||
|
};
|
||||||
|
|
||||||
|
wxEventLoop loop;
|
||||||
|
|
||||||
|
ExitOnTimerHandler handler(loop);
|
||||||
|
wxTimer timer(&handler);
|
||||||
|
timer.Start(200, true);
|
||||||
|
|
||||||
|
loop.Run();
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT_EQUAL( 1, handler.GetNumEvents() );
|
||||||
|
}
|
||||||
|
|
||||||
|
void TimerEventTestCase::Multiple()
|
||||||
|
{
|
||||||
|
wxEventLoop loop;
|
||||||
|
|
||||||
|
TimerCounterHandler handler;
|
||||||
|
wxTimer timer(&handler);
|
||||||
|
timer.Start(100);
|
||||||
|
|
||||||
|
// run the loop for 2 seconds
|
||||||
|
time_t t;
|
||||||
|
time(&t);
|
||||||
|
const time_t tEnd = t + 2;
|
||||||
|
while ( time(&t) < tEnd )
|
||||||
|
{
|
||||||
|
loop.Dispatch();
|
||||||
|
}
|
||||||
|
|
||||||
|
// we can't count on getting exactly 20 ticks but we shouldn't get more
|
||||||
|
// than this
|
||||||
|
const int numTicks = handler.GetNumEvents();
|
||||||
|
CPPUNIT_ASSERT( numTicks <= 20 );
|
||||||
|
|
||||||
|
// and we should get a decent number of them (unless the system is horribly
|
||||||
|
// loaded so if it does happen that this test fails we may need to remove
|
||||||
|
// it)
|
||||||
|
CPPUNIT_ASSERT( numTicks > 10 );
|
||||||
|
}
|
@@ -37,6 +37,7 @@
|
|||||||
cmdline/cmdlinetest.cpp
|
cmdline/cmdlinetest.cpp
|
||||||
config/fileconf.cpp
|
config/fileconf.cpp
|
||||||
datetime/datetimetest.cpp
|
datetime/datetimetest.cpp
|
||||||
|
events/timertest.cpp
|
||||||
filekind/filekind.cpp
|
filekind/filekind.cpp
|
||||||
filename/filenametest.cpp
|
filename/filenametest.cpp
|
||||||
filesys/filesystest.cpp
|
filesys/filesystest.cpp
|
||||||
|
@@ -417,6 +417,10 @@ SOURCE=.\streams\textstreamtest.cpp
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\events\timertest.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\thread\tls.cpp
|
SOURCE=.\thread\tls.cpp
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
@@ -732,6 +732,9 @@
|
|||||||
<File
|
<File
|
||||||
RelativePath=".\streams\textstreamtest.cpp">
|
RelativePath=".\streams\textstreamtest.cpp">
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\events\timertest.cpp">
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\thread\tls.cpp">
|
RelativePath=".\thread\tls.cpp">
|
||||||
</File>
|
</File>
|
||||||
|
@@ -1055,6 +1055,10 @@
|
|||||||
RelativePath=".\streams\textstreamtest.cpp"
|
RelativePath=".\streams\textstreamtest.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\events\timertest.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\thread\tls.cpp"
|
RelativePath=".\thread\tls.cpp"
|
||||||
>
|
>
|
||||||
|
@@ -1027,6 +1027,10 @@
|
|||||||
RelativePath=".\streams\textstreamtest.cpp"
|
RelativePath=".\streams\textstreamtest.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\events\timertest.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\thread\tls.cpp"
|
RelativePath=".\thread\tls.cpp"
|
||||||
>
|
>
|
||||||
|
Reference in New Issue
Block a user