Home | History | Annotate | Download | only in mac
      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/bind_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