# 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/shell/config.gni")
import("testing.gni")

source_set("testing_lib") {
  testonly = true

  sources = [
    "assertions.h",
    "testing.cc",
    "testing.h",
    "thread_test.cc",
    "thread_test.h",
  ]

  public_deps = [
    "//flutter/fml",
    "//third_party/googletest:gtest",
  ]
  public_configs = [ "//flutter:config" ]
}

source_set("testing") {
  testonly = true

  sources = [
    "debugger_detection.cc",
    "debugger_detection.h",
    "run_all_unittests.cc",
    "test_timeout_listener.cc",
    "test_timeout_listener.h",
  ]

  public_deps = [
    ":testing_lib",
  ]
}

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",
    "//flutter/common",
    "//flutter/runtime",
    "//flutter/runtime:libdart",
    "//flutter/third_party/tonic",
    "//third_party/dart/runtime/bin:elf_loader",
    "//third_party/skia",
  ]
}

source_set("skia") {
  testonly = true

  sources = [
    "assertions_skia.cc",
    "assertions_skia.h",
    "canvas_test.h",
    "mock_canvas.cc",
    "mock_canvas.h",
    "mock_raster_cache.cc",
    "mock_raster_cache.h",
  ]

  public_deps = [
    ":testing_lib",
    "//flutter/flow",
    "//third_party/skia",
  ]
}

if (enable_unittests) {
  # SwiftShader only supports x86/x64_64
  if (target_cpu == "x86" || target_cpu == "x64") {
    source_set("opengl") {
      testonly = true

      configs += [ "//third_party/swiftshader_flutter:swiftshader_config" ]

      sources = [
        "test_gl_surface.cc",
        "test_gl_surface.h",
      ]

      deps = [
        ":skia",
        "//flutter/fml",
        "//third_party/swiftshader_flutter:swiftshader_gl",
      ]
    }

    source_set("vulkan") {
      testonly = true

      configs += [ "//third_party/swiftshader_flutter:swiftshader_config" ]

      deps = [
        ":skia",
        "//flutter/fml",
        "//third_party/swiftshader_flutter:swiftshader_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.
    source_set("metal") {
      testonly = true

      sources = [
        "test_metal_surface.cc",
        "test_metal_surface.h",
      ]

      defines = []

      if (shell_enable_metal) {
        sources += [ "test_metal_surface_impl.mm" ]
        defines += [ "TESTING_ENABLE_METAL" ]
      }

      deps = [
        ":skia",
        "//flutter/fml",
      ]
    }

    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",
        "test_metal_surface_unittests.cc",
      ]

      deps = [
        ":dart",
        ":metal",
        ":opengl",
        ":skia",
        ":testing",
        ":testing_fixtures",
        ":testing_lib",
      ]
    }
  }
}
