// Copyright 2017 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 BASE_TEST_BIND_TEST_UTIL_H_ #define BASE_TEST_BIND_TEST_UTIL_H_ #include "base/bind.h" namespace base { namespace internal { template struct BindLambdaHelper; template struct BindLambdaHelper { static R Run(const std::decay_t& f, Args... args) { return f(std::forward(args)...); } }; } // namespace internal // A variant of Bind() that can bind capturing lambdas for testing. // This doesn't support extra arguments binding as the lambda itself can do. template decltype(auto) BindLambdaForTesting(F&& f) { using Signature = internal::ExtractCallableRunType>; return BindRepeating(&internal::BindLambdaHelper::Run, std::forward(f)); } } // namespace base #endif // BASE_TEST_BIND_TEST_UTIL_H_