# 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/device_info",
    "//services/fake_surfaces",
    "//services/files",
    "//services/gles2:lib",
    "//services/http_server",
    "//services/icu_data",
    "//services/keyboard_native",
    "//services/kiosk_wm",
    "//services/native_viewport",
    "//services/prediction",
    "//services/reaper",
    "//services/surfaces",
    "//services/test_service:bindings",
    "//services/tracing",
    "//services/url_response_disk_cache",
    "//services/view_manager",
    "//services/window_manager",
  ]

  if (is_android) {
    deps += [
      "//services/android:java_handler",
      "//services/camera_roll",
      "//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) {
    deps += [ "//services/python" ]
  }

  # 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/files:apptests",
    "//services/http_server:apptests",
    "//services/prediction:apptests",
    "//services/reaper:tests",
    "//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",
    "//services/window_manager:window_manager_apptests",
    "//services/window_manager:window_manager_unittests",
  ]

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

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

  # 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:js_apptests",
      "//services/js:js_services_unittests",
    ]
  }
}
