Index: base/task_scheduler/delayed_task_manager_unittest.cc |
diff --git a/base/task_scheduler/delayed_task_manager_unittest.cc b/base/task_scheduler/delayed_task_manager_unittest.cc |
index 8e6061d9c6b61d83985af9085ca74ca68e23b061..ce8cc0ea1f7f566c1fabd9f2dd77a808fdc59c4c 100644 |
--- a/base/task_scheduler/delayed_task_manager_unittest.cc |
+++ b/base/task_scheduler/delayed_task_manager_unittest.cc |
@@ -42,8 +42,7 @@ class MockTaskTarget { |
class TaskSchedulerDelayedTaskManagerTest : public testing::Test { |
public: |
TaskSchedulerDelayedTaskManagerTest() |
- : service_thread_task_runner_(new TestMockTimeTaskRunner), |
- delayed_task_manager_(service_thread_task_runner_) {} |
+ : service_thread_task_runner_(new TestMockTimeTaskRunner) {} |
~TaskSchedulerDelayedTaskManagerTest() override = default; |
protected: |
@@ -56,8 +55,52 @@ class TaskSchedulerDelayedTaskManagerTest : public testing::Test { |
} // namespace |
-// Verify that a delayed task isn't forwarded before it is ripe for execution. |
+// Verify that a delayed task isn't forwarded before Start(). |
+TEST_F(TaskSchedulerDelayedTaskManagerTest, DelayedTaskDoesNotRunBeforeStart) { |
+ auto task = |
+ MakeUnique<Task>(FROM_HERE, Bind(&DoNothing), TaskTraits(), kLongDelay); |
+ |
+ testing::StrictMock<MockTaskTarget> task_target; |
+ |
+ // Send |task| to the DelayedTaskManager. |
+ delayed_task_manager_.AddDelayedTask( |
+ std::move(task), |
+ Bind(&MockTaskTarget::PostTaskNowCallback, Unretained(&task_target))); |
gab
2017/04/12 19:15:51
BindOnce
fdoray
2017/04/19 15:37:55
Done.
|
+ |
+ // Fast-forward time. Don't expect any forwarding to |task_target|. |
gab
2017/04/12 19:15:51
What ensures this? Shouldn't your task trigger a f
fdoray
2017/04/19 15:37:55
Done.
|
+ service_thread_task_runner_->FastForwardBy(kLongDelay); |
+} |
+ |
+// Verify that a delayed task added before Start() is forwarded when it is ripe |
+// for execution and Start() is called. |
+TEST_F(TaskSchedulerDelayedTaskManagerTest, |
+ DelayedTaskPostedBeforeStartRunsAfterStart) { |
+ auto task = |
+ MakeUnique<Task>(FROM_HERE, Bind(&DoNothing), TaskTraits(), kLongDelay); |
+ const Task* task_raw = task.get(); |
+ |
+ testing::StrictMock<MockTaskTarget> task_target; |
+ |
+ // Send |task| to the DelayedTaskManager. |
+ delayed_task_manager_.AddDelayedTask( |
+ std::move(task), |
+ Bind(&MockTaskTarget::PostTaskNowCallback, Unretained(&task_target))); |
+ |
+ delayed_task_manager_.Start(service_thread_task_runner_); |
+ |
+ // Run tasks on the service thread. Don't expect any forwarding to |
+ // |task_target| since the task isn't ripe for execution. |
+ service_thread_task_runner_->RunUntilIdle(); |
+ |
+ // Fast-forward time. Expect the task to be forwarded to |task_target|. |
+ EXPECT_CALL(task_target, DoPostTaskNowCallback(task_raw)); |
+ service_thread_task_runner_->FastForwardBy(kLongDelay); |
+} |
gab
2017/04/12 19:15:51
Also test that task that became ripe before start
fdoray
2017/04/19 15:37:55
Done.
|
+ |
+// Verify that a delayed task added after Start() isn't forwarded before it is |
+// ripe for execution. |
TEST_F(TaskSchedulerDelayedTaskManagerTest, DelayedTaskDoesNotRunTooEarly) { |
+ delayed_task_manager_.Start(service_thread_task_runner_); |
auto task = |
MakeUnique<Task>(FROM_HERE, Bind(&DoNothing), TaskTraits(), kLongDelay); |
@@ -73,8 +116,10 @@ TEST_F(TaskSchedulerDelayedTaskManagerTest, DelayedTaskDoesNotRunTooEarly) { |
service_thread_task_runner_->RunUntilIdle(); |
} |
-// Verify that a delayed task is forwarded when it is ripe for execution. |
+// Verify that a delayed task added after Start() is forwarded when it is ripe |
+// for execution. |
TEST_F(TaskSchedulerDelayedTaskManagerTest, DelayedTaskRunsAfterDelay) { |
+ delayed_task_manager_.Start(service_thread_task_runner_); |
auto task = |
MakeUnique<Task>(FROM_HERE, Bind(&DoNothing), TaskTraits(), kLongDelay); |
const Task* task_raw = task.get(); |
@@ -91,9 +136,10 @@ TEST_F(TaskSchedulerDelayedTaskManagerTest, DelayedTaskRunsAfterDelay) { |
service_thread_task_runner_->FastForwardBy(kLongDelay); |
} |
-// Verify that multiple delayed tasks are forwarded when they are ripe for |
-// execution. |
+// Verify that multiple delayed tasks added after Start() are forwarded when |
+// they are ripe for execution. |
TEST_F(TaskSchedulerDelayedTaskManagerTest, DelayedTasksRunAfterDelay) { |
+ delayed_task_manager_.Start(service_thread_task_runner_); |
auto task_a = MakeUnique<Task>(FROM_HERE, Bind(&DoNothing), TaskTraits(), |
TimeDelta::FromHours(1)); |
const Task* task_a_raw = task_a.get(); |