Home | History | Annotate | Download | only in base
      1 // Copyright 2013 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 "base/callback_helpers.h"
      6 
      7 #include "base/bind.h"
      8 #include "base/callback.h"
      9 #include "testing/gtest/include/gtest/gtest.h"
     10 
     11 namespace {
     12 
     13 void Increment(int* value) {
     14   (*value)++;
     15 }
     16 
     17 TEST(BindHelpersTest, TestScopedClosureRunnerExitScope) {
     18   int run_count = 0;
     19   {
     20     base::ScopedClosureRunner runner(base::Bind(&Increment, &run_count));
     21     EXPECT_EQ(0, run_count);
     22   }
     23   EXPECT_EQ(1, run_count);
     24 }
     25 
     26 TEST(BindHelpersTest, TestScopedClosureRunnerRelease) {
     27   int run_count = 0;
     28   base::Closure c;
     29   {
     30     base::ScopedClosureRunner runner(base::Bind(&Increment, &run_count));
     31     c = runner.Release();
     32     EXPECT_EQ(0, run_count);
     33   }
     34   EXPECT_EQ(0, run_count);
     35   c.Run();
     36   EXPECT_EQ(1, run_count);
     37 }
     38 
     39 TEST(BindHelpersTest, TestScopedClosureRunnerReset) {
     40   int run_count_1 = 0;
     41   int run_count_2 = 0;
     42   {
     43     base::ScopedClosureRunner runner;
     44     runner.Reset(base::Bind(&Increment, &run_count_1));
     45     runner.Reset(base::Bind(&Increment, &run_count_2));
     46     EXPECT_EQ(1, run_count_1);
     47     EXPECT_EQ(0, run_count_2);
     48   }
     49   EXPECT_EQ(1, run_count_2);
     50 
     51   int run_count_3 = 0;
     52   {
     53     base::ScopedClosureRunner runner(base::Bind(&Increment, &run_count_3));
     54     EXPECT_EQ(0, run_count_3);
     55     runner.Reset();
     56     EXPECT_EQ(1, run_count_3);
     57   }
     58   EXPECT_EQ(1, run_count_3);
     59 }
     60 
     61 }  // namespace
     62