Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(141)

Side by Side Diff: cc/test/ordered_simple_task_runner_unittest.cc

Issue 387493002: Fixing and enhancing OrderedSimpleTaskRunner to allow 100% deterministic tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: sprintf is hard. Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 <string> 5 #include <string>
6 6
7 #include "base/cancelable_callback.h" 7 #include "base/cancelable_callback.h"
8 #include "base/format_macros.h"
8 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
9 #include "base/strings/stringprintf.h" 10 #include "base/strings/stringprintf.h"
10 #include "base/test/test_pending_task.h" 11 #include "base/test/test_pending_task.h"
11 #include "cc/test/ordered_simple_task_runner.h" 12 #include "cc/test/ordered_simple_task_runner.h"
12 #include "testing/gtest/include/gtest/gtest.h" 13 #include "testing/gtest/include/gtest/gtest.h"
13 14
15 #define RUN_AND_CHECK_RESULT(expected_result) \
16 task_runner_->RunPendingTasks(); \
17 EXPECT_EQ(expected_result, executed_tasks_); \
18 executed_tasks_ = "";
19
14 namespace cc { 20 namespace cc {
15 21
16 class OrderedSimpleTaskRunnerTest : public testing::Test { 22 class OrderedSimpleTaskRunnerTest : public testing::Test {
17 public: 23 public:
18 OrderedSimpleTaskRunnerTest() { 24 OrderedSimpleTaskRunnerTest() {
19 task_runner_ = new OrderedSimpleTaskRunner; 25 task_runner_ = new OrderedSimpleTaskRunner;
20 } 26 }
21 virtual ~OrderedSimpleTaskRunnerTest() {} 27 virtual ~OrderedSimpleTaskRunnerTest() {}
22 28
23 protected: 29 protected:
30 std::string executed_tasks_;
31 scoped_refptr<OrderedSimpleTaskRunner> task_runner_;
32
24 void CreateAndPostTask(int task_num, base::TimeDelta delay) { 33 void CreateAndPostTask(int task_num, base::TimeDelta delay) {
25 base::Closure test_task = base::Bind(&OrderedSimpleTaskRunnerTest::Task, 34 base::Closure test_task = base::Bind(&OrderedSimpleTaskRunnerTest::Task,
26 base::Unretained(this), 35 base::Unretained(this),
27 task_num); 36 task_num);
28 task_runner_->PostDelayedTask(FROM_HERE, test_task, delay); 37 task_runner_->PostDelayedTask(FROM_HERE, test_task, delay);
29 } 38 }
30 39
31 void RunAndCheckResult(const std::string expected_result) {
32 task_runner_->RunPendingTasks();
33 EXPECT_EQ(expected_result, executed_tasks_);
34 }
35
36 private: 40 private:
37 std::string executed_tasks_;
38 scoped_refptr<OrderedSimpleTaskRunner> task_runner_;
39
40 void Task(int task_num) { 41 void Task(int task_num) {
41 if (!executed_tasks_.empty()) 42 if (!executed_tasks_.empty())
42 executed_tasks_ += " "; 43 executed_tasks_ += " ";
43 executed_tasks_ += base::StringPrintf("%d", task_num); 44 executed_tasks_ +=
45 base::StringPrintf("%d(%" PRId64 "ms)",
46 task_num,
47 task_runner_->Now().ToInternalValue() /
48 base::Time::kMicrosecondsPerMillisecond);
44 } 49 }
45 50
46 DISALLOW_COPY_AND_ASSIGN(OrderedSimpleTaskRunnerTest); 51 DISALLOW_COPY_AND_ASSIGN(OrderedSimpleTaskRunnerTest);
47 }; 52 };
48 53
49 TEST_F(OrderedSimpleTaskRunnerTest, BasicOrderingTest) { 54 TEST_F(OrderedSimpleTaskRunnerTest, BasicOrderingTest) {
50 CreateAndPostTask(1, base::TimeDelta()); 55 CreateAndPostTask(1, base::TimeDelta());
51 CreateAndPostTask(2, base::TimeDelta()); 56 CreateAndPostTask(2, base::TimeDelta());
52 CreateAndPostTask(3, base::TimeDelta()); 57 CreateAndPostTask(3, base::TimeDelta());
53 58
54 RunAndCheckResult("1 2 3"); 59 RUN_AND_CHECK_RESULT("1(0ms) 2(0ms) 3(0ms)");
60 RUN_AND_CHECK_RESULT("");
55 } 61 }
56 62
57 TEST_F(OrderedSimpleTaskRunnerTest, OrderingTestWithDelayedTasks) { 63 TEST_F(OrderedSimpleTaskRunnerTest, OrderingTestWithDelayedTasksAutoNow) {
64 task_runner_->SetAdvanceNow(true);
58 CreateAndPostTask(1, base::TimeDelta()); 65 CreateAndPostTask(1, base::TimeDelta());
59 CreateAndPostTask(2, base::TimeDelta::FromMilliseconds(15)); 66 CreateAndPostTask(2, base::TimeDelta::FromMilliseconds(15));
60 CreateAndPostTask(3, base::TimeDelta()); 67 CreateAndPostTask(3, base::TimeDelta());
61 CreateAndPostTask(4, base::TimeDelta::FromMilliseconds(8)); 68 CreateAndPostTask(4, base::TimeDelta::FromMilliseconds(8));
62 69
63 RunAndCheckResult("1 3 4 2"); 70 RUN_AND_CHECK_RESULT("1(0ms) 3(0ms) 4(8ms) 2(15ms)");
71 RUN_AND_CHECK_RESULT("");
72 }
73
74 TEST_F(OrderedSimpleTaskRunnerTest, OrderingTestWithDelayedTasksManualNow) {
75 task_runner_->SetAdvanceNow(false);
76 CreateAndPostTask(1, base::TimeDelta());
77 CreateAndPostTask(2, base::TimeDelta::FromMilliseconds(15));
78 CreateAndPostTask(3, base::TimeDelta());
79 CreateAndPostTask(4, base::TimeDelta::FromMilliseconds(8));
80
81 RUN_AND_CHECK_RESULT("1(0ms) 3(0ms)");
82 RUN_AND_CHECK_RESULT("");
83 task_runner_->SetNow(base::TimeTicks::FromInternalValue(25000));
84 RUN_AND_CHECK_RESULT("4(25ms) 2(25ms)");
85 RUN_AND_CHECK_RESULT("");
64 } 86 }
65 87
66 } // namespace cc 88 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698