1*6777b538SAndroid Build Coastguard Worker // Copyright 2023 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef BASE_TEST_RUN_UNTIL_H_ 6*6777b538SAndroid Build Coastguard Worker #define BASE_TEST_RUN_UNTIL_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include "base/functional/function_ref.h" 9*6777b538SAndroid Build Coastguard Worker 10*6777b538SAndroid Build Coastguard Worker namespace base::test { 11*6777b538SAndroid Build Coastguard Worker 12*6777b538SAndroid Build Coastguard Worker // Waits until `condition` evaluates to `true`, by evaluating `condition` 13*6777b538SAndroid Build Coastguard Worker // whenever the current task becomes idle (while allowing the message loop of 14*6777b538SAndroid Build Coastguard Worker // the calling thread to spin). 15*6777b538SAndroid Build Coastguard Worker // 16*6777b538SAndroid Build Coastguard Worker // Returns true if `condition` became true, or false if a timeout happens. 17*6777b538SAndroid Build Coastguard Worker // 18*6777b538SAndroid Build Coastguard Worker // Example usage: 19*6777b538SAndroid Build Coastguard Worker // 20*6777b538SAndroid Build Coastguard Worker // ChangeColorAsyncTo(object_under_tests, Color::Red); 21*6777b538SAndroid Build Coastguard Worker // 22*6777b538SAndroid Build Coastguard Worker // // Waits until the color is red, or aborts the tests otherwise. 23*6777b538SAndroid Build Coastguard Worker // ASSERT_TRUE(RunUntil([&](){ 24*6777b538SAndroid Build Coastguard Worker // return object_under_test.Color() == Color::Red; 25*6777b538SAndroid Build Coastguard Worker // })) << "Timeout waiting for the color to turn red"; 26*6777b538SAndroid Build Coastguard Worker // 27*6777b538SAndroid Build Coastguard Worker // // When we come here `Color()` is guaranteed to be `Color::Red`. 28*6777b538SAndroid Build Coastguard Worker // 29*6777b538SAndroid Build Coastguard Worker [[nodiscard]] bool RunUntil(base::FunctionRef<bool(void)> condition); 30*6777b538SAndroid Build Coastguard Worker 31*6777b538SAndroid Build Coastguard Worker } // namespace base::test 32*6777b538SAndroid Build Coastguard Worker 33*6777b538SAndroid Build Coastguard Worker #endif // BASE_TEST_RUN_UNTIL_H_ 34