| // Copyright (c) 2012 The Chromium OS 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 POWER_MANAGER_COMMON_TEST_MAIN_LOOP_RUNNER_H_ |
| #define POWER_MANAGER_COMMON_TEST_MAIN_LOOP_RUNNER_H_ |
| |
| #include <memory> |
| |
| #include <base/macros.h> |
| #include <base/time/time.h> |
| #include <base/timer/timer.h> |
| |
| namespace base { |
| class RunLoop; |
| } |
| |
| namespace power_manager { |
| |
| // This class makes it easier to write tests that need to wait for an |
| // asynchronous event to be run by the event loop. The typical usage pattern is |
| // as follows: |
| // |
| // 1. Instantiate a TestMainLoopRunner. |
| // 2. Set up a callback for the asynchronous event that calls StopLoop(). |
| // 3. Call StartLoop() and test that it returns true. |
| // 4. Test that the asynchronous event included the expected data. |
| class TestMainLoopRunner { |
| public: |
| TestMainLoopRunner(); |
| ~TestMainLoopRunner(); |
| |
| // Runs the event loop until StopLoop() is called or |timeout_delay| has |
| // elapsed. Returns true if the loop was stopped via StopLoop() or false if |
| // the timeout was hit. |
| bool StartLoop(base::TimeDelta timeout_delay); |
| |
| // Stops the event loop, resulting in control returning to StartLoop() (which |
| // will return true). |
| void StopLoop(); |
| |
| // Returns true if StartLoop() was called and neither StopLoop() nor |
| // OnTimeout() has been called. |
| bool LoopIsRunning() const; |
| |
| private: |
| // Called when |timeout_delay| elapses without the loop having been stopped. |
| void OnTimeout(); |
| |
| std::unique_ptr<base::RunLoop> runner_; |
| |
| // Invokes OnTimeout(). |
| base::OneShotTimer timeout_timer_; |
| |
| // Was the loop stopped as a result of OnTimeout() being called rather than |
| // StopLoop()? |
| bool timed_out_; |
| |
| DISALLOW_COPY_AND_ASSIGN(TestMainLoopRunner); |
| }; |
| |
| } // namespace power_manager |
| |
| #endif // POWER_MANAGER_COMMON_TEST_MAIN_LOOP_RUNNER_H_ |