| // Copyright 2013 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "flutter/shell/platform/embedder/embedder.h" |
| |
| // Wraps capturing lambas with non-capturing version that can be assigned to |
| // FlutterEngineProcTable entries (by using statics) to facilitate mocking in |
| // tests of code built on top of the embedder API. |
| // |
| // This should *ONLY* be used in unit tests as it is leaky by design. |
| // |
| // |proc| should be the name of an entry in FlutterEngineProcTable, such as |
| // "Initialize". |mock_impl| should be a lamba that replaces its implementation, |
| // taking the same arguments and returning the same type. |
| #define MOCK_ENGINE_PROC(proc, mock_impl) \ |
| ([&]() { \ |
| static std::function< \ |
| std::remove_pointer_t<decltype(FlutterEngineProcTable::proc)>> \ |
| closure; \ |
| closure = mock_impl; \ |
| static auto non_capturing = [](auto... args) { return closure(args...); }; \ |
| return non_capturing; \ |
| })() |