# 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/services/network:unittests",
    "//mojo/shell:external_application_unittests",
    "//mojo/shell:mojo_shell_tests",
    "//mojo/tools:message_generator",
    "//services/js:js_services_unittests",
  ]

  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 (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"
  }
}
