Chromium Code Reviews| Index: cc/test/ordered_simple_task_runner_unittest.cc |
| diff --git a/cc/test/ordered_simple_task_runner_unittest.cc b/cc/test/ordered_simple_task_runner_unittest.cc |
| index 3fbfd3b73ccff069f1ac7b58bf259254ec6a56e6..9e8cbb9b6d3807b2376561748734600821a2fbd6 100644 |
| --- a/cc/test/ordered_simple_task_runner_unittest.cc |
| +++ b/cc/test/ordered_simple_task_runner_unittest.cc |
| @@ -11,6 +11,11 @@ |
| #include "cc/test/ordered_simple_task_runner.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| +#define RUN_AND_CHECK_RESULT(expected_result) \ |
| + task_runner_->RunPendingTasks(); \ |
|
Sami
2014/07/16 14:36:54
nit: indent by two more?
|
| + EXPECT_EQ(expected_result, executed_tasks_); \ |
| + executed_tasks_ = ""; |
| + |
| namespace cc { |
| class OrderedSimpleTaskRunnerTest : public testing::Test { |
| @@ -21,46 +26,202 @@ class OrderedSimpleTaskRunnerTest : public testing::Test { |
| virtual ~OrderedSimpleTaskRunnerTest() {} |
| protected: |
| - void CreateAndPostTask(int task_num, base::TimeDelta delay) { |
| + std::string executed_tasks_; |
| + scoped_refptr<OrderedSimpleTaskRunner> task_runner_; |
| + |
| + void PostTask(int task_num, base::TimeDelta delay) { |
| base::Closure test_task = base::Bind(&OrderedSimpleTaskRunnerTest::Task, |
| base::Unretained(this), |
| task_num); |
| task_runner_->PostDelayedTask(FROM_HERE, test_task, delay); |
| } |
| - void RunAndCheckResult(const std::string expected_result) { |
| - task_runner_->RunPendingTasks(); |
| - EXPECT_EQ(expected_result, executed_tasks_); |
| + void PostTaskWhichPostsInstantTask(int task_num, base::TimeDelta delay) { |
| + base::Closure test_task = |
| + base::Bind(&OrderedSimpleTaskRunnerTest::TaskWhichPostsInstantTask, |
| + base::Unretained(this), |
| + task_num); |
| + task_runner_->PostDelayedTask(FROM_HERE, test_task, delay); |
| } |
| - private: |
| - std::string executed_tasks_; |
| - scoped_refptr<OrderedSimpleTaskRunner> task_runner_; |
| + void PostTaskWhichPostsDelayedTask(int task_num, |
|
brianderson
2014/07/18 00:23:16
PostDelayedTaskWhichPostsDelayedTask?
|
| + base::TimeDelta delay1, |
| + base::TimeDelta delay2) { |
| + base::Closure test_task = |
| + base::Bind(&OrderedSimpleTaskRunnerTest::TaskWhichPostsDelayedTask, |
| + base::Unretained(this), |
| + task_num, |
| + delay2); |
| + task_runner_->PostDelayedTask(FROM_HERE, test_task, delay1); |
| + } |
| + void PostTaskWhichCallsRun(int task_num, base::TimeDelta delay) { |
| + base::Closure test_task = |
| + base::Bind(&OrderedSimpleTaskRunnerTest::TaskWhichCallsRun, |
| + base::Unretained(this), |
| + task_num); |
| + task_runner_->PostDelayedTask(FROM_HERE, test_task, delay); |
| + } |
| + |
| + private: |
| void Task(int task_num) { |
| if (!executed_tasks_.empty()) |
| executed_tasks_ += " "; |
| executed_tasks_ += base::StringPrintf("%d", task_num); |
| } |
| + void TaskWhichPostsInstantTask(int task_num) { |
| + Task(task_num); |
| + PostTask(-task_num, base::TimeDelta()); |
| + } |
| + |
| + void TaskWhichPostsDelayedTask(int task_num, base::TimeDelta delay) { |
| + Task(task_num); |
| + PostTask(-task_num, delay); |
|
brianderson
2014/07/18 00:23:16
Using -task_num is a simple trick to figure out if
|
| + } |
| + |
| + void TaskWhichCallsRun(int task_num) { |
| + Task(task_num); |
| + task_runner_->RunPendingTasks(); |
| + } |
| + |
| DISALLOW_COPY_AND_ASSIGN(OrderedSimpleTaskRunnerTest); |
| }; |
| -TEST_F(OrderedSimpleTaskRunnerTest, BasicOrderingTest) { |
| - CreateAndPostTask(1, base::TimeDelta()); |
| - CreateAndPostTask(2, base::TimeDelta()); |
| - CreateAndPostTask(3, base::TimeDelta()); |
| +TEST_F(OrderedSimpleTaskRunnerTest, SimpleOrderingTest) { |
| + PostTask(1, base::TimeDelta()); |
| + PostTask(2, base::TimeDelta()); |
| + PostTask(3, base::TimeDelta()); |
| - RunAndCheckResult("1 2 3"); |
| + RUN_AND_CHECK_RESULT("1 2 3"); |
| + RUN_AND_CHECK_RESULT(""); |
| +} |
| + |
| +TEST_F(OrderedSimpleTaskRunnerTest, SimpleOrderingTestPostingTasks) { |
| + PostTaskWhichPostsInstantTask(1, base::TimeDelta()); |
| + PostTaskWhichPostsInstantTask(2, base::TimeDelta()); |
| + PostTaskWhichPostsInstantTask(3, base::TimeDelta()); |
| + |
| + RUN_AND_CHECK_RESULT("1 2 3"); |
| + RUN_AND_CHECK_RESULT("-1 -2 -3"); |
| + RUN_AND_CHECK_RESULT(""); |
| +} |
| + |
| +TEST_F(OrderedSimpleTaskRunnerTest, SimpleOrderingTestPostingDelayedTasks) { |
| + PostTaskWhichPostsDelayedTask( |
| + 1, base::TimeDelta(), base::TimeDelta::FromMilliseconds(1)); |
| + PostTaskWhichPostsDelayedTask( |
| + 2, base::TimeDelta(), base::TimeDelta::FromMilliseconds(1)); |
| + PostTaskWhichPostsDelayedTask( |
| + 3, base::TimeDelta(), base::TimeDelta::FromMilliseconds(1)); |
| + |
| + RUN_AND_CHECK_RESULT("1 2 3"); |
| + RUN_AND_CHECK_RESULT("-1 -2 -3"); |
| + RUN_AND_CHECK_RESULT(""); |
| +} |
| + |
| +TEST_F(OrderedSimpleTaskRunnerTest, |
| + SimpleOrderingTestPostingReordingDelayedTasks) { |
| + PostTaskWhichPostsDelayedTask(1, |
| + base::TimeDelta::FromMilliseconds(1), |
| + base::TimeDelta::FromMilliseconds(20)); |
| + PostTaskWhichPostsDelayedTask(2, |
| + base::TimeDelta::FromMilliseconds(2), |
| + base::TimeDelta::FromMilliseconds(5)); |
| + PostTaskWhichPostsDelayedTask(3, |
| + base::TimeDelta::FromMilliseconds(3), |
| + base::TimeDelta::FromMilliseconds(5)); |
| + |
| + RUN_AND_CHECK_RESULT("1 2 3"); |
| + RUN_AND_CHECK_RESULT("-2 -3 -1"); |
| + RUN_AND_CHECK_RESULT(""); |
| +} |
| + |
| +TEST_F(OrderedSimpleTaskRunnerTest, |
| + SimpleOrderingTestPostingReordingDelayedTasksOverlap) { |
| + // 1@1ms, -1@6ms |
| + PostTaskWhichPostsDelayedTask(1, |
| + base::TimeDelta::FromMilliseconds(1), |
| + base::TimeDelta::FromMilliseconds(5)); |
| + // 2@5ms, -2@15ms |
| + PostTaskWhichPostsDelayedTask(2, |
| + base::TimeDelta::FromMilliseconds(5), |
| + base::TimeDelta::FromMilliseconds(10)); |
| + // 3@10ms, -3@11ms |
| + PostTaskWhichPostsDelayedTask(3, |
| + base::TimeDelta::FromMilliseconds(10), |
| + base::TimeDelta::FromMilliseconds(1)); |
| + |
| + /* Correct behaviour |
| + RUN_AND_CHECK_RESULT("1 2"); |
| + RUN_AND_CHECK_RESULT("-1 3"); |
| + RUN_AND_CHECK_RESULT("-3 -2"); |
| + RUN_AND_CHECK_RESULT(""); |
| + */ |
| + RUN_AND_CHECK_RESULT("1 2 3"); |
| + RUN_AND_CHECK_RESULT("-3 -1 -2"); // <---- !!!!!! -1@6ms, -3@11ms |
| + RUN_AND_CHECK_RESULT(""); |
| +} |
| + |
| +TEST_F(OrderedSimpleTaskRunnerTest, SimpleOrderingTestPostingAndRentrantTasks) { |
| + PostTaskWhichPostsInstantTask(1, base::TimeDelta()); |
| + PostTaskWhichCallsRun(2, base::TimeDelta()); |
| + PostTaskWhichPostsInstantTask(3, base::TimeDelta()); |
| + |
| + /* Correct behaviour |
| + RUN_AND_CHECK_RESULT("1 2 3"); |
| + RUN_AND_CHECK_RESULT("-1 -3"); |
| + RUN_AND_CHECK_RESULT(""); |
| + */ |
| + RUN_AND_CHECK_RESULT("1 2 -1 3"); |
| + RUN_AND_CHECK_RESULT("-3"); |
| + RUN_AND_CHECK_RESULT(""); |
| +} |
| + |
| +TEST_F(OrderedSimpleTaskRunnerTest, |
| + SimpleOrderingTestPostingDelayedAndRentrantTasks) { |
| + PostTaskWhichPostsDelayedTask( |
| + 1, base::TimeDelta(), base::TimeDelta::FromMilliseconds(1)); |
| + PostTaskWhichCallsRun(2, base::TimeDelta()); |
| + PostTaskWhichPostsDelayedTask( |
| + 3, base::TimeDelta(), base::TimeDelta::FromMilliseconds(1)); |
| + |
| + /* Correct behaviour |
| + RUN_AND_CHECK_RESULT("1 2 3"); |
| + RUN_AND_CHECK_RESULT("-1 -3"); |
| + RUN_AND_CHECK_RESULT(""); |
| + */ |
| + RUN_AND_CHECK_RESULT("1 2 -1 3"); |
| + RUN_AND_CHECK_RESULT("-3"); |
| + RUN_AND_CHECK_RESULT(""); |
| } |
| TEST_F(OrderedSimpleTaskRunnerTest, OrderingTestWithDelayedTasks) { |
| - CreateAndPostTask(1, base::TimeDelta()); |
| - CreateAndPostTask(2, base::TimeDelta::FromMilliseconds(15)); |
| - CreateAndPostTask(3, base::TimeDelta()); |
| - CreateAndPostTask(4, base::TimeDelta::FromMilliseconds(8)); |
| + PostTask(1, base::TimeDelta()); |
| + PostTask(2, base::TimeDelta::FromMilliseconds(15)); |
| + PostTask(3, base::TimeDelta()); |
| + PostTask(4, base::TimeDelta::FromMilliseconds(8)); |
| + |
| + RUN_AND_CHECK_RESULT("1 3 4 2"); |
| + RUN_AND_CHECK_RESULT(""); |
| +} |
| + |
| +TEST_F(OrderedSimpleTaskRunnerTest, OrderingTestWithDelayedPostingTasks) { |
| + PostTaskWhichPostsInstantTask(1, base::TimeDelta()); |
| + PostTaskWhichPostsInstantTask(2, base::TimeDelta::FromMilliseconds(15)); |
| + PostTaskWhichPostsInstantTask(3, base::TimeDelta()); |
| + PostTaskWhichPostsInstantTask(4, base::TimeDelta::FromMilliseconds(8)); |
| - RunAndCheckResult("1 3 4 2"); |
| + /* Correct behaviour |
| + RUN_AND_CHECK_RESULT("1 3"); |
| + RUN_AND_CHECK_RESULT("-1 -3 4"); |
| + RUN_AND_CHECK_RESULT("-4 2"); |
| + RUN_AND_CHECK_RESULT("-2"); |
| + RUN_AND_CHECK_RESULT(""); |
| + */ |
| + RUN_AND_CHECK_RESULT("1 3 4 2"); |
| + RUN_AND_CHECK_RESULT("-1 -3 -4 -2"); |
| + RUN_AND_CHECK_RESULT(""); |
| } |
| } // namespace cc |