# 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/module_args/mojo.gni")
import("//mojo/public/mojo.gni")

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
    mojo_use_nacl_nonsfi = (is_linux || is_android) && !is_asan
  }
  deps = [
    ":tests",
    "//mojo/common",
    "//mojo/dart",
    "//mojo/public",
    "//mojo/services",
  ]

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

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

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

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

  if (mojo_use_nacl_nonsfi) {
    deps += [
      "//mojo/nacl:mojo_nacl_nonsfi",
      "//mojo/nacl:mojo_nacl_tests_nonsfi",
    ]
  }
}

group("tests") {
  testonly = true
  deps = [
    "//mojo/common:mojo_common_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",
    "//mojo/gles2:mgl_unittests",
    "//mojo/gpu:apptests",
    "//mojo/services/files/c:apptests",
    "//mojo/services/files/cpp:files_impl_apptests",
  ]

  if (is_linux || is_android) {
    deps += [ "//mojo/converters/surfaces/tests:mojo_surfaces_lib_unittests" ]
  }

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