# Copyright 2016 The Chromium 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("//services/catalog/public/tools/catalog.gni")
import("//services/service_manager/public/tools/test/service_test.gni")
import("//testing/test.gni")

# One Big Target for services to register their unit test sources. This exists
# to avoid having to maintain a separate test binary for every service.
#
# To add tests for a new service, please define a "tests" source_set in the
# service subdirectory and add it as a dependency here. If your unit tests
# use the ServiceTest framework, you must also include corresponding catalog
# entries in the "service_unittests_catalog" target below.
service_test("service_unittests") {
  deps = [
    "//services/data_decoder:tests",
    "//services/device:tests",
    "//services/preferences:tests",
    "//services/resource_coordinator:tests",
    "//services/shape_detection:tests",
  ]

  if (is_android) {
    # Some tests need to initialize V8.
    deps += [ "//v8:v8_external_startup_data_assets" ]
  } else {
    # NOTE: We do not currently support standalone service binaries on Android,
    # so any tests which use the ServiceTest framework to connect to standalone
    # services must be added here.
    deps += [ "//services/video_capture:tests" ]
  }

  catalog = ":service_unittests_catalog"
}

catalog("service_unittests_catalog") {
  testonly = true
  catalog_deps = [
    "//services/preferences:tests_catalog",
    "//services/video_capture:tests_catalog",
  ]
}
