# 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.

assert(is_fuchsia)

import("//build/fuchsia/sdk.gni")
import("//flutter/tools/fuchsia/fuchsia_archive.gni")

group("tests") {
  testonly = true
  deps = [
    ":flutter-embedder-test2",
    "//flutter/shell/platform/fuchsia/flutter/integration_flutter_tests/embedder/child-view2",
    "//flutter/shell/platform/fuchsia/flutter/integration_flutter_tests/embedder/parent-view2",
  ]
}

executable("flutter-embedder-test2-bin") {
  testonly = true

  output_name = "flutter-embedder-test2"

  sources = [
    "flutter-embedder-test2.cc",
    "flutter-embedder-test2.h",
  ]

  # This is needed for //third_party/googletest for linking zircon symbols.
  libs = [ "$fuchsia_sdk_path/arch/$target_cpu/sysroot/lib/libzircon.so" ]

  include_dirs = [ "//flutter/shell/platform/fuchsia/flutter/integration_flutter_tests/fuchsia_testing" ]

  public_deps = [ "//third_party/googletest:gtest" ]

  deps = [
    "$fuchsia_sdk_root/fidl:fuchsia.sys",
    "$fuchsia_sdk_root/fidl:fuchsia.ui.app",
    "$fuchsia_sdk_root/fidl:fuchsia.ui.input",
    "$fuchsia_sdk_root/fidl:fuchsia.ui.lifecycle",
    "$fuchsia_sdk_root/fidl:fuchsia.ui.policy",
    "$fuchsia_sdk_root/fidl:fuchsia.ui.scenic",
    "$fuchsia_sdk_root/pkg:async-loop-cpp",
    "$fuchsia_sdk_root/pkg:async-loop-default",
    "$fuchsia_sdk_root/pkg:fit",
    "$fuchsia_sdk_root/pkg:scenic_cpp",
    "$fuchsia_sdk_root/pkg:sys_cpp",
    "$fuchsia_sdk_root/pkg:sys_cpp_testing",
    "$fuchsia_sdk_root/pkg:zx",
    "//flutter/shell/platform/fuchsia/flutter/integration_flutter_tests/fuchsia_testing/src/lib/ui/base_view",
    "//flutter/shell/platform/fuchsia/flutter/integration_flutter_tests/fuchsia_testing/src/ui/testing/views",
    "//third_party/googletest:gtest_main",
  ]
}

fuchsia_test_archive("flutter-embedder-test2") {
  deps = [
    ":flutter-embedder-test2-bin",
    "//flutter/shell/platform/fuchsia/flutter/integration_flutter_tests/embedder/child-view2:package",
    "//flutter/shell/platform/fuchsia/flutter/integration_flutter_tests/embedder/parent-view2:package",
  ]

  binary = "$target_name"

  cmx_file = rebase_path("meta/$target_name.cmx")
}
