Index: components/gcm_driver/gcm_delayed_task_controller_unittest.cc |
diff --git a/components/gcm_driver/gcm_delayed_task_controller_unittest.cc b/components/gcm_driver/gcm_delayed_task_controller_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9b49d42eea13f1d761c4c4d4f1d0a0c684ba77a6 |
--- /dev/null |
+++ b/components/gcm_driver/gcm_delayed_task_controller_unittest.cc |
@@ -0,0 +1,61 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "components/gcm_driver/gcm_delayed_task_controller.h" |
+ |
+#include "base/bind.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace gcm { |
+ |
+class GCMDelayedTaskControllerTest : public testing::Test { |
+ public: |
+ GCMDelayedTaskControllerTest(); |
+ virtual ~GCMDelayedTaskControllerTest(); |
+ |
+ void TestTask(); |
+ |
+ GCMDelayedTaskController* controller() { return controller_.get(); } |
+ |
+ int number_of_triggered_tasks() const { return number_of_triggered_tasks_; } |
+ |
+ private: |
+ scoped_ptr<GCMDelayedTaskController> controller_; |
+ int number_of_triggered_tasks_; |
+}; |
+ |
+GCMDelayedTaskControllerTest::GCMDelayedTaskControllerTest() |
+ : controller_(new GCMDelayedTaskController), number_of_triggered_tasks_(0) { |
+} |
+ |
+GCMDelayedTaskControllerTest::~GCMDelayedTaskControllerTest() { |
+} |
+ |
+void GCMDelayedTaskControllerTest::TestTask() { |
+ ++number_of_triggered_tasks_; |
+} |
+ |
+// Tests that a newly created controller forced tasks to be delayed, while |
+// calling SetReady allows tasks to execute. |
+TEST_F(GCMDelayedTaskControllerTest, SetReadyWithNoTasks) { |
+ EXPECT_FALSE(controller()->CanRunTaskWithoutDelay()); |
+ EXPECT_EQ(0, number_of_triggered_tasks()); |
+ |
+ controller()->SetReady(); |
+ EXPECT_TRUE(controller()->CanRunTaskWithoutDelay()); |
+ EXPECT_EQ(0, number_of_triggered_tasks()); |
+} |
+ |
+// Tests that tasks are triggered when controlles is set to ready. |
+TEST_F(GCMDelayedTaskControllerTest, PendingTasksTriggeredWhenSetReady) { |
+ controller()->AddTask(base::Bind(&GCMDelayedTaskControllerTest::TestTask, |
+ base::Unretained(this))); |
+ controller()->AddTask(base::Bind(&GCMDelayedTaskControllerTest::TestTask, |
+ base::Unretained(this))); |
+ |
+ controller()->SetReady(); |
+ EXPECT_EQ(2, number_of_triggered_tasks()); |
+} |
+ |
+} // namespace gcm |