# Copyright 2016 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/testing/environments.gni")
import("//peridot/build/executable_package.gni")
import("//peridot/build/tests_package.gni")

hermetic_tests_package("story_runner_unittests") {
  deps = [
    ":link_impl_unittest",
    ":story_controller_impl_unittest",  # incomplete, for now.
  ]
  environments = basic_envs
}

# NOTE: We are in the process of deconstructing story_runner into its
# constituent components. Please see MF-85.
source_set("story_runner") {
  sources = [
    "link_impl.cc",
    "link_impl.h",
    "module_context_impl.cc",
    "module_context_impl.h",
    "module_controller_impl.cc",
    "module_controller_impl.h",
    "ongoing_activity_impl.cc",
    "ongoing_activity_impl.h",
    "story_controller_impl.cc",
    "story_controller_impl.h",
    "story_entity_provider.cc",
    "story_entity_provider.h",
    "story_provider_impl.cc",
    "story_provider_impl.h",
    "story_shell_context_impl.cc",
    "story_shell_context_impl.h",
  ]

  public_deps = [
    "//peridot/bin/basemgr/cobalt",
    "//peridot/bin/sessionmgr:component_context",
    "//peridot/bin/sessionmgr:focus",
    "//peridot/bin/sessionmgr:presentation_provider",
    "//peridot/bin/sessionmgr/agent_runner",
    "//peridot/bin/sessionmgr/message_queue",
    "//peridot/bin/sessionmgr/puppet_master/command_runners/operation_calls:add_mod_call",
    "//peridot/bin/sessionmgr/puppet_master/command_runners/operation_calls:find_modules_call",
    "//peridot/bin/sessionmgr/puppet_master/command_runners/operation_calls:get_types_from_entity_call",
    "//peridot/bin/sessionmgr/puppet_master/command_runners/operation_calls:initialize_chain_call",
    "//peridot/bin/sessionmgr/storage:constants_and_utils",
    "//peridot/bin/sessionmgr/story/model",
    "//peridot/bin/sessionmgr/story/systems:story_visibility_system",
    "//peridot/lib/common:async_holder",
    "//peridot/lib/common:teardown",
    "//peridot/lib/fidl:app_client",
    "//peridot/lib/fidl:array_to_string",
    "//peridot/lib/fidl:environment",
    "//peridot/lib/fidl:json_xdr",
    "//peridot/lib/fidl:proxy",
    "//peridot/lib/ledger_client:operations",
    "//peridot/lib/ledger_client:page_client",
    "//peridot/lib/ledger_client:types",
    "//peridot/lib/module_manifest:module_facet_reader",
    "//peridot/lib/rapidjson",
    "//peridot/lib/util",
    "//peridot/public/lib/async/cpp:future",
    "//peridot/public/lib/async/cpp:operation",
    "//peridot/public/lib/context/cpp:context_helper",
    "//peridot/public/lib/entity/cpp:json",
    "//peridot/public/lib/fostr/fidl/fuchsia.modular",
    "//sdk/fidl/fuchsia.app.discover",
    "//sdk/fidl/fuchsia.ledger",
    "//sdk/fidl/fuchsia.modular",
    "//sdk/fidl/fuchsia.modular.internal",
    "//sdk/fidl/fuchsia.scenic.snapshot",
    "//sdk/fidl/fuchsia.ui.policy",
    "//sdk/fidl/fuchsia.ui.views",
    "//sdk/lib/fidl/cpp",
    "//sdk/lib/sys/cpp",
    "//src/ledger/bin/fidl",
    "//src/lib/fxl",
  ]

  deps = [
    "//peridot/bin/sessionmgr/storage",
    "//peridot/bin/sessionmgr/story:system",
    "//peridot/bin/sessionmgr/story/model",
    "//peridot/bin/sessionmgr/story/model:noop_story_model_storage",
    "//peridot/bin/sessionmgr/story/model:story_model_owner",
    "//peridot/lib/fidl:clone",
    "//sdk/fidl/fuchsia.ui.app",
    "//sdk/fidl/fuchsia.ui.scenic",
    "//sdk/lib/ui/scenic/cpp",
    "//src/lib/uuid",
    "//zircon/public/lib/async-loop-cpp",
  ]
}

executable_package("dev_story_shell") {
  meta = [
    {
      path = "meta/dev_story_shell.cmx"
      dest = "dev_story_shell.cmx"
    },
  ]
  sources = [
    "dev_story_shell.cc",
  ]

  deps = [
    "//peridot/lib/fidl:single_service_app",
    "//peridot/lib/fidl:view_host",
    "//peridot/public/lib/app_driver/cpp",
    "//sdk/fidl/fuchsia.modular",
    "//sdk/fidl/fuchsia.ui.scenic",
    "//sdk/fidl/fuchsia.ui.views",
    "//sdk/lib/sys/cpp",
    "//src/lib/fxl",
    "//zircon/public/lib/async-loop-cpp",
  ]
}

executable("story_controller_impl_unittest") {
  testonly = true

  sources = [
    "story_controller_impl_unittest.cc",
  ]

  deps = [
    ":story_runner",
    "//peridot/lib/fidl:clone",
    "//src/lib/fxl/test:gtest_main",
  ]
}

executable("link_impl_unittest") {
  testonly = true

  sources = [
    "link_impl_unittest.cc",
  ]

  deps = [
    ":story_runner",
    "//peridot/bin/sessionmgr/agent_runner",
    "//peridot/lib/fidl:clone",
    "//peridot/lib/testing:test_with_ledger",
    "//peridot/public/lib/entity/cpp:json",
    "//src/lib/fxl/test:gtest_main",
  ]
}
