# 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/lib/app/cpp",
    "//garnet/public/lib/test_runner/fidl",
  ]
}

source_set("component_base") {
  testonly = true

  sources = [
    "component_base.h",
  ]

  public_deps = [
    ":testing",
    "//garnet/public/lib/app/cpp",
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/fxl",
    "//peridot/lib/fidl:single_service_app",
    "//peridot/public/lib/app_driver/cpp:app_driver",
  ]
}

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/lib:fidl",
  ]
}

source_set("entity_resolver_fake") {
  testonly = true

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

  public_deps = [
    "//garnet/public/lib/fxl",
    "//peridot/public/lib:fidl",
  ]
}

source_set("story_controller_mock") {
  testonly = true

  sources = [
    "story_controller_mock.h",
  ]

  public_deps = [
    "//garnet/public/lib/fxl",
    "//peridot/public/lib:fidl",
  ]

  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/lib:fidl",
  ]

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

source_set("test_with_ledger") {
  testonly = true

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

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

source_set("fake_application_launcher") {
  testonly = true

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

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

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/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/lib/app/cpp",
    "//garnet/public/lib/app/fidl",
    "//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/lib/ledger/fidl",
  ]

  public_deps = [
    "//peridot/public/lib:fidl",
  ]
}

source_set("mock_base") {
  testonly = true

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

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