# 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",
  ]

  public_deps = [
    ":testing_lib",
    "//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",
      ]
    }
  }
}
