Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(458)

Side by Side Diff: base/threading/thread_task_runner_handle_unittest.cc

Issue 2657013002: Introduce ThreadTaskRunnerHandle::OverrideForTesting and TestMockTimeTaskRunner::ScopedContext. (Closed)
Patch Set: fix RecentTabHelperTest crash? Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2017 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 #include "base/threading/thread_task_runner_handle.h"
6
7 #include "base/memory/ref_counted.h"
8 #include "base/test/gtest_util.h"
9 #include "base/test/test_simple_task_runner.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11
12 namespace base {
13
14 TEST(ThreadTaskRunnerHandleTest, Basic) {
15 scoped_refptr<SingleThreadTaskRunner> task_runner(new TestSimpleTaskRunner);
16
17 EXPECT_FALSE(ThreadTaskRunnerHandle::IsSet());
18 {
19 ThreadTaskRunnerHandle ttrh1(task_runner);
20 EXPECT_TRUE(ThreadTaskRunnerHandle::IsSet());
21 EXPECT_EQ(task_runner, ThreadTaskRunnerHandle::Get());
22 }
23 EXPECT_FALSE(ThreadTaskRunnerHandle::IsSet());
24 }
25
26 TEST(ThreadTaskRunnerHandleTest, DeathOnImplicitOverride) {
27 scoped_refptr<SingleThreadTaskRunner> task_runner(new TestSimpleTaskRunner);
28 scoped_refptr<SingleThreadTaskRunner> overidding_task_runner(
29 new TestSimpleTaskRunner);
30
31 ThreadTaskRunnerHandle ttrh(task_runner);
32 EXPECT_DCHECK_DEATH(
33 { ThreadTaskRunnerHandle overriding_ttrh(overidding_task_runner); });
34 }
35
36 TEST(ThreadTaskRunnerHandleTest, OverrideForTestingExistingTTRH) {
37 scoped_refptr<SingleThreadTaskRunner> task_runner_1(new TestSimpleTaskRunner);
38 scoped_refptr<SingleThreadTaskRunner> task_runner_2(new TestSimpleTaskRunner);
39 scoped_refptr<SingleThreadTaskRunner> task_runner_3(new TestSimpleTaskRunner);
40 scoped_refptr<SingleThreadTaskRunner> task_runner_4(new TestSimpleTaskRunner);
41
42 EXPECT_FALSE(ThreadTaskRunnerHandle::IsSet());
43 {
44 // TTRH in place prior to override.
45 ThreadTaskRunnerHandle ttrh1(task_runner_1);
46 EXPECT_TRUE(ThreadTaskRunnerHandle::IsSet());
47 EXPECT_EQ(task_runner_1, ThreadTaskRunnerHandle::Get());
48
49 {
50 // Override.
51 ScopedClosureRunner undo_override_2 =
52 ThreadTaskRunnerHandle::OverrideForTesting(task_runner_2);
53 EXPECT_TRUE(ThreadTaskRunnerHandle::IsSet());
54 EXPECT_EQ(task_runner_2, ThreadTaskRunnerHandle::Get());
55
56 {
57 // Nested override.
58 ScopedClosureRunner undo_override_3 =
59 ThreadTaskRunnerHandle::OverrideForTesting(task_runner_3);
60 EXPECT_TRUE(ThreadTaskRunnerHandle::IsSet());
61 EXPECT_EQ(task_runner_3, ThreadTaskRunnerHandle::Get());
62 }
63
64 // Back to single override.
65 EXPECT_TRUE(ThreadTaskRunnerHandle::IsSet());
66 EXPECT_EQ(task_runner_2, ThreadTaskRunnerHandle::Get());
67
68 {
69 // Backup to double override with another TTRH.
70 ScopedClosureRunner undo_override_4 =
71 ThreadTaskRunnerHandle::OverrideForTesting(task_runner_4);
72 EXPECT_TRUE(ThreadTaskRunnerHandle::IsSet());
73 EXPECT_EQ(task_runner_4, ThreadTaskRunnerHandle::Get());
74 }
75 }
76
77 // Back to simple TTRH.
78 EXPECT_TRUE(ThreadTaskRunnerHandle::IsSet());
79 EXPECT_EQ(task_runner_1, ThreadTaskRunnerHandle::Get());
80 }
81 EXPECT_FALSE(ThreadTaskRunnerHandle::IsSet());
82 }
83
84 TEST(ThreadTaskRunnerHandleTest, OverrideForTestingNoExistingTTRH) {
85 scoped_refptr<SingleThreadTaskRunner> task_runner_1(new TestSimpleTaskRunner);
86 scoped_refptr<SingleThreadTaskRunner> task_runner_2(new TestSimpleTaskRunner);
87
88 EXPECT_FALSE(ThreadTaskRunnerHandle::IsSet());
89 {
90 // Override with no TTRH in place.
91 ScopedClosureRunner undo_override_1 =
92 ThreadTaskRunnerHandle::OverrideForTesting(task_runner_1);
93 EXPECT_TRUE(ThreadTaskRunnerHandle::IsSet());
94 EXPECT_EQ(task_runner_1, ThreadTaskRunnerHandle::Get());
95
96 {
97 // Nested override works the same.
98 ScopedClosureRunner undo_override_2 =
99 ThreadTaskRunnerHandle::OverrideForTesting(task_runner_2);
100 EXPECT_TRUE(ThreadTaskRunnerHandle::IsSet());
101 EXPECT_EQ(task_runner_2, ThreadTaskRunnerHandle::Get());
102 }
103
104 // Back to single override.
105 EXPECT_TRUE(ThreadTaskRunnerHandle::IsSet());
106 EXPECT_EQ(task_runner_1, ThreadTaskRunnerHandle::Get());
107 }
108 EXPECT_FALSE(ThreadTaskRunnerHandle::IsSet());
109 }
110
111 TEST(ThreadTaskRunnerHandleTest, DeathOnTTRHOverOverride) {
112 scoped_refptr<SingleThreadTaskRunner> task_runner(new TestSimpleTaskRunner);
113 scoped_refptr<SingleThreadTaskRunner> overidding_task_runner(
114 new TestSimpleTaskRunner);
115
116 ScopedClosureRunner undo_override =
117 ThreadTaskRunnerHandle::OverrideForTesting(task_runner);
118 EXPECT_DCHECK_DEATH(
119 { ThreadTaskRunnerHandle overriding_ttrh(overidding_task_runner); });
120 }
121
122 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698