blob: 956e77ff653bdbacc4f584feac965563816d0ffd [file] [log] [blame]
[email protected]ac4c6682012-01-04 00:57:391// Copyright (c) 2012 The Chromium Authors. All rights reserved.
[email protected]0384f842010-12-16 19:55:092// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
[email protected]0b5266d2011-10-04 15:28:035#include "base/bind.h"
[email protected]3b63f8f42011-03-28 01:54:156#include "base/memory/ref_counted.h"
[email protected]0384f842010-12-16 19:55:097#include "base/task.h"
8#include "testing/gtest/include/gtest/gtest.h"
9
10namespace {
11
[email protected]31ab49f2011-05-27 19:35:1112class DoneTask : public Task {
13 public:
14 DoneTask(int* run_count, bool* was_deleted)
15 : run_count_(run_count), was_deleted_(was_deleted) {
16 }
17 virtual ~DoneTask() {
18 *was_deleted_ = true;
19 }
20
21 virtual void Run() {
22 ++(*run_count_);
23 }
24
25 int* run_count_;
26 bool* was_deleted_;
27};
28
29TEST(TaskTest, TestScopedTaskRunnerExitScope) {
30 int run_count = 0;
31 bool was_deleted = false;
32 {
33 base::ScopedTaskRunner runner(new DoneTask(&run_count, &was_deleted));
34 EXPECT_EQ(0, run_count);
35 }
36 EXPECT_EQ(1, run_count);
37 EXPECT_TRUE(was_deleted);
38}
39
40TEST(TaskTest, TestScopedTaskRunnerRelease) {
41 int run_count = 0;
42 bool was_deleted = false;
43 {
44 base::ScopedTaskRunner runner(new DoneTask(&run_count, &was_deleted));
45 delete runner.Release();
46 EXPECT_TRUE(was_deleted);
47 }
48 EXPECT_EQ(0, run_count);
49}
50
51TEST(TaskTest, TestScopedTaskRunnerManualRun) {
52 int run_count = 0;
53 Task* done_task = NULL;
54 bool was_deleted = false;
55 {
56 base::ScopedTaskRunner runner(new DoneTask(&run_count, &was_deleted));
57 done_task = runner.Release();
58 EXPECT_TRUE(NULL != done_task);
59 EXPECT_FALSE(was_deleted);
60 EXPECT_EQ(0, run_count);
61 done_task->Run();
62 EXPECT_FALSE(was_deleted);
63 EXPECT_EQ(1, run_count);
64 }
65 EXPECT_EQ(1, run_count);
66 delete done_task;
67 EXPECT_TRUE(was_deleted);
68}
69
[email protected]0b5266d2011-10-04 15:28:0370void Increment(int* value) {
71 (*value)++;
72}
73
74TEST(TaskTest, TestScopedClosureRunnerExitScope) {
75 int run_count = 0;
76 {
[email protected]7296f2762011-11-21 19:23:4477 base::ScopedClosureRunner runner(base::Bind(&Increment, &run_count));
[email protected]0b5266d2011-10-04 15:28:0378 EXPECT_EQ(0, run_count);
79 }
80 EXPECT_EQ(1, run_count);
81}
82
83TEST(TaskTest, TestScopedClosureRunnerRelease) {
84 int run_count = 0;
85 base::Closure c;
86 {
[email protected]7296f2762011-11-21 19:23:4487 base::ScopedClosureRunner runner(base::Bind(&Increment, &run_count));
[email protected]0b5266d2011-10-04 15:28:0388 c = runner.Release();
89 EXPECT_EQ(0, run_count);
90 }
91 EXPECT_EQ(0, run_count);
92 c.Run();
93 EXPECT_EQ(1, run_count);
94}
95
[email protected]0384f842010-12-16 19:55:0996} // namespace