// Copyright 2024 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef COMPONENTS_AUTOFILL_CORE_COMMON_TEST_MATCHERS_H_ #define COMPONENTS_AUTOFILL_CORE_COMMON_TEST_MATCHERS_H_ #include <tuple> #include "base/check.h" #include "base/location.h" #include "testing/gmock/include/gmock/gmock.h" namespace autofill::test { // Stores the address of the `I`th argument in `*ptr`. // See LazyRef() for a usage example. template <size_t I = 0, typename T> auto SaveArgPtr(T** ptr) { … } // `LazyRef(x)` behaves like `::testing::Ref(x)` but dereferences `x` at match // time. // // Usage: // MockFunction<void(Foo&)> fun; // { // Foo* foo_ptr = nullptr; // EXPECT_CALL(fun, Call).WillOnce(SaveArgPtr(&foo_ptr)); // EXPECT_CALL(fun, Call(LazyRef(foo_ptr))); // } // Foo foo; // fun.Call(foo); // fun.Call(foo); template <typename T> auto LazyRef(T*& ptr, base::Location loc = FROM_HERE) { … } } // namespace autofill::test #endif // COMPONENTS_AUTOFILL_CORE_COMMON_TEST_MATCHERS_H_