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