# 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",
  ]

  deps = [
    "//garnet/public/lib/fsl"
  ]
}

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",
  ]
}
