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

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

Issue 2162053006: Move EXPECT_DCHECK_DEATH from base/task_scheduler and use it in relevant base/ tests (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: merge up to r408965 Created 4 years, 4 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
« no previous file with comments | « base/threading/non_thread_safe_unittest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/threading/thread_checker.h" 5 #include "base/threading/thread_checker.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/macros.h" 10 #include "base/macros.h"
11 #include "base/test/gtest_util.h"
11 #include "base/threading/simple_thread.h" 12 #include "base/threading/simple_thread.h"
12 #include "testing/gtest/include/gtest/gtest.h" 13 #include "testing/gtest/include/gtest/gtest.h"
13 14
14 // Duplicated from base/threading/thread_checker.h so that we can be 15 // Duplicated from base/threading/thread_checker.h so that we can be
15 // good citizens there and undef the macro. 16 // good citizens there and undef the macro.
16 #if !defined(NDEBUG) || defined(DCHECK_ALWAYS_ON) 17 #if !defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)
17 #define ENABLE_THREAD_CHECKER 1 18 #define ENABLE_THREAD_CHECKER 1
18 #else 19 #else
19 #define ENABLE_THREAD_CHECKER 0 20 #define ENABLE_THREAD_CHECKER 0
20 #endif 21 #endif
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 112
112 // Verify that DoStuff doesn't assert when called on a different thread after 113 // Verify that DoStuff doesn't assert when called on a different thread after
113 // a call to DetachFromThread. 114 // a call to DetachFromThread.
114 thread_checker_class->DetachFromThread(); 115 thread_checker_class->DetachFromThread();
115 CallDoStuffOnThread call_on_thread(thread_checker_class.get()); 116 CallDoStuffOnThread call_on_thread(thread_checker_class.get());
116 117
117 call_on_thread.Start(); 118 call_on_thread.Start();
118 call_on_thread.Join(); 119 call_on_thread.Join();
119 } 120 }
120 121
121 #if GTEST_HAS_DEATH_TEST || !ENABLE_THREAD_CHECKER
122
123 void ThreadCheckerClass::MethodOnDifferentThreadImpl() { 122 void ThreadCheckerClass::MethodOnDifferentThreadImpl() {
124 std::unique_ptr<ThreadCheckerClass> thread_checker_class( 123 std::unique_ptr<ThreadCheckerClass> thread_checker_class(
125 new ThreadCheckerClass); 124 new ThreadCheckerClass);
126 125
127 // DoStuff should assert in debug builds only when called on a 126 // DoStuff should assert in debug builds only when called on a
128 // different thread. 127 // different thread.
129 CallDoStuffOnThread call_on_thread(thread_checker_class.get()); 128 CallDoStuffOnThread call_on_thread(thread_checker_class.get());
130 129
131 call_on_thread.Start(); 130 call_on_thread.Start();
132 call_on_thread.Join(); 131 call_on_thread.Join();
133 } 132 }
134 133
135 #if ENABLE_THREAD_CHECKER 134 #if ENABLE_THREAD_CHECKER
136 TEST(ThreadCheckerDeathTest, MethodNotAllowedOnDifferentThreadInDebug) { 135 TEST(ThreadCheckerDeathTest, MethodNotAllowedOnDifferentThreadInDebug) {
137 ASSERT_DEATH({ 136 ASSERT_DCHECK_DEATH({ ThreadCheckerClass::MethodOnDifferentThreadImpl(); },
138 ThreadCheckerClass::MethodOnDifferentThreadImpl(); 137 "");
139 }, "");
140 } 138 }
141 #else 139 #else
142 TEST(ThreadCheckerTest, MethodAllowedOnDifferentThreadInRelease) { 140 TEST(ThreadCheckerTest, MethodAllowedOnDifferentThreadInRelease) {
143 ThreadCheckerClass::MethodOnDifferentThreadImpl(); 141 ThreadCheckerClass::MethodOnDifferentThreadImpl();
144 } 142 }
145 #endif // ENABLE_THREAD_CHECKER 143 #endif // ENABLE_THREAD_CHECKER
146 144
147 void ThreadCheckerClass::DetachThenCallFromDifferentThreadImpl() { 145 void ThreadCheckerClass::DetachThenCallFromDifferentThreadImpl() {
148 std::unique_ptr<ThreadCheckerClass> thread_checker_class( 146 std::unique_ptr<ThreadCheckerClass> thread_checker_class(
149 new ThreadCheckerClass); 147 new ThreadCheckerClass);
150 148
151 // DoStuff doesn't assert when called on a different thread 149 // DoStuff doesn't assert when called on a different thread
152 // after a call to DetachFromThread. 150 // after a call to DetachFromThread.
153 thread_checker_class->DetachFromThread(); 151 thread_checker_class->DetachFromThread();
154 CallDoStuffOnThread call_on_thread(thread_checker_class.get()); 152 CallDoStuffOnThread call_on_thread(thread_checker_class.get());
155 153
156 call_on_thread.Start(); 154 call_on_thread.Start();
157 call_on_thread.Join(); 155 call_on_thread.Join();
158 156
159 // DoStuff should assert in debug builds only after moving to 157 // DoStuff should assert in debug builds only after moving to
160 // another thread. 158 // another thread.
161 thread_checker_class->DoStuff(); 159 thread_checker_class->DoStuff();
162 } 160 }
163 161
164 #if ENABLE_THREAD_CHECKER 162 #if ENABLE_THREAD_CHECKER
165 TEST(ThreadCheckerDeathTest, DetachFromThreadInDebug) { 163 TEST(ThreadCheckerDeathTest, DetachFromThreadInDebug) {
166 ASSERT_DEATH({ 164 ASSERT_DCHECK_DEATH(
167 ThreadCheckerClass::DetachThenCallFromDifferentThreadImpl(); 165 { ThreadCheckerClass::DetachThenCallFromDifferentThreadImpl(); }, "");
168 }, "");
169 } 166 }
170 #else 167 #else
171 TEST(ThreadCheckerTest, DetachFromThreadInRelease) { 168 TEST(ThreadCheckerTest, DetachFromThreadInRelease) {
172 ThreadCheckerClass::DetachThenCallFromDifferentThreadImpl(); 169 ThreadCheckerClass::DetachThenCallFromDifferentThreadImpl();
173 } 170 }
174 #endif // ENABLE_THREAD_CHECKER 171 #endif // ENABLE_THREAD_CHECKER
175 172
176 #endif // GTEST_HAS_DEATH_TEST || !ENABLE_THREAD_CHECKER
177
178 // Just in case we ever get lumped together with other compilation units. 173 // Just in case we ever get lumped together with other compilation units.
179 #undef ENABLE_THREAD_CHECKER 174 #undef ENABLE_THREAD_CHECKER
180 175
181 } // namespace base 176 } // namespace base
OLDNEW
« no previous file with comments | « base/threading/non_thread_safe_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698