# 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")

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
  output_name = "modular_test_harness_test"
  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",
    "//third_party/googletest: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"
    },
  ]

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

  meta = [
    {
      path = "meta/modular_test_harness.cmx"
      dest = "modular_test_harness.cmx"
    },
    {
      path = "meta/modular_test_harness_test.cmx"
      dest = "modular_test_harness_test.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",
    ":modular_test_harness_test",
    ":test_base_shell_bin",
    ":test_session_shell_bin",
    ":test_story_shell_bin",
  ]
}
