| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  *  Copyright 2004 The WebRTC Project Authors. All rights reserved. | 2  *  Copyright 2004 The WebRTC Project Authors. All rights reserved. | 
| 3  * | 3  * | 
| 4  *  Use of this source code is governed by a BSD-style license | 4  *  Use of this source code is governed by a BSD-style license | 
| 5  *  that can be found in the LICENSE file in the root of the source | 5  *  that can be found in the LICENSE file in the root of the source | 
| 6  *  tree. An additional intellectual property rights grant can be found | 6  *  tree. An additional intellectual property rights grant can be found | 
| 7  *  in the file PATENTS.  All contributing project authors may | 7  *  in the file PATENTS.  All contributing project authors may | 
| 8  *  be found in the AUTHORS file in the root of the source tree. | 8  *  be found in the AUTHORS file in the root of the source tree. | 
| 9  */ | 9  */ | 
| 10 | 10 | 
| 11 #ifndef WEBRTC_BASE_GUNIT_H_ | 11 #ifndef WEBRTC_BASE_GUNIT_H_ | 
| 12 #define WEBRTC_BASE_GUNIT_H_ | 12 #define WEBRTC_BASE_GUNIT_H_ | 
| 13 | 13 | 
| 14 #include "webrtc/base/fakeclock.h" |  | 
| 15 #include "webrtc/base/logging.h" | 14 #include "webrtc/base/logging.h" | 
| 16 #include "webrtc/base/thread.h" | 15 #include "webrtc/base/thread.h" | 
| 17 #if defined(GTEST_RELATIVE_PATH) | 16 #if defined(GTEST_RELATIVE_PATH) | 
| 18 #include "testing/gtest/include/gtest/gtest.h" | 17 #include "testing/gtest/include/gtest/gtest.h" | 
| 19 #else | 18 #else | 
| 20 #include "testing/base/public/gunit.h" | 19 #include "testing/base/public/gunit.h" | 
| 21 #endif | 20 #endif | 
| 22 | 21 | 
| 23 // Wait until "ex" is true, or "timeout" expires. | 22 // Wait until "ex" is true, or "timeout" expires. | 
| 24 #define WAIT(ex, timeout)                               \ | 23 #define WAIT(ex, timeout)                             \ | 
| 25   for (int64_t start = rtc::TimeMillis();               \ | 24   for (int64_t start = rtc::TimeMillis();             \ | 
| 26        !(ex) && rtc::TimeMillis() < start + timeout;) { \ | 25        !(ex) && rtc::TimeMillis() < start + timeout;) \ | 
| 27     rtc::Thread::Current()->ProcessMessages(0);         \ | 26     rtc::Thread::Current()->ProcessMessages(1); | 
| 28     rtc::Thread::Current()->SleepMs(1);                 \ |  | 
| 29   } |  | 
| 30 | 27 | 
| 31 // This returns the result of the test in res, so that we don't re-evaluate | 28 // This returns the result of the test in res, so that we don't re-evaluate | 
| 32 // the expression in the XXXX_WAIT macros below, since that causes problems | 29 // the expression in the XXXX_WAIT macros below, since that causes problems | 
| 33 // when the expression is only true the first time you check it. | 30 // when the expression is only true the first time you check it. | 
| 34 #define WAIT_(ex, timeout, res)                           \ | 31 #define WAIT_(ex, timeout, res)                           \ | 
| 35   do {                                                    \ | 32   do {                                                    \ | 
| 36     int64_t start = rtc::TimeMillis();                    \ | 33     int64_t start = rtc::TimeMillis();                    \ | 
| 37     res = (ex);                                           \ | 34     res = (ex);                                           \ | 
| 38     while (!res && rtc::TimeMillis() < start + timeout) { \ | 35     while (!res && rtc::TimeMillis() < start + timeout) { \ | 
| 39       rtc::Thread::Current()->ProcessMessages(0);         \ | 36       rtc::Thread::Current()->ProcessMessages(1);         \ | 
| 40       rtc::Thread::Current()->SleepMs(1);                 \ |  | 
| 41       res = (ex);                                         \ | 37       res = (ex);                                         \ | 
| 42     }                                                     \ | 38     }                                                     \ | 
| 43   } while (0) | 39   } while (0) | 
| 44 | 40 | 
| 45 // The typical EXPECT_XXXX and ASSERT_XXXXs, but done until true or a timeout. | 41 // The typical EXPECT_XXXX and ASSERT_XXXXs, but done until true or a timeout. | 
| 46 #define EXPECT_TRUE_WAIT(ex, timeout) \ | 42 #define EXPECT_TRUE_WAIT(ex, timeout) \ | 
| 47   do { \ | 43   do { \ | 
| 48     bool res; \ | 44     bool res; \ | 
| 49     WAIT_(ex, timeout, res); \ | 45     WAIT_(ex, timeout, res); \ | 
| 50     if (!res) EXPECT_TRUE(ex); \ | 46     if (!res) EXPECT_TRUE(ex); \ | 
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 82       break; \ | 78       break; \ | 
| 83     } \ | 79     } \ | 
| 84     LOG(LS_WARNING) << "Expression " << #ex << " still not true after " << \ | 80     LOG(LS_WARNING) << "Expression " << #ex << " still not true after " << \ | 
| 85         timeout << "ms; waiting an additional " << margin << "ms"; \ | 81         timeout << "ms; waiting an additional " << margin << "ms"; \ | 
| 86     WAIT_(ex, margin, res); \ | 82     WAIT_(ex, margin, res); \ | 
| 87     if (!res) { \ | 83     if (!res) { \ | 
| 88       EXPECT_TRUE(ex); \ | 84       EXPECT_TRUE(ex); \ | 
| 89     } \ | 85     } \ | 
| 90   } while (0) | 86   } while (0) | 
| 91 | 87 | 
| 92 // Wait until "ex" is true, or "timeout" expires, using fake clock where |  | 
| 93 // messages are processed every millisecond. |  | 
| 94 #define SIMULATED_WAIT(ex, timeout, clock)                  \ |  | 
| 95   for (int64_t start = rtc::TimeMillis();                   \ |  | 
| 96        !(ex) && rtc::TimeMillis() < start + timeout;) {     \ |  | 
| 97     clock.AdvanceTime(rtc::TimeDelta::FromMilliseconds(1)); \ |  | 
| 98   } |  | 
| 99 |  | 
| 100 // This returns the result of the test in res, so that we don't re-evaluate |  | 
| 101 // the expression in the XXXX_WAIT macros below, since that causes problems |  | 
| 102 // when the expression is only true the first time you check it. |  | 
| 103 #define SIMULATED_WAIT_(ex, timeout, res, clock)              \ |  | 
| 104   do {                                                        \ |  | 
| 105     int64_t start = rtc::TimeMillis();                        \ |  | 
| 106     res = (ex);                                               \ |  | 
| 107     while (!res && rtc::TimeMillis() < start + timeout) {     \ |  | 
| 108       clock.AdvanceTime(rtc::TimeDelta::FromMilliseconds(1)); \ |  | 
| 109       res = (ex);                                             \ |  | 
| 110     }                                                         \ |  | 
| 111   } while (0) |  | 
| 112 |  | 
| 113 // The typical EXPECT_XXXX, but done until true or a timeout with a fake clock. |  | 
| 114 #define EXPECT_TRUE_SIMULATED_WAIT(ex, timeout, clock) \ |  | 
| 115   do {                                                 \ |  | 
| 116     bool res;                                          \ |  | 
| 117     SIMULATED_WAIT_(ex, timeout, res, clock);          \ |  | 
| 118     if (!res) {                                        \ |  | 
| 119       EXPECT_TRUE(ex);                                 \ |  | 
| 120     }                                                  \ |  | 
| 121   } while (0) |  | 
| 122 |  | 
| 123 #define EXPECT_EQ_SIMULATED_WAIT(v1, v2, timeout, clock) \ |  | 
| 124   do {                                                   \ |  | 
| 125     bool res;                                            \ |  | 
| 126     SIMULATED_WAIT_(v1 == v2, timeout, res, clock);      \ |  | 
| 127     if (!res) {                                          \ |  | 
| 128       EXPECT_EQ(v1, v2);                                 \ |  | 
| 129     }                                                    \ |  | 
| 130   } while (0) |  | 
| 131 |  | 
| 132 #endif  // WEBRTC_BASE_GUNIT_H_ | 88 #endif  // WEBRTC_BASE_GUNIT_H_ | 
| OLD | NEW | 
|---|