// 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. #ifndef FLUTTER_SHELL_COMMON_SHELL_TEST_H_ #define FLUTTER_SHELL_COMMON_SHELL_TEST_H_ #include #include "flutter/common/settings.h" #include "flutter/fml/macros.h" #include "flutter/lib/ui/window/platform_message.h" #include "flutter/shell/common/run_configuration.h" #include "flutter/shell/common/shell.h" #include "flutter/shell/common/thread_host.h" #include "flutter/shell/gpu/gpu_surface_gl_delegate.h" #include "flutter/testing/test_dart_native_resolver.h" #include "flutter/testing/test_gl_surface.h" #include "flutter/testing/thread_test.h" namespace flutter { namespace testing { class ShellTest : public ThreadTest { public: ShellTest(); ~ShellTest(); Settings CreateSettingsForFixture(); std::unique_ptr CreateShell(Settings settings); std::unique_ptr CreateShell(Settings settings, TaskRunners task_runners); TaskRunners GetTaskRunnersForFixture(); void SendEnginePlatformMessage(Shell* shell, fml::RefPtr message); void AddNativeCallback(std::string name, Dart_NativeFunction callback); static void PlatformViewNotifyCreated( Shell* shell); // This creates the surface static void RunEngine(Shell* shell, RunConfiguration configuration); static void PumpOneFrame(Shell* shell); // Declare |UnreportedTimingsCount|, |GetNeedsReportTimings| and // |SetNeedsReportTimings| inside |ShellTest| mainly for easier friend class // declarations as shell unit tests and Shell are in different name spaces. static bool GetNeedsReportTimings(Shell* shell); static void SetNeedsReportTimings(Shell* shell, bool value); // Do not assert |UnreportedTimingsCount| to be positive in any tests. // Otherwise those tests will be flaky as the clearing of unreported timings // is unpredictive. static int UnreportedTimingsCount(Shell* shell); protected: // |testing::ThreadTest| void SetUp() override; // |testing::ThreadTest| void TearDown() override; private: fml::UniqueFD assets_dir_; std::shared_ptr native_resolver_; std::unique_ptr thread_host_; void SetSnapshotsAndAssets(Settings& settings); }; class ShellTestPlatformView : public PlatformView, public GPUSurfaceGLDelegate { public: ShellTestPlatformView(PlatformView::Delegate& delegate, TaskRunners task_runners); ~ShellTestPlatformView() override; private: TestGLSurface gl_surface_; // |PlatformView| std::unique_ptr CreateRenderingSurface() override; // |GPUSurfaceGLDelegate| bool GLContextMakeCurrent() override; // |GPUSurfaceGLDelegate| bool GLContextClearCurrent() override; // |GPUSurfaceGLDelegate| bool GLContextPresent() override; // |GPUSurfaceGLDelegate| intptr_t GLContextFBO() const override; // |GPUSurfaceGLDelegate| GLProcResolver GetGLProcResolver() const override; // |GPUSurfaceGLDelegate| ExternalViewEmbedder* GetExternalViewEmbedder() override; FML_DISALLOW_COPY_AND_ASSIGN(ShellTestPlatformView); }; } // namespace testing } // namespace flutter #endif // FLUTTER_SHELL_COMMON_SHELL_TEST_H_