# Copyright 2018 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("module_context_test_session_shell") {
  testonly = true

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

  sources = [
    "module_context_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/tests/common:defs",
  ]
}

executable_package("module_context_test_module") {
  testonly = true

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

  sources = [
    "module_context_test_module.cc",
  ]

  deps = [
    ":defs",
    "//garnet/public/fidl/fuchsia.ui.viewsv1",
    "//peridot/lib/rapidjson",
    "//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",
    "//peridot/tests/trigger:trigger_test_service",
    "//zircon/public/lib/async-loop-cpp",
  ]
}

executable_package("module_context_test_entity_module") {
  testonly = true

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

  sources = [
    "module_context_test_entity_module.cc",
  ]

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

source_set("defs") {
  testonly = true

  sources = [
    "defs.h",
  ]
}
