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

import("//build/config/ui.gni")
import("//build/module_args/mojo.gni")
import("//mojo/public/mojo.gni")

# TODO(beng): this meta target should probably move to the root dir's BUILD.gn.
group("mojo") {
  # Meta-target, don't link into production code.
  testonly = true
  declare_args() {
    mojo_use_go = false

    # TODO(ncbray): support ASAN once NaCl's GN build is unforked.
    mojo_use_nacl = is_linux && !is_asan
  }
  deps = [
    ":tests",
    "//benchmarks",
    "//examples",
    "//mojo/common",
    "//mojo/dart/apptest",
    "//mojo/dart/apptest:apptest_pkg",
    "//mojo/dart/mojom",
    "//mojo/public",
    "//mojo/services",
    "//services",
  ]

  if (is_android) {
    deps += [
      "//mojo/android",
      "//mojo/tools/android_shortcuts",
      "//mojo/tools:remote_file_reader",
    ]
  }

  if (is_linux && mojo_use_go) {
    deps += [ "//mojo/go" ]
  }

  if (is_linux) {
    deps += [ "//mojo/python" ]
  }

  if (mojo_use_nacl) {
    deps += [
      "//mojo/nacl:mojo_nacl",
      "//mojo/nacl:mojo_nacl_tests",
    ]
  }
}

group("tests") {
  testonly = true
  deps = [
    "//mojo/common:mojo_common_unittests",
    "//mojo/converters/surfaces/tests:mojo_surfaces_lib_unittests",
    "//mojo/edk/system:tests",
    "//mojo/edk/test:public_tests",
    "//mojo/dart/embedder/test:dart_unittests",
    "//mojo/public/cpp/bindings/tests:versioning_apptests",
    "//mojo/services/view_manager/public/cpp/tests:mojo_view_manager_lib_unittests",
    "//mojo/tests:mojo_task_tracker_perftests",
    "//mojo/tools:message_generator",
    "//services/clipboard:apptests",
    "//services/dart/dart_apptests",
    "//services/files:apptests",
    "//mojo/services/files/public/c:apptests",
    "//services/http_server: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",
    "//shell:apptests",
  ]

  if (is_linux) {
    deps += [ "//services/python:python_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 += [
      "//mojo/edk/js:tests",
      "//services/js:js_apptests",
      "//services/js:js_services_unittests",
    ]
  }

  if (mojo_use_prebuilt_network_service) {
    deps += [ "//mojo/public/tools:copy_network_service_apptests" ]
  }
}
