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

group("services") {
  testonly = true

  deps = [
    ":tests",
    "//services/asset_bundle",
    "//services/authenticating_url_loader_interceptor",
    "//services/authentication",
    "//services/clipboard",
    "//services/dart",
    "//services/debugger",
    "//services/fake_surfaces",
    "//services/gles2:lib",
    "//services/http_server",
    "//services/icu_data",
    "//services/keyboard_native",
    "//services/native_support",
    "//services/prediction",
    "//services/reaper",
    "//services/test_service:bindings",
    "//services/tracing",
  ]

  if (is_android) {
    deps += [
      "//services/android:java_handler",
      "//services/camera",
      "//services/contacts",
      "//services/location",
      "//services/notifications",
      "//services/sensors",
      "//services/speech_recognizer",
      "//services/sharing:android_sharing",
    ]
    if (defined(go_build_tool) && go_build_tool != "") {
      deps += [ "//services/vanadium/security:principal_service" ]
    }
  }

  if (is_linux && !is_fnl) {
    deps += [ "//services/python" ]
  }

  if (is_android || is_linux) {
    deps += [
      "//services/device_info",
      "//services/files",
      "//services/kiosk_wm",
      "//services/native_viewport",
      "//services/surfaces",
      "//services/url_response_disk_cache",
      "//services/view_manager",
      "//services/window_manager",
    ]
  }

  # TODO(jamesr): We only support building V8 snapshot data on a linux host
  # since it needs a 32 bit toolchain and we don't have one configured for mac
  # hosts.
  if (host_os == "linux") {
    deps += [ "//services/js" ]
  }
}

group("tests") {
  testonly = true

  deps = [
    "//services/asset_bundle:apptests",
    "//services/authenticating_url_loader_interceptor:apptests",
    "//services/clipboard:apptests",
    "//services/dart/dart_apptests",
    "//services/http_server:apptests",
    "//services/native_support:apptests",
    "//services/prediction:apptests",
    "//services/reaper:tests",
  ]

  if (is_linux && !is_fnl) {
    deps += [ "//services/python:python_apptests" ]
  }

  if (is_android) {
    deps += [ "//services/contacts:apptests" ]
    deps += [ "//services/notifications:apptests" ]
  }

  if (is_linux || is_android) {
    deps += [
      "//services/window_manager:window_manager_apptests",
      "//services/window_manager:window_manager_unittests",
    ]
  }

  # TODO(jamesr): We only support building V8 snapshot data on a linux host since it
  # needs a 32 bit toolchain and we don't have one configured for mac hosts.
  if (host_os == "linux") {
    deps += [ "//services/js:tests" ]
  }

  if (is_android || is_linux) {
    deps += [
      "//services/files:apptests",
      "//services/url_response_disk_cache:tests",
      "//services/view_manager:mojo_view_manager_client_apptests",
      "//services/view_manager:view_manager_service_apptests",
      "//services/view_manager:view_manager_service_unittests",
    ]
  }
}
