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

  if (use_prebuilt_mojo_shell) {
    deps += [ "//mojo/public/tools:copy_mojo_shell" ]
  } else {
    deps += [ "//mojo/shell:mojo_shell" ]
    if (is_android) {
      deps += [ "//mojo/shell:mojo_shell_apk" ]
    }
  }

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

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

  if (mojo_use_dart) {
    deps += [
      "//mojo/dart",
    ]
  }

  if (is_linux) {
    deps += [
      "//mojo/python",
    ]
  }

  if (!is_win) {
    deps += [
      "//mojo/shell:mojo_launcher",
    ]
  }
}

group("tests") {
  testonly = true
  deps = [
    "//mojo/application_manager:mojo_application_manager_unittests",
    "//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/public/c/system/tests:perftests",
    "//mojo/public/cpp/application/tests:mojo_public_application_unittests",
    "//mojo/public/cpp/bindings/tests:mojo_public_bindings_unittests",
    "//mojo/public/cpp/environment/tests:mojo_public_environment_unittests",
    "//mojo/public/cpp/system/tests:mojo_public_system_unittests",
    "//mojo/public/cpp/utility/tests:mojo_public_utility_unittests",
    "//mojo/services/clipboard:clipboard_unittests",
    "//mojo/services/network:apptests",
    "//mojo/shell:external_application_unittests",
    "//mojo/shell:mojo_shell_tests",
    "//mojo/tools:message_generator",
    "//services/js:js_services_unittests",
  ]

  if (is_android) {
    deps += [
      "//mojo/edk/system:mojo_system_unittests_apk",
    ]
  }

  if (use_aura) {
    deps += [
      "//mojo/services/public/cpp/view_manager/tests:mojo_view_manager_lib_unittests",
      "//mojo/services/view_manager:view_manager_service_apptests",
      "//mojo/services/view_manager:view_manager_service_unittests",
      "//mojo/services/view_manager:view_manager_unittests",
      "//mojo/services/window_manager:window_manager_unittests",
    ]
  }

  if (mojo_use_dart) {
    deps += [
      "//mojo/dart/embedder/test:dart_unittests",
    ]
  }
}

if (is_android) {
  import("//build/config/android/rules.gni")

  generate_jni("jni_headers") {
    sources = [
      "android/javatests/src/org/chromium/mojo/MojoTestCase.java",
      "android/javatests/src/org/chromium/mojo/bindings/ValidationTestUtil.java",
      "android/system/src/org/chromium/mojo/system/impl/CoreImpl.java",
      "services/native_viewport/android/src/org/chromium/mojo/PlatformViewportAndroid.java",
    ]

    jni_package = "mojo"
  }
}
