| OLD | NEW | 
|   1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |   1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 
|   2 // Use of this source code is governed by a BSD-style license that can be |   2 // Use of this source code is governed by a BSD-style license that can be | 
|   3 // found in the LICENSE file. |   3 // found in the LICENSE file. | 
|   4  |   4  | 
|   5 #include "base/message_loop.h" |   5 #include "base/message_loop.h" | 
 |   6 #include "base/time.h" | 
 |   7 #include "base/waitable_event.h" | 
|   6 #include "remoting/jingle_glue/jingle_thread.h" |   8 #include "remoting/jingle_glue/jingle_thread.h" | 
|   7 #include "testing/gmock/include/gmock/gmock.h" |   9 #include "testing/gmock/include/gmock/gmock.h" | 
|   8 #include "testing/gtest/include/gtest/gtest.h" |  10 #include "testing/gtest/include/gtest/gtest.h" | 
|   9  |  11  | 
|  10 namespace remoting { |  12 namespace remoting { | 
|  11  |  13  | 
|  12 class MockTask : public Task { |  14 class MockTask : public Task { | 
|  13  public: |  15  public: | 
|  14   MOCK_METHOD0(Run, void()); |  16   MOCK_METHOD0(Run, void()); | 
|  15 }; |  17 }; | 
|  16  |  18  | 
 |  19 namespace { | 
 |  20 // Delay used to test delayed tasks. Shouldn't be too big, so that we don't | 
 |  21 // slow down the test, yet, should be big enough to be measurable. | 
 |  22 int kDelayMs = 50;  // 0.05 s. | 
 |  23 int kDelayTimeoutMs = 10000;  // 10 s. | 
 |  24 }  // namespace | 
 |  25  | 
|  17 TEST(JingleThreadTest, PostTask) { |  26 TEST(JingleThreadTest, PostTask) { | 
|  18   JingleThread thread; |  27   JingleThread thread; | 
|  19   MockTask* task = new MockTask(); |  28   MockTask* task = new MockTask(); | 
|  20   EXPECT_CALL(*task, Run()); |  29   EXPECT_CALL(*task, Run()); | 
|  21  |  30  | 
|  22   thread.Start(); |  31   thread.Start(); | 
|  23   thread.message_loop()->PostTask(FROM_HERE, task); |  32   thread.message_loop()->PostTask(FROM_HERE, task); | 
|  24   thread.Stop(); |  33   thread.Stop(); | 
|  25 } |  34 } | 
|  26  |  35  | 
 |  36 ACTION_P(SignalEvent, event) { | 
 |  37   event->Signal(); | 
 |  38 } | 
 |  39  | 
 |  40 TEST(JingleThreadTest, PostDelayedTask) { | 
 |  41   JingleThread thread; | 
 |  42   MockTask* task = new MockTask(); | 
 |  43   base::WaitableEvent event(true, false); | 
 |  44   EXPECT_CALL(*task, Run()).WillOnce(SignalEvent(&event)); | 
 |  45  | 
 |  46   thread.Start(); | 
 |  47   base::Time start = base::Time::Now(); | 
 |  48   thread.message_loop()->PostDelayedTask(FROM_HERE, task, kDelayMs); | 
 |  49   event.TimedWait(base::TimeDelta::FromMilliseconds(kDelayTimeoutMs)); | 
 |  50   base::Time end = base::Time::Now(); | 
 |  51   thread.Stop(); | 
 |  52  | 
 |  53   EXPECT_GT((end - start).InMillisecondsRoundedUp(), kDelayMs); | 
 |  54 } | 
 |  55  | 
|  27 }  // namespace remoting |  56 }  // namespace remoting | 
| OLD | NEW |