# 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 = [
    "//garnet/public/lib/fxl",
    "//peridot/public/lib/modular_test_harness/cpp:test_harness_impl",
    "//sdk/fidl/fuchsia.modular.testing",
    "//sdk/lib/sys/cpp",
    "//zircon/public/lib/async-loop-cpp",
  ]
}

executable("test_base_shell_bin") {
  testonly = true

  sources = [
    "test_base_shell.cc",
  ]

  deps = [
    "//garnet/public/lib/callback",
    "//garnet/public/lib/fxl",
    "//peridot/lib/fidl:single_service_app",
    "//peridot/public/lib/app_driver/cpp",
    "//peridot/public/lib/integration_testing/cpp",
    "//sdk/fidl/fuchsia.auth",
    "//sdk/fidl/fuchsia.modular",
    "//sdk/fidl/fuchsia.ui.views",
    "//zircon/public/lib/async-loop-cpp",
  ]
}

executable("test_session_shell_bin") {
  testonly = true

  sources = [
    "test_session_shell.cc",
  ]

  deps = [
    "//garnet/public/lib/fxl",
    "//peridot/lib/fidl:single_service_app",
    "//peridot/lib/fidl:view_host",
    "//peridot/public/lib/app_driver/cpp",
    "//sdk/fidl/fuchsia.modular",
    "//sdk/fidl/fuchsia.ui.scenic",
    "//sdk/fidl/fuchsia.ui.views",
    "//sdk/lib/fidl/cpp",
    "//zircon/public/lib/async-loop-cpp",
  ]
}

executable("test_story_shell_bin") {
  testonly = true

  sources = [
    "test_story_shell.cc",
  ]

  deps = [
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/fxl",
    "//peridot/lib/fidl:single_service_app",
    "//peridot/lib/fidl:view_host",
    "//peridot/public/lib/app_driver/cpp",
    "//sdk/fidl/fuchsia.modular",
    "//sdk/fidl/fuchsia.ui.views",
    "//zircon/public/lib/async-loop-cpp",
  ]
}

executable("modular_test_harness_test") {
  testonly = true
  sources = [
    "modular_test_harness_test.cc",
  ]
  deps = [
    "//peridot/public/lib/modular_test_harness/cpp:test_harness_fixture",
    "//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",
  ]
}

package("modular_test_harness") {
  testonly = true
  binaries = [
    {
      name = "test_story_shell_bin"
    },
    {
      name = "test_base_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_base_shell.cmx"
      dest = "test_base_shell.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_base_shell_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",
  ]
}
