# 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/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" ]
}
