# 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")

group("mojo") {
  # Meta-target, don't link into production code.
  testonly = true
  declare_args() {
    mojo_use_go = false
  }
  deps = [
    ":tests",
    "//mojo/apps/js:mojo_js",
    "//mojo/common",
    "//mojo/examples",
    "//mojo/public",
    "//mojo/services",
    "//mojo/shell:mojo_shell",
    "//mojo/tools/package_manager",
  ]

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

group("tests") {
  testonly = true
  deps = [
    "//mojo/application_manager:mojo_application_manager_unittests",
    "//mojo/apps/js/test:mojo_apps_js_unittests",
    "//mojo/common:mojo_common_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/public/js/bindings/tests:mojo_js_unittests",
    "//mojo/services/clipboard:mojo_clipboard_unittests",
    "//mojo/services/public/cpp/surfaces/tests:mojo_surfaces_lib_unittests",
    "//mojo/shell:mojo_shell_tests",
    "//mojo/system:mojo_message_pipe_perftests",
    "//mojo/system:mojo_system_unittests",
    "//mojo/tools:message_generator",
  ]

  if (use_aura) {
    deps += [
      "//mojo/services/public/cpp/view_manager/tests:mojo_view_manager_lib_unittests",
      "//mojo/services/view_manager:mojo_view_manager_unittests",
      "//mojo/services/window_manager:mojo_core_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"
  }
}
