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

group("module_context") {
  testonly = true
  deps = [
    ":defs",
    ":module_context_test_entity_module",
    ":module_context_test_module",
    ":module_context_test_session_shell",
  ]
}

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/lib/fsl",
    "//peridot/lib/fidl:array_to_string",
    "//peridot/lib/fidl:single_service_app",
    "//peridot/lib/rapidjson",
    "//peridot/lib/testing:component_main",
    "//peridot/lib/testing:session_shell_base",
    "//peridot/public/lib/integration_testing/cpp",
    "//peridot/tests/common:defs",
    "//sdk/fidl/fuchsia.modular",
    "//sdk/fidl/fuchsia.testing.runner",
    "//sdk/lib/fidl/cpp",
    "//src/lib/fxl",
  ]
}

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",
    "//peridot/lib/rapidjson",
    "//peridot/lib/testing:component_base",
    "//peridot/public/lib/app_driver/cpp:module_driver",
    "//peridot/public/lib/integration_testing/cpp",
    "//peridot/tests/common:defs",
    "//peridot/tests/trigger:trigger_test_service",
    "//sdk/fidl/fuchsia.modular",
    "//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",
    "//peridot/lib/entity:entity_watcher",
    "//peridot/lib/rapidjson",
    "//peridot/lib/testing:component_base",
    "//peridot/public/lib/app_driver/cpp:module_driver",
    "//peridot/tests/common:defs",
    "//peridot/tests/trigger:trigger_test_service",
    "//sdk/fidl/fuchsia.modular",
    "//zircon/public/lib/async-loop-cpp",
  ]
}

source_set("defs") {
  testonly = true

  sources = [
    "defs.h",
  ]
}
