mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
116 lines
4.7 KiB
C++
116 lines
4.7 KiB
C++
// Copyright 2017 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/fml/thread.h"
|
|
#include "flutter/runtime/dart_isolate.h"
|
|
#include "flutter/runtime/dart_vm.h"
|
|
#include "flutter/testing/testing.h"
|
|
#include "flutter/testing/thread_test.h"
|
|
|
|
#define CURRENT_TEST_NAME \
|
|
std::string { \
|
|
::testing::UnitTest::GetInstance()->current_test_info()->name() \
|
|
}
|
|
|
|
namespace blink {
|
|
|
|
using DartIsolateTest = ::testing::ThreadTest;
|
|
|
|
TEST_F(DartIsolateTest, RootIsolateCreationAndShutdown) {
|
|
Settings settings = {};
|
|
settings.task_observer_add = [](intptr_t, fml::closure) {};
|
|
settings.task_observer_remove = [](intptr_t) {};
|
|
auto vm = DartVM::ForProcess(settings);
|
|
ASSERT_TRUE(vm);
|
|
TaskRunners task_runners(CURRENT_TEST_NAME, //
|
|
GetCurrentTaskRunner(), //
|
|
GetCurrentTaskRunner(), //
|
|
GetCurrentTaskRunner(), //
|
|
GetCurrentTaskRunner() //
|
|
);
|
|
auto weak_isolate = DartIsolate::CreateRootIsolate(
|
|
vm.get(), // vm
|
|
vm->GetIsolateSnapshot(), // isolate snapshot
|
|
vm->GetSharedSnapshot(), // shared snapshot
|
|
std::move(task_runners), // task runners
|
|
nullptr, // window
|
|
{}, // resource context
|
|
nullptr, // unref qeueue
|
|
"main.dart", // advisory uri
|
|
"main" // advisory entrypoint
|
|
);
|
|
auto root_isolate = weak_isolate.lock();
|
|
ASSERT_TRUE(root_isolate);
|
|
ASSERT_EQ(root_isolate->GetPhase(), DartIsolate::Phase::LibrariesSetup);
|
|
ASSERT_TRUE(root_isolate->Shutdown());
|
|
}
|
|
|
|
TEST_F(DartIsolateTest, IsolateCanAssociateSnapshot) {
|
|
Settings settings = {};
|
|
settings.task_observer_add = [](intptr_t, fml::closure) {};
|
|
settings.task_observer_remove = [](intptr_t) {};
|
|
auto vm = DartVM::ForProcess(settings);
|
|
ASSERT_TRUE(vm);
|
|
TaskRunners task_runners(CURRENT_TEST_NAME, //
|
|
GetCurrentTaskRunner(), //
|
|
GetCurrentTaskRunner(), //
|
|
GetCurrentTaskRunner(), //
|
|
GetCurrentTaskRunner() //
|
|
);
|
|
auto weak_isolate = DartIsolate::CreateRootIsolate(
|
|
vm.get(), // vm
|
|
vm->GetIsolateSnapshot(), // isolate snapshot
|
|
vm->GetSharedSnapshot(), // shared snapshot
|
|
std::move(task_runners), // task runners
|
|
nullptr, // window
|
|
{}, // resource context
|
|
nullptr, // unref qeueue
|
|
"main.dart", // advisory uri
|
|
"main" // advisory entrypoint
|
|
);
|
|
auto root_isolate = weak_isolate.lock();
|
|
ASSERT_TRUE(root_isolate);
|
|
ASSERT_EQ(root_isolate->GetPhase(), DartIsolate::Phase::LibrariesSetup);
|
|
ASSERT_TRUE(root_isolate->PrepareForRunningFromSource(
|
|
testing::GetFixturesPath() + std::string{"/simple_main.dart"}, ""));
|
|
ASSERT_EQ(root_isolate->GetPhase(), DartIsolate::Phase::Ready);
|
|
ASSERT_TRUE(root_isolate->Shutdown());
|
|
}
|
|
|
|
TEST_F(DartIsolateTest, CanResolveAndInvokeMethod) {
|
|
Settings settings = {};
|
|
settings.task_observer_add = [](intptr_t, fml::closure) {};
|
|
settings.task_observer_remove = [](intptr_t) {};
|
|
auto vm = DartVM::ForProcess(settings);
|
|
ASSERT_TRUE(vm);
|
|
TaskRunners task_runners(CURRENT_TEST_NAME, //
|
|
GetCurrentTaskRunner(), //
|
|
GetCurrentTaskRunner(), //
|
|
GetCurrentTaskRunner(), //
|
|
GetCurrentTaskRunner() //
|
|
);
|
|
auto weak_isolate = DartIsolate::CreateRootIsolate(
|
|
vm.get(), // vm
|
|
vm->GetIsolateSnapshot(), // isolate snapshot
|
|
vm->GetSharedSnapshot(), // shared snapshot
|
|
std::move(task_runners), // task runners
|
|
nullptr, // window
|
|
{}, // resource context
|
|
nullptr, // unref qeueue
|
|
"main.dart", // advisory uri
|
|
"main" // advisory entrypoint
|
|
);
|
|
auto root_isolate = weak_isolate.lock();
|
|
ASSERT_TRUE(root_isolate);
|
|
ASSERT_EQ(root_isolate->GetPhase(), DartIsolate::Phase::LibrariesSetup);
|
|
ASSERT_TRUE(root_isolate->PrepareForRunningFromSource(
|
|
testing::GetFixturesPath() + std::string{"/simple_main.dart"}, ""));
|
|
ASSERT_EQ(root_isolate->GetPhase(), DartIsolate::Phase::Ready);
|
|
ASSERT_TRUE(root_isolate->Run("simple_main"));
|
|
ASSERT_EQ(root_isolate->GetPhase(), DartIsolate::Phase::Running);
|
|
ASSERT_TRUE(root_isolate->Shutdown());
|
|
}
|
|
|
|
} // namespace blink
|