# 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. import("//flutter/common/config.gni") import("//flutter/shell/config.gni") import("testing.gni") config("dynamic_symbols") { if (is_clang && is_linux) { ldflags = [ "-rdynamic" ] } } source_set("testing_lib") { testonly = true sources = [ "assertions.h", "debugger_detection.cc", "debugger_detection.h", "display_list_testing.cc", "display_list_testing.h", "logger_listener.cc", "logger_listener.h", "mock_canvas.cc", "mock_canvas.h", "post_task_sync.cc", "post_task_sync.h", "stream_capture.cc", "stream_capture.h", "test_args.cc", "test_args.h", "test_timeout_listener.cc", "test_timeout_listener.h", "testing.cc", "testing.h", "thread_test.cc", "thread_test.h", ] public_deps = [ "//flutter/display_list", "//flutter/fml", "//flutter/third_party/googletest:gmock", "//flutter/third_party/googletest:gtest", ] public_configs = [ "//flutter:config" ] } source_set("testing") { testonly = true sources = [ "run_all_unittests.cc" ] if (enable_unittests && is_linux) { # So that we can call gtk_init in main(). configs += [ "//flutter/shell/platform/linux/config:gtk" ] } public_deps = [ ":testing_lib" ] public_configs = [ ":dynamic_symbols" ] } source_set("dart") { testonly = true sources = [ "dart_isolate_runner.cc", "dart_isolate_runner.h", "elf_loader.cc", "elf_loader.h", "test_dart_native_resolver.cc", "test_dart_native_resolver.h", ] public_deps = [ ":testing_lib", "$dart_src/runtime/bin:elf_loader", "//flutter/common", "//flutter/runtime", "//flutter/runtime:libdart", "//flutter/skia", "//flutter/third_party/tonic", ] } source_set("skia") { testonly = true sources = [ "assertions_skia.cc", "assertions_skia.h", "canvas_test.h", ] public_deps = [ ":testing_lib", "//flutter/skia", ] } dart_snapshot_kernel("vmservice_kernel") { dart_main = "//flutter/shell/vmservice/empty.dart" dart_kernel = "$target_gen_dir/assets/vmservice_kernel.bin" } dart_snapshot_aot("vmservice_snapshot") { dart_kernel = "$target_gen_dir/assets/vmservice_kernel.bin" dart_elf_filename = "libvmservice_snapshot.so" deps = [ ":vmservice_kernel" ] } source_set("fixture_test") { testonly = true sources = [ "dart_fixture.cc", "dart_fixture.h", "fixture_test.cc", "fixture_test.h", ] public_deps = [ ":dart", "//flutter/common", "//flutter/runtime", ] if (flutter_runtime_mode == "profile") { public_deps += [ ":vmservice_snapshot" ] } } if (is_mac || is_ios) { source_set("autoreleasepool_test") { testonly = true sources = [ "autoreleasepool_test.h" ] deps = [ "//flutter/fml", "//flutter/third_party/googletest:gtest", ] } } if (enable_unittests && shell_enable_vulkan) { source_set("vulkan") { testonly = true sources = [ "test_vulkan_context.cc", "test_vulkan_context.h", "test_vulkan_image.cc", "test_vulkan_image.h", "test_vulkan_surface.cc", "test_vulkan_surface.h", ] defines = [ "TEST_VULKAN_PROCS" ] deps = [ ":skia", "//flutter/flutter_vma:flutter_skia_vma", "//flutter/fml", "//flutter/shell/common", "//flutter/vulkan", "//flutter/vulkan/procs", ] if (!is_fuchsia) { deps += [ "//flutter/third_party/swiftshader" ] configs += [ "//flutter/third_party/swiftshader:swiftshader_config" ] } } } if (enable_unittests) { test_fixtures("testing_fixtures") { fixtures = [] } # The //flutter/testing library provides utility methods to other test targets. # This test target tests the testing utilities. executable("testing_unittests") { testonly = true sources = [ "mock_canvas_unittests.cc" ] deps = [ ":skia", ":testing", ":testing_fixtures", "//flutter/runtime:libdart", ] if (shell_enable_metal) { sources += [ "test_metal_surface_unittests.cc" ] deps += [ ":metal" ] } if (shell_enable_vulkan) { deps += [ "//flutter/vulkan" ] } } } # All targets on all platforms should be able to use the Metal utilities. On # platforms where Metal is not available, the tests must be skipped or # implemented to use another available client rendering API. This is usually # either OpenGL which is portably implemented via SwiftShader or the software # backend. This way, all tests compile on all platforms but the Metal backend # is exercised on platforms where Metal itself is available. # # On iOS, this is enabled to allow for Metal tests to run within a test app if (is_mac || is_ios) { source_set("metal") { if (shell_enable_metal) { sources = [ "test_metal_context.h", "test_metal_context.mm", "test_metal_surface.cc", "test_metal_surface.h", "test_metal_surface_impl.h", "test_metal_surface_impl.mm", ] deps = [ ":skia", "//flutter/fml", ] # Skia's Vulkan support is enabled for all platforms (except iOS), and so parts of # Skia's graphics context reference Vulkan symbols. if (shell_enable_vulkan) { deps += [ "//flutter/vulkan" ] } } testonly = true } } # We only use SwiftShader on unittests use_swiftshader = enable_unittests && shell_enable_gl if (use_swiftshader) { source_set("opengl") { testonly = true sources = [ "test_gl_surface.cc", "test_gl_surface.h", ] deps = [ ":skia", "//flutter/fml", ] configs -= [ "//build/config/clang:extra_warnings" ] configs += [ "//flutter/third_party/angle:gl_prototypes", "//flutter/third_party/swiftshader:swiftshader_config", ] deps += [ "//flutter/third_party/angle:libEGL_static", "//flutter/third_party/angle:libGLESv2_static", "//flutter/third_party/swiftshader", ] } }