| // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "base/test/thread_test_helper.h" |
| |
| #include <utility> |
| |
| #include "base/bind.h" |
| #include "base/location.h" |
| #include "base/threading/thread_restrictions.h" |
| |
| namespace base { |
| |
| ThreadTestHelper::ThreadTestHelper( |
| scoped_refptr<SequencedTaskRunner> target_sequence) |
| : test_result_(false), |
| target_sequence_(std::move(target_sequence)), |
| done_event_(WaitableEvent::ResetPolicy::AUTOMATIC, |
| WaitableEvent::InitialState::NOT_SIGNALED) {} |
| |
| bool ThreadTestHelper::Run() { |
| if (!target_sequence_->PostTask( |
| FROM_HERE, base::BindOnce(&ThreadTestHelper::RunOnSequence, this))) { |
| return false; |
| } |
| base::ThreadRestrictions::ScopedAllowWait allow_wait; |
| done_event_.Wait(); |
| return test_result_; |
| } |
| |
| void ThreadTestHelper::RunTest() { set_test_result(true); } |
| |
| ThreadTestHelper::~ThreadTestHelper() = default; |
| |
| void ThreadTestHelper::RunOnSequence() { |
| RunTest(); |
| done_event_.Signal(); |
| } |
| |
| } // namespace base |