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