# 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/media",
    "//services/native_support",
    "//services/prediction",
    "//services/test_service:bindings",
    "//services/tracing",
  ]

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

  if (is_linux) {
    deps += [ "//services/keyboard" ]
  }

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

  if (is_android || is_linux) {
    deps += [
      "//services/device_info",
      "//services/files",
      "//services/kiosk_wm",
      "//services/ui",
      "//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.
  # TODO(cstout): javascript/v8 build support for fnl/musl
  if (!is_fnl && 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",
  ]

  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.
  # TODO(cstout): javascript/v8 build support for fnl/musl
  if (!is_fnl && 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",
    ]
  }
}
