# 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/testing/environments.gni")

import("//build/components.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/fit",
    "//sdk/lib/modular/cpp",
    "//sdk/lib/stdcompat",
    "//sdk/lib/sys/cpp",
    "//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",
    "//third_party/rapidjson",
  ]
}

fuchsia_unittest_package("modular_testing_cpp_tests") {
  manifest = "meta/modular_testing_cpp_tests_bin.cmx"
  deps = [ ":modular_testing_cpp_tests_bin" ]
}
