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

import("//peridot/build/tests_package.gni")

hermetic_tests_package("maxwell_integration_tests") {
  deps = [
    ":context_engine_test",
    ":suggestion_engine_test",
  ]
}

executable("context_engine_test") {
  testonly = true

  sources = [
    "context_engine_test.cc",
  ]

  deps = [
    ":context_common",
    "//garnet/public/lib/component/cpp",
    "//garnet/public/lib/fsl",
    "//peridot/bin/context_engine:scope_utils",
    "//peridot/lib/testing:entity_resolver_fake",
    "//peridot/public/fidl/fuchsia.modular",
    "//peridot/public/lib/context/cpp:context_helper",
    "//peridot/public/lib/context/cpp:context_metadata_builder",
    "//third_party/googletest:gtest_main",
  ]
}

executable("suggestion_engine_test") {
  testonly = true

  sources = [
    "suggestion_engine_test.cc",
  ]

  deps = [
    ":context_common",
    ":test_suggestion_listener",
    "//garnet/public/lib/component/cpp",
    "//garnet/public/lib/fsl",
    "//peridot/lib/rapidjson",
    "//peridot/lib/testing:story_provider_mock",
    "//peridot/lib/testing:wait_until_idle",
    "//peridot/public/fidl/fuchsia.modular",
    "//peridot/public/lib/context/cpp:context_helper",
    "//third_party/googletest:gtest_main",
  ]
}

# TODO(rosswang): move utils to a subdirectory

source_set("context_common") {
  testonly = true

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

  deps = [
    ":common",
    "//peridot/lib/testing:wait_until_idle",
  ]

  public_deps = [
    "//peridot/public/fidl/fuchsia.modular",
    "//third_party/googletest:gtest",
    "//zircon/public/lib/async-loop-cpp",
  ]
}

source_set("common") {
  testonly = true

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

  deps = [
    "//peridot/lib/environment_host",
    "//peridot/lib/testing:component_context_fake",
    "//peridot/lib/testing:entity_resolver_fake",
  ]

  public_deps = [
    "//garnet/public/lib/component/cpp",
    "//third_party/googletest:gtest",
    "//zircon/public/lib/async-loop-cpp",
  ]
}

source_set("test_suggestion_listener") {
  testonly = true

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

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

  public_deps = [
    "//third_party/googletest:gtest",
  ]
}
