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 11namespace { 12 13void Increment(int* value) { 14 (*value)++; 15} 16 17TEST(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 26TEST(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 39TEST(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