5 #define FML_USED_ON_EMBEDDER
9 #include "flutter/common/settings.h"
10 #include "flutter/common/task_runners.h"
11 #include "flutter/fml/backtrace.h"
12 #include "flutter/fml/command_line.h"
13 #include "flutter/lib/gpu/context.h"
14 #include "flutter/lib/ui/ui_dart_state.h"
15 #include "flutter/runtime/dart_isolate.h"
16 #include "flutter/runtime/dart_vm_lifecycle.h"
17 #include "flutter/runtime/isolate_configuration.h"
18 #include "flutter/testing/dart_fixture.h"
19 #include "flutter/testing/dart_isolate_runner.h"
20 #include "flutter/testing/fixture_test.h"
21 #include "flutter/testing/testing.h"
22 #include "impeller/fixtures/box_fade.frag.h"
23 #include "impeller/fixtures/box_fade.vert.h"
29 #include "gtest/gtest.h"
30 #include "third_party/imgui/imgui.h"
36 public flutter::testing::DartFixture {
39 : settings_(CreateSettingsForFixture()),
40 vm_ref_(flutter::DartVMRef::Create(settings_)) {
41 fml::MessageLoop::EnsureInitializedForCurrentThread();
43 current_task_runner_ = fml::MessageLoop::GetCurrent().GetTaskRunner();
45 isolate_ = CreateDartIsolate();
47 assert(isolate_->get()->GetPhase() == flutter::DartIsolate::Phase::Running);
53 flutter::Context::SetOverrideContext(
GetContext());
55 return isolate_.get();
59 std::unique_ptr<flutter::testing::AutoIsolateShutdown> CreateDartIsolate() {
60 const auto settings = CreateSettingsForFixture();
61 flutter::TaskRunners task_runners(flutter::testing::GetCurrentTestName(),
67 return flutter::testing::RunDartCodeInIsolate(
68 vm_ref_, settings, task_runners,
"main", {},
69 flutter::testing::GetDefaultKernelFilePath());
72 const flutter::Settings settings_;
73 flutter::DartVMRef vm_ref_;
74 fml::RefPtr<fml::TaskRunner> current_task_runner_;
75 std::unique_ptr<flutter::testing::AutoIsolateShutdown> isolate_;
81 auto isolate = GetIsolate();
83 SinglePassCallback callback = [&](
RenderPass& pass) {
84 ImGui::Begin(
"Dart test",
nullptr);
86 "This test executes Dart code during the playground frame callback.");
89 return isolate->RunInIsolateScope([]() ->
bool {
90 if (tonic::CheckAndHandleError(::Dart_Invoke(
91 Dart_RootLibrary(), tonic::ToDart(
"sayHi"), 0,
nullptr))) {
97 OpenPlaygroundHere(callback);
101 auto isolate = GetIsolate();
102 bool result = isolate->RunInIsolateScope([]() ->
bool {
103 if (tonic::CheckAndHandleError(::Dart_Invoke(
104 Dart_RootLibrary(), tonic::ToDart(
"instantiateDefaultContext"), 0,
115 auto isolate = GetIsolate();
116 bool result = isolate->RunInIsolateScope([]() ->
bool {
117 if (tonic::CheckAndHandleError(
118 ::Dart_Invoke(Dart_RootLibrary(),
119 tonic::ToDart(
"canEmplaceHostBuffer"), 0,
nullptr))) {