# 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("//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" ]
  }

  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/test:js_unittests",
    "//mojo/edk/js/test:js_integration_tests",
    "//mojo/edk/system:mojo_message_pipe_perftests",
    "//mojo/edk/system:mojo_system_unittests",
    "//mojo/edk/test:mojo_public_application_unittests",
    "//mojo/edk/test:mojo_public_bindings_unittests",
    "//mojo/edk/test:mojo_public_environment_unittests",
    "//mojo/edk/test:mojo_public_system_perftests",
    "//mojo/edk/test:mojo_public_system_unittests",
    "//mojo/edk/test:mojo_public_utility_unittests",
    "//mojo/services/network:apptests",
    "//mojo/services/view_manager/public/cpp/tests:mojo_view_manager_lib_unittests",
    "//mojo/tools:message_generator",
    "//services/clipboard:apptests",
    "//services/js:js_services_unittests",
    "//services/js:js_apptests",
    "//services/reaper:tests",
    "//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_asan) {
    deps += [
      "//mojo/dart/embedder/test:dart_unittests",
      "//services/dart:dart_apptests",
    ]
  }
}
