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

group("testing") {
  testonly = true
  deps = [
    ":component_base",
    ":component_context_fake",
    ":component_main",
    ":entity_resolver_fake",
    ":fake_agent_runner_storage",
    ":ledger_repository_for_testing",
    ":mock_base",
    ":module_facet_reader_fake",
    ":module_resolver_fake",
    ":session_shell_base",
    ":session_shell_impl",
    ":story_controller_mock",
    ":story_provider_mock",
    ":test_driver",
    ":test_story_command_executor",
    ":test_with_ledger",
    ":test_with_session_storage",
    ":wait_until_idle",
  ]
}

source_set("component_base") {
  testonly = true

  sources = [
    "component_base.h",
  ]

  public_deps = [
    ":component_main",
    "//peridot/lib/fidl:single_service_app",
    "//peridot/public/lib/integration_testing/cpp",
    "//sdk/lib/sys/cpp",
    "//src/lib/fxl",
  ]
}

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",
    "//sdk/fidl/fuchsia.modular",
    "//src/lib/fxl",
  ]
}

source_set("entity_resolver_fake") {
  testonly = true

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

  public_deps = [
    "//sdk/fidl/fuchsia.modular",
    "//src/lib/fxl",
  ]
}

source_set("module_resolver_fake") {
  testonly = true

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

  public_deps = [
    "//sdk/fidl/fuchsia.modular",
    "//sdk/lib/fidl/cpp",
  ]
}

source_set("module_facet_reader_fake") {
  testonly = true

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

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

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.cc",
    "session_shell_impl.h",
  ]

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

source_set("story_controller_mock") {
  testonly = true

  sources = [
    "story_controller_mock.h",
  ]

  public_deps = [
    "//sdk/fidl/fuchsia.modular",
    "//sdk/fidl/fuchsia.ui.views",
    "//src/lib/fxl",
  ]

  deps = [
    "//sdk/lib/fidl/cpp",
  ]
}

source_set("story_provider_mock") {
  testonly = true

  sources = [
    "story_provider_mock.h",
  ]

  public_deps = [
    "//sdk/fidl/fuchsia.modular",
    "//src/lib/fxl",
  ]

  deps = [
    ":story_controller_mock",
    "//sdk/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",
    "//sdk/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/fsl",
    "//garnet/public/lib/gtest",
    "//peridot/lib/ledger_client:page_client",
    "//sdk/lib/sys/cpp",
    "//src/lib/fxl",
    "//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",
    "//sdk/fidl/fuchsia.modular",
  ]
}

source_set("fake_agent_runner_storage") {
  testonly = true

  sources = [
    "fake_agent_runner_storage.h",
  ]

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

source_set("ledger_repository_for_testing") {
  testonly = true

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

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

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

source_set("mock_base") {
  testonly = true

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

  deps = [
    "//src/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",
  ]
}
