[email protected] | ac4c668 | 2012-01-04 00:57:39 | [diff] [blame^] | 1 | // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
[email protected] | 0384f84 | 2010-12-16 19:55:09 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
[email protected] | 0b5266d | 2011-10-04 15:28:03 | [diff] [blame] | 5 | #include "base/bind.h" |
[email protected] | 3b63f8f4 | 2011-03-28 01:54:15 | [diff] [blame] | 6 | #include "base/memory/ref_counted.h" |
[email protected] | 0384f84 | 2010-12-16 19:55:09 | [diff] [blame] | 7 | #include "base/task.h" |
| 8 | #include "testing/gtest/include/gtest/gtest.h" |
| 9 | |
| 10 | namespace { |
| 11 | |
[email protected] | 31ab49f | 2011-05-27 19:35:11 | [diff] [blame] | 12 | class 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 | |
| 29 | TEST(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 | |
| 40 | TEST(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 | |
| 51 | TEST(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] | 0b5266d | 2011-10-04 15:28:03 | [diff] [blame] | 70 | void Increment(int* value) { |
| 71 | (*value)++; |
| 72 | } |
| 73 | |
| 74 | TEST(TaskTest, TestScopedClosureRunnerExitScope) { |
| 75 | int run_count = 0; |
| 76 | { |
[email protected] | 7296f276 | 2011-11-21 19:23:44 | [diff] [blame] | 77 | base::ScopedClosureRunner runner(base::Bind(&Increment, &run_count)); |
[email protected] | 0b5266d | 2011-10-04 15:28:03 | [diff] [blame] | 78 | EXPECT_EQ(0, run_count); |
| 79 | } |
| 80 | EXPECT_EQ(1, run_count); |
| 81 | } |
| 82 | |
| 83 | TEST(TaskTest, TestScopedClosureRunnerRelease) { |
| 84 | int run_count = 0; |
| 85 | base::Closure c; |
| 86 | { |
[email protected] | 7296f276 | 2011-11-21 19:23:44 | [diff] [blame] | 87 | base::ScopedClosureRunner runner(base::Bind(&Increment, &run_count)); |
[email protected] | 0b5266d | 2011-10-04 15:28:03 | [diff] [blame] | 88 | 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] | 0384f84 | 2010-12-16 19:55:09 | [diff] [blame] | 96 | } // namespace |