| 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(); \
|
| + 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,
|
| + 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);
|
| + }
|
| +
|
| + 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
|
|
|