Roll BoringSSL e49da74:5fa3eba
[chromium-blink-merge.git] / base / task_runner_util_unittest.cc
blob481f09ebd197c0d40d541d3bb7054d1a1abce7f5
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.
5 #include "base/task_runner_util.h"
7 #include "base/bind.h"
8 #include "base/message_loop/message_loop.h"
9 #include "base/run_loop.h"
10 #include "testing/gtest/include/gtest/gtest.h"
12 namespace base {
14 namespace {
16 int ReturnFourtyTwo() {
17 return 42;
20 void StoreValue(int* destination, int value) {
21 *destination = value;
24 void StoreDoubleValue(double* destination, double value) {
25 *destination = value;
28 int g_foo_destruct_count = 0;
29 int g_foo_free_count = 0;
31 struct Foo {
32 ~Foo() {
33 ++g_foo_destruct_count;
37 scoped_ptr<Foo> CreateFoo() {
38 return scoped_ptr<Foo>(new Foo);
41 void ExpectFoo(scoped_ptr<Foo> foo) {
42 EXPECT_TRUE(foo.get());
43 scoped_ptr<Foo> local_foo(foo.Pass());
44 EXPECT_TRUE(local_foo.get());
45 EXPECT_FALSE(foo.get());
48 struct FooDeleter {
49 void operator()(Foo* foo) const {
50 ++g_foo_free_count;
51 delete foo;
55 scoped_ptr<Foo, FooDeleter> CreateScopedFoo() {
56 return scoped_ptr<Foo, FooDeleter>(new Foo);
59 void ExpectScopedFoo(scoped_ptr<Foo, FooDeleter> foo) {
60 EXPECT_TRUE(foo.get());
61 scoped_ptr<Foo, FooDeleter> local_foo(foo.Pass());
62 EXPECT_TRUE(local_foo.get());
63 EXPECT_FALSE(foo.get());
66 } // namespace
68 TEST(TaskRunnerHelpersTest, PostTaskAndReplyWithResult) {
69 int result = 0;
71 MessageLoop message_loop;
72 PostTaskAndReplyWithResult(message_loop.message_loop_proxy().get(),
73 FROM_HERE,
74 Bind(&ReturnFourtyTwo),
75 Bind(&StoreValue, &result));
77 RunLoop().RunUntilIdle();
79 EXPECT_EQ(42, result);
82 TEST(TaskRunnerHelpersTest, PostTaskAndReplyWithResultImplicitConvert) {
83 double result = 0;
85 MessageLoop message_loop;
86 PostTaskAndReplyWithResult(message_loop.message_loop_proxy().get(),
87 FROM_HERE,
88 Bind(&ReturnFourtyTwo),
89 Bind(&StoreDoubleValue, &result));
91 RunLoop().RunUntilIdle();
93 EXPECT_DOUBLE_EQ(42.0, result);
96 TEST(TaskRunnerHelpersTest, PostTaskAndReplyWithResultPassed) {
97 g_foo_destruct_count = 0;
98 g_foo_free_count = 0;
100 MessageLoop message_loop;
101 PostTaskAndReplyWithResult(message_loop.message_loop_proxy().get(),
102 FROM_HERE,
103 Bind(&CreateFoo),
104 Bind(&ExpectFoo));
106 RunLoop().RunUntilIdle();
108 EXPECT_EQ(1, g_foo_destruct_count);
109 EXPECT_EQ(0, g_foo_free_count);
112 TEST(TaskRunnerHelpersTest, PostTaskAndReplyWithResultPassedFreeProc) {
113 g_foo_destruct_count = 0;
114 g_foo_free_count = 0;
116 MessageLoop message_loop;
117 PostTaskAndReplyWithResult(message_loop.message_loop_proxy().get(),
118 FROM_HERE,
119 Bind(&CreateScopedFoo),
120 Bind(&ExpectScopedFoo));
122 RunLoop().RunUntilIdle();
124 EXPECT_EQ(1, g_foo_destruct_count);
125 EXPECT_EQ(1, g_foo_free_count);
128 } // namespace base