Home | History | Annotate | Download | only in gcm_driver
      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