# 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
  }
  deps = [
    ":tests",
    "//mojo/common",
    "//mojo/dart",
    "//mojo/public",
    "//mojo/services",
  ]

  if (is_android) {
    deps += [
      "//mojo/android",
      "//mojo/java",
      "//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",
    "//mojo/gpu:apptests",
    "//mojo/services/files/public/c: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" ]
  }

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