# 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/device:tests",
    "//services/image_decoder:tests",
    "//services/memory_instrumentation: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") {
  catalog_deps = [ "//services/video_capture:tests_catalog" ]
}
