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

group("trigger") {
  testonly = true
  deps = [
    ":defs",
    ":trigger_test_agent",
    ":trigger_test_module",
    ":trigger_test_service",
    ":trigger_test_session_shell",
  ]
}

source_set("defs") {
  testonly = true

  sources = [
    "defs.h",
  ]
}

executable_package("trigger_test_session_shell") {
  testonly = true

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

  sources = [
    "trigger_test_session_shell.cc",
  ]

  deps = [
    ":defs",
    "//garnet/public/lib/callback",
    "//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("trigger_test_module") {
  testonly = true

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

  sources = [
    "trigger_test_module.cc",
  ]

  deps = [
    ":defs",
    ":trigger_test_service",
    "//garnet/public/lib/callback",
    "//peridot/public/lib/app_driver/cpp:module_driver",
    "//peridot/public/lib/integration_testing/cpp",
    "//peridot/public/lib/message_queue/cpp",
    "//peridot/tests/common:defs",
    "//sdk/fidl/fuchsia.modular",
    "//zircon/public/lib/async-loop-cpp",
  ]
}

executable_package("trigger_test_agent") {
  testonly = true

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

  sources = [
    "trigger_test_agent.cc",
  ]

  deps = [
    ":defs",
    ":trigger_test_service",
    "//peridot/public/lib/app_driver/cpp:agent_driver",
    "//peridot/public/lib/integration_testing/cpp",
    "//peridot/tests/common:defs",
    "//sdk/fidl/fuchsia.modular",
    "//zircon/public/lib/async-loop-cpp",
  ]
}

fidl("trigger_test_service") {
  name = "test.peridot.tests.trigger"

  sources = [
    "trigger_test_service.fidl",
  ]
}
