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

group("session_shell") {
  testonly = true
  deps = [
    ":defs",
    ":session_shell_test_session_shell",
  ]
}

source_set("defs") {
  testonly = true

  sources = [
    "defs.h",
  ]
}

executable_package("session_shell_test_session_shell") {
  testonly = true

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

  sources = [
    "session_shell_test_session_shell.cc",
  ]

  deps = [
    ":defs",
    "//garnet/public/lib/fsl",
    "//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",
  ]
}
