# Copyright 2017 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("//peridot/build/executable_package.gni")

executable_package("chain_test_session_shell") {
  deprecated_bare_package_url = "//build"

  testonly = true

  meta = [
    {
      path = "meta/chain_test_session_shell.cmx"
      dest = "chain_test_session_shell.cmx"
    },
  ]
  
  sources = [
    "chain_test_session_shell.cc",
  ]

  deps = [
    ":defs",
    "//garnet/public/fidl/fuchsia.testing.runner",
    "//garnet/public/fidl/fuchsia.ui.viewsv1",
    "//garnet/public/lib/fidl/cpp",
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/fxl",
    "//peridot/lib/fidl:array_to_string",
    "//peridot/lib/fidl:single_service_app",
    "//peridot/lib/rapidjson",
    "//peridot/public/lib/integration_testing/cpp",
    "//peridot/lib/testing:component_main",
    "//peridot/lib/testing:session_shell_base",
    "//peridot/public/fidl/fuchsia.modular",
    "//peridot/public/lib/context/cpp:formatting",
    "//peridot/tests/common:defs",
  ]

#
}

executable_package("chain_test_module") {
  deprecated_bare_package_url = "//build"

  testonly = true

  meta = [
    {
      path = "meta/chain_test_module.cmx"
      dest = "chain_test_module.cmx"
    },
  ]

  sources = [
    "chain_test_module.cc",
  ]

  deps = [
    ":defs",
    "//garnet/public/fidl/fuchsia.ui.viewsv1",
    "//peridot/public/lib/integration_testing/cpp",
    "//peridot/lib/testing:component_base",
    "//peridot/public/fidl/fuchsia.modular",
    "//peridot/public/lib/app_driver/cpp:module_driver",
    "//peridot/tests/common:defs",
    "//zircon/public/lib/async-loop-cpp",
  ]
}

executable_package("chain_test_child_module") {
  deprecated_bare_package_url = "//build"

  testonly = true

  meta = [
    {
      path = "meta/chain_test_child_module.cmx"
      dest = "chain_test_child_module.cmx"
    },
  ]

  sources = [
    "chain_test_child_module.cc",
  ]

  deps = [
    ":defs",
    "//garnet/public/fidl/fuchsia.ui.viewsv1",
    "//garnet/public/lib/fsl",
    "//peridot/public/lib/integration_testing/cpp",
    "//peridot/lib/testing:component_base",
    "//peridot/public/fidl/fuchsia.modular",
    "//peridot/public/lib/app_driver/cpp:module_driver",
    "//peridot/tests/common:defs",
  ]
}

source_set("defs") {
  testonly = true

  sources = [
    "defs.h",
  ]
}
