# 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("story_shell") {
  testonly = true
  deps = [
    ":defs",
    ":story_shell_test_session_shell",
    ":story_shell_test_story_shell",
  ]
}

source_set("defs") {
  testonly = true

  sources = [
    "defs.h",
  ]
}

executable_package("story_shell_test_story_shell") {
  testonly = true

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

  sources = [
    "story_shell_test_story_shell.cc",
  ]

  deps = [
    ":defs",
    "//garnet/public/lib/fsl",
    "//peridot/lib/fidl:array_to_string",
    "//peridot/lib/fidl:clone",
    "//peridot/lib/rapidjson",
    "//peridot/lib/testing:component_base",
    "//peridot/public/lib/app_driver/cpp",
    "//peridot/public/lib/integration_testing/cpp",
    "//peridot/tests/common:defs",
    "//sdk/fidl/fuchsia.modular",
    "//sdk/fidl/fuchsia.testing.runner",
    "//sdk/fidl/fuchsia.ui.views",
    "//sdk/lib/fidl/cpp",
    "//src/lib/fxl",
  ]
}

executable_package("story_shell_test_session_shell") {
  testonly = true

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

  sources = [
    "story_shell_test_session_shell.cc",
  ]

  deps = [
    ":defs",
    "//garnet/public/lib/fsl",
    "//peridot/lib/fidl:array_to_string",
    "//peridot/lib/fidl:clone",
    "//peridot/lib/rapidjson",
    "//peridot/lib/testing:component_main",
    "//peridot/lib/testing:session_shell_base",
    "//peridot/public/lib/app_driver/cpp",
    "//peridot/public/lib/integration_testing/cpp",
    "//peridot/tests/common:defs",
    "//sdk/fidl/fuchsia.modular",
    "//sdk/fidl/fuchsia.testing.runner",
    "//sdk/fidl/fuchsia.ui.policy",
    "//sdk/lib/fidl/cpp",
    "//src/lib/fxl",
  ]
}
