# 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/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/services/view_manager/public/cpp/tests:mojo_view_manager_lib_unittests",
    "//mojo/tools:message_generator",
    "//services/clipboard: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",
  ]

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

  if (!is_asan) {
    deps += [
      "//mojo/dart/embedder/test:dart_unittests",
      "//services/dart:dart_apptests",
    ]
  }
}
