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 3 // found in the LICENSE file. 4 5 #include "components/gcm_driver/gcm_delayed_task_controller.h" 6 7 #include "base/bind.h" 8 #include "testing/gtest/include/gtest/gtest.h" 9 10 namespace gcm { 11 12 class GCMDelayedTaskControllerTest : public testing::Test { 13 public: 14 GCMDelayedTaskControllerTest(); 15 virtual ~GCMDelayedTaskControllerTest(); 16 17 void TestTask(); 18 19 GCMDelayedTaskController* controller() { return controller_.get(); } 20 21 int number_of_triggered_tasks() const { return number_of_triggered_tasks_; } 22 23 private: 24 scoped_ptr<GCMDelayedTaskController> controller_; 25 int number_of_triggered_tasks_; 26 }; 27 28 GCMDelayedTaskControllerTest::GCMDelayedTaskControllerTest() 29 : controller_(new GCMDelayedTaskController), number_of_triggered_tasks_(0) { 30 } 31 32 GCMDelayedTaskControllerTest::~GCMDelayedTaskControllerTest() { 33 } 34 35 void GCMDelayedTaskControllerTest::TestTask() { 36 ++number_of_triggered_tasks_; 37 } 38 39 // Tests that a newly created controller forced tasks to be delayed, while 40 // calling SetReady allows tasks to execute. 41 TEST_F(GCMDelayedTaskControllerTest, SetReadyWithNoTasks) { 42 EXPECT_FALSE(controller()->CanRunTaskWithoutDelay()); 43 EXPECT_EQ(0, number_of_triggered_tasks()); 44 45 controller()->SetReady(); 46 EXPECT_TRUE(controller()->CanRunTaskWithoutDelay()); 47 EXPECT_EQ(0, number_of_triggered_tasks()); 48 } 49 50 // Tests that tasks are triggered when controlles is set to ready. 51 TEST_F(GCMDelayedTaskControllerTest, PendingTasksTriggeredWhenSetReady) { 52 controller()->AddTask(base::Bind(&GCMDelayedTaskControllerTest::TestTask, 53 base::Unretained(this))); 54 controller()->AddTask(base::Bind(&GCMDelayedTaskControllerTest::TestTask, 55 base::Unretained(this))); 56 57 controller()->SetReady(); 58 EXPECT_EQ(2, number_of_triggered_tasks()); 59 } 60 61 } // namespace gcm 62