# Copyright 2019 The Fuchsia 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("//build/cpp/sdk_source_set.gni")
import("//build/fidl/fidl.gni")
import("//build/test/test_package.gni")
import("//build/testing/environments.gni")

sdk_source_set("cpp") {
  testonly = true

  category = "partner"
  sdk_name = "modular_testing_cpp"
  include_base = "//sdk"

  public_configs = [ "//sdk/config" ]

  sources = [
    "fake_agent.cc",
    "fake_agent.h",
    "fake_component.cc",
    "fake_component.h",
    "test_harness_builder.cc",
    "test_harness_builder.h",
    "test_harness_launcher.cc",
    "test_harness_launcher.h",
  ]

  public_deps = [
    "//sdk/fidl/fuchsia.modular",
    "//sdk/fidl/fuchsia.modular.testing",
    "//sdk/lib/modular/cpp",
    "//sdk/lib/sys/cpp",
    "//zircon/public/lib/fit",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
}

fidl("fuchsia.modular.test.harness") {
  sources = [ "test_harness_builder.test.fidl" ]
}

executable("modular_testing_cpp_tests_bin") {
  testonly = true
  sources = [
    "fake_agent_test.cc",
    "fake_component_test.cc",
    "test_harness_builder_test.cc",
    "test_harness_launcher_test.cc",
  ]

  deps = [
    ":fuchsia.modular.test.harness",
    "//sdk/fidl/fuchsia.modular.testing",
    "//sdk/fidl/fuchsia.sys",
    "//sdk/lib/modular/testing/cpp",
    "//sdk/lib/modular/testing/cpp:fuchsia.modular.test.harness",
    "//sdk/lib/sys/cpp",
    "//sdk/lib/sys/cpp/testing:integration",
    "//sdk/lib/sys/cpp/testing:unit",
    "//src/lib/fsl",
    "//src/lib/fxl/test:gtest_main",
    "//src/modular/lib/modular_test_harness/cpp:test_harness_fixture",
    "//third_party/googletest:gmock",

    # TODO(fxbug.dev/57392): Move it back to //third_party once unification completes.
    "//zircon/third_party/rapidjson",
  ]
}

test_package("modular_testing_cpp_tests") {
  tests = [
    {
      name = "modular_testing_cpp_tests_bin"

      # TODO(fxbug.dev/63858): Move back to basic_envs.
      environments = [ emu_env ]
    },
  ]

  deps = [ ":modular_testing_cpp_tests_bin" ]
}
