diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ab21b96855d31..8af6bbaeb8806 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -253,6 +253,10 @@ jobs: username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} + - uses: actions/download-artifact@v2 + with: + name: tizen-arm-release + - uses: actions/download-artifact@v2 with: name: tizen-arm-unittests diff --git a/shell/platform/tizen/BUILD.gn b/shell/platform/tizen/BUILD.gn index 1e1ef8e344f29..f89c5835c4699 100644 --- a/shell/platform/tizen/BUILD.gn +++ b/shell/platform/tizen/BUILD.gn @@ -246,7 +246,6 @@ executable("flutter_tizen_unittests") { "flutter_project_bundle_unittests.cc", "flutter_tizen_engine_unittest.cc", "flutter_tizen_texture_registrar_unittests.cc", - "testing/mock_engine.cc", ] ldflags = [ "-Wl,--unresolved-symbols=ignore-in-shared-libs" ] diff --git a/shell/platform/tizen/flutter_tizen_engine_unittest.cc b/shell/platform/tizen/flutter_tizen_engine_unittest.cc index b0abf58fe53ed..d129bdc837e36 100644 --- a/shell/platform/tizen/flutter_tizen_engine_unittest.cc +++ b/shell/platform/tizen/flutter_tizen_engine_unittest.cc @@ -26,6 +26,11 @@ class FlutterTizenEngineTest : public ::testing::Test { FlutterProjectBundle project(engine_prop); auto engine = std::make_unique(project); + + EngineModifier modifier(engine.get()); + // Force the non-AOT path unless overridden by the test. + modifier.embedder_api().RunsAOTCompiledDartCode = []() { return false; }; + engine_ = engine.release(); } @@ -39,51 +44,6 @@ class FlutterTizenEngineTest : public ::testing::Test { FlutterTizenEngine* engine_ = nullptr; }; -class FlutterTizenEngineTestHeaded : public FlutterTizenEngineTest { - protected: - void SetUp() { - FlutterTizenEngineTest::SetUp(); - engine_->InitializeRenderer(0, 0, 800, 600, false, true, false); - } -}; - -TEST_F(FlutterTizenEngineTest, Run) { - EXPECT_TRUE(engine_ != nullptr); - EXPECT_TRUE(engine_->RunEngine(nullptr)); -} - -TEST_F(FlutterTizenEngineTest, Run_Twice) { - EXPECT_TRUE(engine_->RunEngine(nullptr)); - EXPECT_FALSE(engine_->RunEngine(nullptr)); -} - -TEST_F(FlutterTizenEngineTest, Stop) { - EXPECT_TRUE(engine_->RunEngine(nullptr)); - EXPECT_TRUE(engine_->StopEngine()); -} - -TEST_F(FlutterTizenEngineTest, Stop_Twice) { - EXPECT_TRUE(engine_->RunEngine(nullptr)); - EXPECT_TRUE(engine_->StopEngine()); - EXPECT_FALSE(engine_->StopEngine()); -} - -TEST_F(FlutterTizenEngineTest, GetPluginRegistrar) { - EXPECT_TRUE(engine_->RunEngine(nullptr)); - EXPECT_TRUE(engine_->plugin_registrar() != nullptr); -} - -TEST_F(FlutterTizenEngineTest, GetTextureRegistrar) { - EXPECT_TRUE(engine_->RunEngine(nullptr)); - EXPECT_TRUE(engine_->texture_registrar() == nullptr); -} - -// Disabled for headless testing. -TEST_F(FlutterTizenEngineTestHeaded, DISABLED_GetTextureRegistrar) { - EXPECT_TRUE(engine_->RunEngine(nullptr)); - EXPECT_TRUE(engine_->texture_registrar() != nullptr); -} - TEST_F(FlutterTizenEngineTest, RunDoesExpectedInitialization) { EngineModifier modifier(engine_); bool run_called = false; @@ -139,6 +99,8 @@ TEST_F(FlutterTizenEngineTest, RunDoesExpectedInitialization) { EXPECT_TRUE(run_called); EXPECT_TRUE(update_locales_called); EXPECT_TRUE(settings_message_sent); + EXPECT_NE(engine_->plugin_registrar(), nullptr); + EXPECT_EQ(engine_->texture_registrar(), nullptr); modifier.embedder_api().Shutdown = [](auto engine) { return kSuccess; }; } diff --git a/shell/platform/tizen/flutter_tizen_texture_registrar_unittests.cc b/shell/platform/tizen/flutter_tizen_texture_registrar_unittests.cc index 9c09017350766..5925c8e952dec 100644 --- a/shell/platform/tizen/flutter_tizen_texture_registrar_unittests.cc +++ b/shell/platform/tizen/flutter_tizen_texture_registrar_unittests.cc @@ -23,9 +23,9 @@ class FlutterTizenTextureRegistrarTest : public ::testing::Test { protected: void SetUp() { FlutterDesktopEngineProperties engine_prop = {}; - engine_prop.assets_path = "foo/flutter_assets"; - engine_prop.icu_data_path = "foo/icudtl.dat"; - engine_prop.aot_library_path = "foo/libapp.so"; + engine_prop.assets_path = "/foo/flutter_assets"; + engine_prop.icu_data_path = "/foo/icudtl.dat"; + engine_prop.aot_library_path = "/foo/libapp.so"; FlutterProjectBundle project(engine_prop); auto engine = std::make_unique(project); diff --git a/shell/platform/tizen/testing/mock_engine.cc b/shell/platform/tizen/testing/mock_engine.cc deleted file mode 100644 index 7dbe9e19d75f1..0000000000000 --- a/shell/platform/tizen/testing/mock_engine.cc +++ /dev/null @@ -1,331 +0,0 @@ -// Copyright 2021 Samsung Electronics Co., Ltd. All rights reserved. -// Copyright 2013 The Flutter Authors. All rights reserved. - -#include - -#include "flutter/shell/platform/embedder/embedder.h" -#include "gtest/gtest.h" - -const int32_t kFlutterSemanticsCustomActionIdBatchEnd = -1; - -struct _FlutterEngine { - bool running; - FlutterPlatformMessageCallback platform_message_callback; - FlutterTaskRunnerPostTaskCallback platform_post_task_callback; - void* user_data; - - _FlutterEngine(FlutterPlatformMessageCallback platform_message_callback, - FlutterTaskRunnerPostTaskCallback platform_post_task_callback, - void* user_data) - : running(false), - platform_message_callback(platform_message_callback), - platform_post_task_callback(platform_post_task_callback), - user_data(user_data) {} -}; - -struct _FlutterPlatformMessageResponseHandle { - FlutterDataCallback data_callback; - void* user_data; - std::string channel; - bool released; - - // Constructor for a response handle generated by the engine. - explicit _FlutterPlatformMessageResponseHandle(std::string channel) - : data_callback(nullptr), - user_data(nullptr), - channel(channel), - released(false) {} - - // Constructor for a response handle generated by the shell. - _FlutterPlatformMessageResponseHandle(FlutterDataCallback data_callback, - void* user_data) - : data_callback(data_callback), user_data(user_data), released(false) {} -}; - -struct _FlutterTaskRunner { - uint64_t task; - std::string channel; - const FlutterPlatformMessageResponseHandle* response_handle; - uint8_t* message; - size_t message_size; - - _FlutterTaskRunner( - uint64_t task, - const std::string& channel, - const FlutterPlatformMessageResponseHandle* response_handle, - const uint8_t* message, - size_t message_size) - : task(task), - channel(channel), - response_handle(response_handle), - message_size(message_size) { - if (message_size > 0) { - this->message = static_cast(malloc(message_size)); - memcpy(this->message, message, message_size); - } else { - this->message = nullptr; - } - } - ~_FlutterTaskRunner() { - if (response_handle != nullptr) { - EXPECT_TRUE(response_handle->released); - delete response_handle; - } - free(message); - } -}; - -// Send a message from the engine. -static void send_message(FLUTTER_API_SYMBOL(FlutterEngine) engine, - const std::string& channel, - const uint8_t* message, - size_t message_size) { - FlutterTask task; - task.runner = - new _FlutterTaskRunner(1234, channel, nullptr, message, message_size); - task.task = task.runner->task; - engine->platform_post_task_callback(task, 0, engine->user_data); -} - -FlutterEngineResult FlutterEngineCreateAOTData( - const FlutterEngineAOTDataSource* source, - FlutterEngineAOTData* data_out) { - *data_out = nullptr; - return kSuccess; -} - -FlutterEngineResult FlutterEngineCollectAOTData(FlutterEngineAOTData data) { - return kSuccess; -} - -FlutterEngineResult FlutterEngineInitialize(size_t version, - const FlutterRendererConfig* config, - const FlutterProjectArgs* args, - void* user_data, - FLUTTER_API_SYMBOL(FlutterEngine) * - engine_out) { - EXPECT_NE(config, nullptr); - - EXPECT_NE(args, nullptr); - EXPECT_NE(args->platform_message_callback, nullptr); - EXPECT_NE(args->custom_task_runners, nullptr); - EXPECT_NE(args->custom_task_runners->platform_task_runner, nullptr); - EXPECT_NE(args->custom_task_runners->platform_task_runner->post_task_callback, - nullptr); - EXPECT_NE(user_data, nullptr); - - *engine_out = new _FlutterEngine( - args->platform_message_callback, - args->custom_task_runners->platform_task_runner->post_task_callback, - user_data); - return kSuccess; -} - -FlutterEngineResult FlutterEngineRunInitialized( - FLUTTER_API_SYMBOL(FlutterEngine) engine) { - engine->running = true; - return kSuccess; -} - -FlutterEngineResult FlutterEngineRun(size_t version, - const FlutterRendererConfig* config, - const FlutterProjectArgs* args, - void* user_data, - FLUTTER_API_SYMBOL(FlutterEngine) * - engine_out) { - EXPECT_NE(config, nullptr); - EXPECT_NE(args, nullptr); - EXPECT_NE(user_data, nullptr); - EXPECT_NE(engine_out, nullptr); - - FlutterEngineResult result = - FlutterEngineInitialize(version, config, args, user_data, engine_out); - if (result != kSuccess) { - return result; - } - return FlutterEngineRunInitialized(*engine_out); -} - -FlutterEngineResult FlutterEngineShutdown(FLUTTER_API_SYMBOL(FlutterEngine) - engine) { - delete engine; - return kSuccess; -} - -FlutterEngineResult FlutterEngineDeinitialize(FLUTTER_API_SYMBOL(FlutterEngine) - engine) { - return kSuccess; -} - -FlutterEngineResult FlutterEngineSendWindowMetricsEvent( - FLUTTER_API_SYMBOL(FlutterEngine) engine, - const FlutterWindowMetricsEvent* event) { - EXPECT_TRUE(engine->running); - return kSuccess; -} - -FlutterEngineResult FlutterEngineSendPointerEvent( - FLUTTER_API_SYMBOL(FlutterEngine) engine, - const FlutterPointerEvent* events, - size_t events_count) { - return kSuccess; -} - -FLUTTER_EXPORT -FlutterEngineResult FlutterEngineSendPlatformMessage( - FLUTTER_API_SYMBOL(FlutterEngine) engine, - const FlutterPlatformMessage* message) { - EXPECT_TRUE(engine->running); - return kSuccess; -} - -FlutterEngineResult FlutterPlatformMessageCreateResponseHandle( - FLUTTER_API_SYMBOL(FlutterEngine) engine, - FlutterDataCallback data_callback, - void* user_data, - FlutterPlatformMessageResponseHandle** response_out) { - EXPECT_TRUE(engine->running); - EXPECT_NE(data_callback, nullptr); - EXPECT_NE(user_data, nullptr); - - _FlutterPlatformMessageResponseHandle* handle = - new _FlutterPlatformMessageResponseHandle(data_callback, user_data); - - *response_out = handle; - return kSuccess; -} - -FlutterEngineResult FlutterPlatformMessageReleaseResponseHandle( - FLUTTER_API_SYMBOL(FlutterEngine) engine, - FlutterPlatformMessageResponseHandle* response) { - EXPECT_NE(engine, nullptr); - EXPECT_NE(response, nullptr); - - EXPECT_TRUE(engine->running); - - EXPECT_FALSE(response->released); - response->released = true; - - return kSuccess; -} - -FlutterEngineResult FlutterEngineSendPlatformMessageResponse( - FLUTTER_API_SYMBOL(FlutterEngine) engine, - const FlutterPlatformMessageResponseHandle* handle, - const uint8_t* data, - size_t data_length) { - EXPECT_NE(engine, nullptr); - EXPECT_NE(handle, nullptr); - - EXPECT_TRUE(engine->running); - - // Send a message so the shell can check the responses received. - if (handle->channel != "test/responses") { - send_message(engine, "test/responses", data, data_length); - } - - EXPECT_FALSE(handle->released); - - delete handle; - - return kSuccess; -} - -FlutterEngineResult FlutterEngineRunTask(FLUTTER_API_SYMBOL(FlutterEngine) - engine, - const FlutterTask* task) { - EXPECT_NE(engine, nullptr); - EXPECT_NE(task, nullptr); - EXPECT_NE(task->runner, nullptr); - - FlutterTaskRunner runner = task->runner; - EXPECT_NE(runner, nullptr); - const FlutterPlatformMessageResponseHandle* response_handle = - runner->response_handle; - if (response_handle != nullptr) { - EXPECT_NE(response_handle->data_callback, nullptr); - response_handle->data_callback(runner->message, runner->message_size, - response_handle->user_data); - } else { - _FlutterPlatformMessageResponseHandle* handle = - new _FlutterPlatformMessageResponseHandle(runner->channel); - - FlutterPlatformMessage message; - message.struct_size = sizeof(FlutterPlatformMessage); - message.channel = runner->channel.c_str(); - message.message = runner->message; - message.message_size = runner->message_size; - message.response_handle = handle; - engine->platform_message_callback(&message, engine->user_data); - } - - delete runner; - - return kSuccess; -} - -bool FlutterEngineRunsAOTCompiledDartCode() { - return false; -} - -FlutterEngineResult FlutterEngineUpdateLocales(FLUTTER_API_SYMBOL(FlutterEngine) - engine, - const FlutterLocale** locales, - size_t locales_count) { - return kSuccess; -} - -FlutterEngineResult FlutterEngineUpdateSemanticsEnabled( - FLUTTER_API_SYMBOL(FlutterEngine) engine, - bool enabled) { - return kSuccess; -} - -FlutterEngineResult FlutterEngineDispatchSemanticsAction( - FLUTTER_API_SYMBOL(FlutterEngine) engine, - uint64_t id, - FlutterSemanticsAction action, - const uint8_t* data, - size_t data_length) { - return kSuccess; -} - -uint64_t FlutterEngineGetCurrentTime() { - const auto elapsed_time = std::chrono::steady_clock::now().time_since_epoch(); - return std::chrono::duration_cast(elapsed_time) - .count(); -} - -FlutterEngineResult FlutterEngineGetProcAddresses( - FlutterEngineProcTable* table) { - if (!table) { - return kInvalidArguments; - } - - FlutterEngineProcTable empty_table = {}; - *table = empty_table; - - table->CreateAOTData = &FlutterEngineCreateAOTData; - table->CollectAOTData = &FlutterEngineCollectAOTData; - table->Run = &FlutterEngineRun; - table->Shutdown = &FlutterEngineShutdown; - table->Initialize = &FlutterEngineInitialize; - table->Deinitialize = &FlutterEngineDeinitialize; - table->RunInitialized = &FlutterEngineRunInitialized; - table->SendWindowMetricsEvent = &FlutterEngineSendWindowMetricsEvent; - table->SendPointerEvent = &FlutterEngineSendPointerEvent; - table->SendPlatformMessage = &FlutterEngineSendPlatformMessage; - table->PlatformMessageCreateResponseHandle = - &FlutterPlatformMessageCreateResponseHandle; - table->PlatformMessageReleaseResponseHandle = - &FlutterPlatformMessageReleaseResponseHandle; - table->SendPlatformMessageResponse = - &FlutterEngineSendPlatformMessageResponse; - table->RunTask = &FlutterEngineRunTask; - table->UpdateLocales = &FlutterEngineUpdateLocales; - table->UpdateSemanticsEnabled = &FlutterEngineUpdateSemanticsEnabled; - table->DispatchSemanticsAction = &FlutterEngineDispatchSemanticsAction; - table->RunsAOTCompiledDartCode = &FlutterEngineRunsAOTCompiledDartCode; - - return kSuccess; -}