| // Copyright (c) 2012 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. |
| |
| #ifndef MEDIA_BASE_TEST_HELPERS_H_ |
| #define MEDIA_BASE_TEST_HELPERS_H_ |
| |
| #include "base/callback.h" |
| #include "media/base/pipeline_status.h" |
| #include "testing/gmock/include/gmock/gmock.h" |
| |
| class MessageLoop; |
| |
| namespace media { |
| |
| // Return a callback that expects to be run once. |
| base::Closure NewExpectedClosure(); |
| PipelineStatusCB NewExpectedStatusCB(PipelineStatus status); |
| |
| // Helper class for running a message loop until a callback has run. Useful for |
| // testing classes that run on more than a single thread. |
| // |
| // Events are intended for single use and cannot be reset. |
| class WaitableMessageLoopEvent { |
| public: |
| WaitableMessageLoopEvent(); |
| ~WaitableMessageLoopEvent(); |
| |
| // Returns a thread-safe closure that will signal |this| when executed. |
| base::Closure GetClosure(); |
| PipelineStatusCB GetPipelineStatusCB(); |
| |
| // Runs the current message loop until |this| has been signaled. |
| // |
| // Fails the test if the timeout is reached. |
| void RunAndWait(); |
| |
| // Runs the current message loop until |this| has been signaled and asserts |
| // that the |expected| status was received. |
| // |
| // Fails the test if the timeout is reached. |
| void RunAndWaitForStatus(PipelineStatus expected); |
| |
| private: |
| void OnCallback(PipelineStatus status); |
| void OnTimeout(); |
| |
| MessageLoop* message_loop_; |
| bool signaled_; |
| PipelineStatus status_; |
| |
| DISALLOW_COPY_AND_ASSIGN(WaitableMessageLoopEvent); |
| }; |
| |
| } // namespace media |
| |
| #endif // MEDIA_BASE_TEST_HELPERS_H_ |