• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2013 The Flutter Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef FLUTTER_TESTING_TEST_DART_NATIVE_RESOLVER_H_
6 #define FLUTTER_TESTING_TEST_DART_NATIVE_RESOLVER_H_
7 
8 #include <functional>
9 #include <map>
10 #include <memory>
11 
12 #include "flutter/fml/macros.h"
13 #include "third_party/dart/runtime/include/dart_api.h"
14 
15 #define CREATE_NATIVE_ENTRY(native_entry)                                   \
16   ([&]() {                                                                  \
17     static ::flutter::testing::NativeEntry closure;                         \
18     static Dart_NativeFunction entrypoint = [](Dart_NativeArguments args) { \
19       closure(args);                                                        \
20     };                                                                      \
21     closure = (native_entry);                                               \
22     return entrypoint;                                                      \
23   })()
24 
25 namespace flutter {
26 namespace testing {
27 
28 using NativeEntry = std::function<void(Dart_NativeArguments)>;
29 
30 class TestDartNativeResolver
31     : public std::enable_shared_from_this<TestDartNativeResolver> {
32  public:
33   TestDartNativeResolver();
34 
35   ~TestDartNativeResolver();
36 
37   void AddNativeCallback(std::string name, Dart_NativeFunction callback);
38 
39   void SetNativeResolverForIsolate();
40 
41  private:
42   std::map<std::string, Dart_NativeFunction> native_callbacks_;
43 
44   Dart_NativeFunction ResolveCallback(std::string name) const;
45 
46   static Dart_NativeFunction DartNativeEntryResolverCallback(
47       Dart_Handle dart_name,
48       int num_of_arguments,
49       bool* auto_setup_scope);
50 
51   FML_DISALLOW_COPY_AND_ASSIGN(TestDartNativeResolver);
52 };
53 
54 }  // namespace testing
55 }  // namespace flutter
56 
57 #endif  // FLUTTER_TESTING_TEST_DART_NATIVE_RESOLVER_H_
58