# 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.

source_set("component_base") {
  testonly = true

  sources = [
    "component_base.h",
  ]

  public_deps = [
    ":component_main",
    "//garnet/public/lib/component/cpp",
    "//garnet/public/lib/fxl",
    "//peridot/lib/fidl:single_service_app",
    "//peridot/public/lib/integration_testing/cpp",
  ]
}

source_set("component_main") {
  testonly = true

  sources = [
    "component_main.h",
  ]

  public_deps = [
    "//peridot/public/lib/app_driver/cpp:app_driver",
    "//zircon/public/lib/async-loop-cpp",
  ]
}

source_set("component_context_fake") {
  testonly = true

  sources = [
    "component_context_fake.cc",
    "component_context_fake.h",
  ]

  public_deps = [
    ":entity_resolver_fake",
    "//garnet/public/lib/fxl",
    "//peridot/public/fidl/fuchsia.modular",
  ]
}

source_set("entity_resolver_fake") {
  testonly = true

  sources = [
    "entity_resolver_fake.cc",
    "entity_resolver_fake.h",
  ]

  public_deps = [
    "//garnet/public/lib/fxl",
    "//peridot/public/fidl/fuchsia.modular",
  ]
}

source_set("module_resolver_fake") {
  testonly = true

  sources = [
    "module_resolver_fake.cc",
    "module_resolver_fake.h",
  ]

  public_deps = [
    "//garnet/public/lib/fidl/cpp",
    "//peridot/public/fidl/fuchsia.modular",
  ]
}

source_set("module_facet_reader_fake") {
  testonly = true

  sources = [
    "module_facet_reader_fake.cc",
    "module_facet_reader_fake.h",
  ]

  public_deps = [
    "//garnet/public/lib/fxl",
    "//peridot/lib/module_manifest:module_facet_reader",
    "//peridot/public/fidl/fuchsia.modular",
  ]
}

source_set("session_shell_base") {
  testonly = true

  sources = [
    "session_shell_base.h",
  ]

  public_deps = [
    ":component_base",
    ":session_shell_impl",
  ]
}

source_set("session_shell_impl") {
  testonly = true

  sources = [
    "session_shell_impl.h",
    "session_shell_impl.cc",
  ]

  public_deps = [
    "//garnet/public/fidl/fuchsia.ui.viewsv1",
    "//garnet/public/lib/fidl/cpp",
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/fxl",
    "//garnet/public/lib/component/cpp",
    "//garnet/public/lib/fxl",
    "//peridot/public/fidl/fuchsia.modular",
    "//peridot/public/lib/integration_testing/cpp",
    "//zircon/public/lib/async-loop-cpp",
  ]
}

source_set("story_controller_mock") {
  testonly = true

  sources = [
    "story_controller_mock.h",
  ]

  public_deps = [
    "//garnet/public/lib/fxl",
    "//peridot/public/fidl/fuchsia.modular",
  ]

  deps = [
    "//garnet/public/lib/fidl/cpp",
  ]
}

source_set("story_provider_mock") {
  testonly = true

  sources = [
    "story_provider_mock.h",
  ]

  public_deps = [
    "//garnet/public/lib/fxl",
    "//peridot/public/fidl/fuchsia.modular",
  ]

  deps = [
    ":story_controller_mock",
    "//garnet/public/lib/fidl/cpp",
  ]
}

source_set("test_story_command_executor") {
  testonly = true

  sources = [
    "test_story_command_executor.cc",
    "test_story_command_executor.h",
  ]

  deps = [
    "//peridot/bin/sessionmgr/puppet_master:story_command_executor",
    "//peridot/lib/fidl:clone",
    "//peridot/public/fidl/fuchsia.modular",
  ]
}

source_set("test_with_ledger") {
  testonly = true

  sources = [
    "test_with_ledger.cc",
    "test_with_ledger.h",
  ]

  public_deps = [
    ":ledger_repository_for_testing",
    "//garnet/public/lib/component/cpp",
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/fxl",
    "//garnet/public/lib/gtest",
    "//peridot/lib/ledger_client:page_client",
    "//third_party/googletest:gtest",
  ]
}

source_set("test_with_session_storage") {
  testonly = true

  sources = [
    "test_with_session_storage.cc",
    "test_with_session_storage.h",
  ]

  public_deps = [
    ":test_with_ledger",
    "//peridot/bin/sessionmgr/storage",
    "//peridot/public/fidl/fuchsia.modular",
  ]
}

source_set("fake_agent_runner_storage") {
  testonly = true

  sources = [
    "fake_agent_runner_storage.h",
  ]

  deps = [
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/fxl",
    "//peridot/bin/sessionmgr/agent_runner:public",
  ]
}

source_set("ledger_repository_for_testing") {
  testonly = true

  sources = [
    "ledger_repository_for_testing.cc",
    "ledger_repository_for_testing.h",
  ]

  deps = [
    "//garnet/public/fidl/fuchsia.sys",
    "//garnet/public/lib/component/cpp",
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/fxl",
    "//peridot/bin/ledger/fidl",
    "//peridot/lib/common:teardown",
    "//peridot/lib/fidl:app_client",
    "//peridot/lib/ledger_client:constants",
    "//peridot/lib/ledger_client:status",
    "//peridot/public/fidl/fuchsia.ledger",
  ]

  public_deps = [
    "//peridot/lib/scoped_tmpfs",
    "//peridot/public/fidl/fuchsia.modular",
  ]
}

source_set("mock_base") {
  testonly = true

  sources = [
    "mock_base.cc",
    "mock_base.h",
  ]

  deps = [
    "//garnet/public/lib/fxl",
    "//third_party/googletest:gtest",
  ]
}

source_set("wait_until_idle") {
  testonly = true

  sources = [
    "wait_until_idle.h",
  ]

  public_deps = [
    "//zircon/public/lib/async-loop-cpp",
  ]

  deps = [
    "//garnet/public/lib/fsl",
    "//third_party/googletest:gtest",
  ]
}

source_set("test_driver") {
  sources = [
    "test_driver.h",
  ]
}
