# 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
    mojo_use_nacl = false
  }
  deps = [
    ":tests",
    "//benchmarks",
    "//examples",
    "//mojo/common",
    "//mojo/dart/apptest",
    "//mojo/public",
    "//mojo/services",
    "//mojo/tools/package_manager",
    "//services",
  ]

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

  if (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/js:tests",
    "//mojo/edk/system:tests",
    "//mojo/edk/test:public_tests",
    "//mojo/dart/embedder/test:dart_unittests",
    "//mojo/services/view_manager/public/cpp/tests:mojo_view_manager_lib_unittests",
    "//mojo/tools:message_generator",
    "//services/clipboard:apptests",
    "//services/dart/dart_apptests",
    "//services/files:apptests",
    "//services/http_server:apptests",
    "//services/js:js_apptests",
    "//services/js:js_services_unittests",
    "//services/reaper: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 += [
      # TODO(vtl): See TODO in //services/files/c/BUILD.gn.
      "//services/files/c:apptests",
      "//services/python:python_apptests",
    ]
  }

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