# 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/package.gni")
import("//build/test/test_package.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",
  ]
}

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",
  ]
}

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",
  ]
}

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",
  ]
}

package("modular_test_harness") {
  testonly = true
  binaries = [
    {
      name = "test_story_shell_bin"
    },
    {
      name = "test_session_shell_bin"
    },
    {
      name = "modular_test_harness_bin"
    },
  ]

  meta = [
    {
      path = "meta/modular_test_harness.cmx"
      dest = "modular_test_harness.cmx"
    },
    {
      path = "meta/test_session_shell.cmx"
      dest = "test_session_shell.cmx"
    },
    {
      path = "meta/test_story_shell.cmx"
      dest = "test_story_shell.cmx"
    },
  ]

  deps = [
    ":modular_test_harness_bin",
    ":test_session_shell_bin",
    ":test_story_shell_bin",
  ]
}

test_package("tests") {
  package_name = "modular_test_harness_test"

  tests = [
    {
      name = "modular_test_harness_test"
      environments = basic_envs
    },
  ]

  deps = [ ":modular_test_harness_test" ]
}
