]> git.saurik.com Git - wxWidgets.git/commitdiff
Fix bug with wxStopWatch::Start() not resuming paused stopwatch any more.
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 3 Dec 2011 00:34:00 +0000 (00:34 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 3 Dec 2011 00:34:00 +0000 (00:34 +0000)
Since r69835 the stop watch remained paused even when Start() was called. Do
resume it when restarting it both for backwards compatibility and because it
makes more sense and also document this behaviour.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@69921 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

interface/wx/stopwatch.h
src/common/stopwatch.cpp
tests/events/stopwatch.cpp

index 644db85d365a654e3c8c4c1bb6f80522761946b0..d67fa9ab9e3071c2d532c3511e277eb6016e4e9c 100644 (file)
@@ -61,6 +61,10 @@ public:
 
     /**
         (Re)starts the stop watch with a given initial value.
+
+        The stopwatch will always be running after calling Start(), even if
+        Pause() had been called before and even if it had been called multiple
+        times.
     */
     void Start(long milliseconds = 0);
 
index f077378b3abaf5762e031d960d58e4a75a3000a3..59997c4b4e3764d5146c92c02ad34398d31e0d43 100644 (file)
@@ -125,6 +125,10 @@ wxLongLong wxStopWatch::GetClockFreq() const
 
 void wxStopWatch::Start(long t0)
 {
+    // Calling Start() makes the stop watch run however many times it was
+    // paused before.
+    m_pauseCount = 0;
+
     DoStart();
 
     m_t0 -= (wxLongLong(t0)*GetClockFreq())/MILLISECONDS_PER_SECOND;
index f50da74306beaf553ccbbaea4ee9732f8b6a5d04..3150fde7192573051b6f8bb180776ca180419868 100644 (file)
 #include "wx/stopwatch.h"
 #include "wx/utils.h"
 
+namespace
+{
+
+const long tolerance = 10;  // in ms
+const int sleepTime = 500;
+
+} // anonymous namespace
+
 // --------------------------------------------------------------------------
 // test class
 // --------------------------------------------------------------------------
@@ -39,10 +47,12 @@ private:
     CPPUNIT_TEST_SUITE( StopWatchTestCase );
         CPPUNIT_TEST( Misc );
         CPPUNIT_TEST( BackwardsClockBug );
+        CPPUNIT_TEST( RestartBug );
     CPPUNIT_TEST_SUITE_END();
 
     void Misc();
     void BackwardsClockBug();
+    void RestartBug();
 
     DECLARE_NO_COPY_CLASS(StopWatchTestCase)
 };
@@ -55,8 +65,6 @@ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( StopWatchTestCase, "StopWatchTestCase" );
 
 void StopWatchTestCase::Misc()
 {
-    static const long tolerance = 10;  // in ms
-
     wxStopWatch sw;
     long t;
     wxLongLong usec;
@@ -81,7 +89,6 @@ void StopWatchTestCase::Misc()
         t >= 0 && t < tolerance
     );
 
-    static const int sleepTime = 500;
     sw.Resume();
     wxMilliSleep(sleepTime);
     t = sw.Time();
@@ -124,3 +131,22 @@ void StopWatchTestCase::BackwardsClockBug()
         }
     }
 }
+
+void StopWatchTestCase::RestartBug()
+{
+    wxStopWatch sw;
+    sw.Pause();
+
+    // Calling Start() should resume the stopwatch if it was paused.
+    static const int offset = 5000;
+    sw.Start(offset);
+    wxMilliSleep(sleepTime);
+
+    long t = sw.Time();
+    WX_ASSERT_MESSAGE
+    (
+        ("Actual time value is %ld", t),
+        t > offset + sleepTime - tolerance &&
+            t < offset + sleepTime + tolerance
+    );
+}