1 // Copyright (c) 2012 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 #import "base/mac/bind_objc_block.h" 6 7 #include "base/callback.h" 8 #include "base/bind.h" 9 #include "base/callback_helpers.h" 10 #include "testing/gtest/include/gtest/gtest.h" 11 12 namespace { 13 14 TEST(BindObjcBlockTest, TestScopedClosureRunnerExitScope) { 15 int run_count = 0; 16 int* ptr = &run_count; 17 { 18 base::ScopedClosureRunner runner(base::BindBlock(^{ 19 (*ptr)++; 20 })); 21 EXPECT_EQ(0, run_count); 22 } 23 EXPECT_EQ(1, run_count); 24 } 25 26 TEST(BindObjcBlockTest, TestScopedClosureRunnerRelease) { 27 int run_count = 0; 28 int* ptr = &run_count; 29 base::Closure c; 30 { 31 base::ScopedClosureRunner runner(base::BindBlock(^{ 32 (*ptr)++; 33 })); 34 c = runner.Release(); 35 EXPECT_EQ(0, run_count); 36 } 37 EXPECT_EQ(0, run_count); 38 c.Run(); 39 EXPECT_EQ(1, run_count); 40 } 41 42 TEST(BindObjcBlockTest, TestReturnValue) { 43 const int kReturnValue = 42; 44 base::Callback<int(void)> c = base::BindBlock(^{return kReturnValue;}); 45 EXPECT_EQ(kReturnValue, c.Run()); 46 } 47 48 TEST(BindObjcBlockTest, TestArgument) { 49 const int kArgument = 42; 50 base::Callback<int(int)> c = base::BindBlock(^(int a){return a + 1;}); 51 EXPECT_EQ(kArgument + 1, c.Run(kArgument)); 52 } 53 54 } // namespace 55