Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / base / mac / bind_objc_block_unittest.mm
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 <string>
8
9 #include "base/callback.h"
10 #include "base/bind.h"
11 #include "base/callback_helpers.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13
14 namespace {
15
16 TEST(BindObjcBlockTest, TestScopedClosureRunnerExitScope) {
17   int run_count = 0;
18   int* ptr = &run_count;
19   {
20     base::ScopedClosureRunner runner(base::BindBlock(^{
21         (*ptr)++;
22     }));
23     EXPECT_EQ(0, run_count);
24   }
25   EXPECT_EQ(1, run_count);
26 }
27
28 TEST(BindObjcBlockTest, TestScopedClosureRunnerRelease) {
29   int run_count = 0;
30   int* ptr = &run_count;
31   base::Closure c;
32   {
33     base::ScopedClosureRunner runner(base::BindBlock(^{
34         (*ptr)++;
35     }));
36     c = runner.Release();
37     EXPECT_EQ(0, run_count);
38   }
39   EXPECT_EQ(0, run_count);
40   c.Run();
41   EXPECT_EQ(1, run_count);
42 }
43
44 TEST(BindObjcBlockTest, TestReturnValue) {
45   const int kReturnValue = 42;
46   base::Callback<int(void)> c = base::BindBlock(^{return kReturnValue;});
47   EXPECT_EQ(kReturnValue, c.Run());
48 }
49
50 TEST(BindObjcBlockTest, TestArgument) {
51   const int kArgument = 42;
52   base::Callback<int(int)> c = base::BindBlock(^(int a){return a + 1;});
53   EXPECT_EQ(kArgument + 1, c.Run(kArgument));
54 }
55
56 TEST(BindObjcBlockTest, TestTwoArguments) {
57   std::string result;
58   std::string* ptr = &result;
59   base::Callback<void(const std::string&, const std::string&)> c =
60       base::BindBlock(^(const std::string& a, const std::string& b) {
61           *ptr = a + b;
62       });
63   c.Run("forty", "two");
64   EXPECT_EQ(result, "fortytwo");
65 }
66
67 }  // namespace