# 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("testing") {
  sources = [
    "reporting.cc",
    "reporting.h",
    "testing.cc",
    "testing.h",
  ]

  deps = [
    "//garnet/public/fidl/fuchsia.testing.runner",
    "//garnet/public/lib/component/cpp",
  ]
}

source_set("component_base") {
  testonly = true

  sources = [
    "component_base.h",
  ]

  public_deps = [
    ":testing",
    "//garnet/public/lib/component/cpp",
    "//garnet/public/lib/fxl",
    "//peridot/lib/fidl:single_service_app",
    "//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("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/user_runner/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/user_runner/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/user_runner/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/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",
  ]
}
