# 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("//src/sys/build/components.gni")

executable("modular_test_harness_bin") {
  testonly = true

  sources = [ "modular_test_harness.cc" ]

  deps = [
    "//sdk/fidl/fuchsia.modular.testing",
    "//sdk/lib/sys/cpp",
    "//src/modular/lib/modular_test_harness/cpp:test_harness_impl",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
}

fuchsia_unittest_component("modular-test-harness") {
  component_name = "modular_test_harness"
  manifest = "meta/modular_test_harness.cmx"
  deps = [ ":modular_test_harness_bin" ]
}

executable("test_session_shell_bin") {
  testonly = true

  sources = [ "test_session_shell.cc" ]

  deps = [
    "//sdk/fidl/fuchsia.modular",
    "//sdk/fidl/fuchsia.ui.scenic",
    "//sdk/fidl/fuchsia.ui.views",
    "//sdk/lib/fidl/cpp",
    "//src/modular/lib/app_driver/cpp",
    "//src/modular/lib/fidl:single_service_app",
    "//src/modular/lib/fidl:view_host",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
}

fuchsia_unittest_component("test_session_shell") {
  manifest = "meta/test_session_shell.cmx"
  deps = [ ":test_session_shell_bin" ]
}

executable("test_story_shell_bin") {
  testonly = true

  sources = [ "test_story_shell.cc" ]

  deps = [
    "//sdk/fidl/fuchsia.modular",
    "//sdk/fidl/fuchsia.ui.views",
    "//src/lib/fsl",
    "//src/modular/lib/app_driver/cpp",
    "//src/modular/lib/fidl:single_service_app",
    "//src/modular/lib/fidl:view_host",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
}

fuchsia_unittest_component("test_story_shell") {
  manifest = "meta/test_story_shell.cmx"
  deps = [ ":test_story_shell_bin" ]
}

fuchsia_package("modular_test_harness") {
  testonly = true
  deps = [
    ":modular-test-harness",
    ":test_session_shell",
    ":test_story_shell",
  ]
}

executable("modular_test_harness_test") {
  testonly = true
  sources = [ "modular_test_harness_test.cc" ]
  deps = [
    "//sdk/fidl/fuchsia.modular.testing",
    "//sdk/fidl/fuchsia.sys",
    "//sdk/lib/sys/cpp",
    "//sdk/lib/sys/cpp/testing:integration",
    "//src/lib/fxl/test:gtest_main",
    "//src/modular/lib/modular_test_harness/cpp:test_harness_fixture",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
}

fuchsia_unittest_package("tests") {
  package_name = "modular_test_harness_test"
  deps = [ ":modular_test_harness_test" ]
}
