# 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/nacl/config.gni")
import("//build/module_args/mojo.gni")
import("//mojo/public/mojo.gni")
import("//testing/test.gni")

declare_args() {
  mojo_use_go = false
}

group("mojo") {
  # Meta-target, don't link into production code.
  testonly = true
  deps = [
    ":system_thunks",
    ":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) {
    if (mojo_use_nacl_sfi) {
      deps += [
        "//mojo/nacl/sfi:mojo_nacl",
        "//mojo/nacl/sfi:mojo_nacl_tests_sfi",
      ]
    }

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

group("tests") {
  testonly = true
  deps = [
    ":public_tests",
    "//mojo/common:mojo_common_unittests",
    "//mojo/converters:mojo_converters_unittests",
    "//mojo/dart:tests",
    "//mojo/edk:tests",
    "//mojo/file_utils:file_utils_apptests",
    "//mojo/gles2:mgl_unittests",
    "//mojo/public/cpp/bindings/tests:versioning_apptests",
    "//mojo/services/files/c:apptests",
    "//mojo/services/files/cpp:files_impl_apptests",
    "//mojo/services/log/cpp:log_client_apptests",
    "//mojo/tools:message_generator",
    "//mojo/ui:unittests",
  ]

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

# This archives the system thunks implementation for exporting to SDK consumers.
static_library("system_thunks") {
  complete_static_lib = true
  deps = [
    "//mojo/public/platform/native:system",
  ]
}

# Public SDK test targets follow. These targets are not defined within the
# public SDK itself since they are built as native executable binaries, needing
# to be linked with the EDK.
# TODO(vtl): They should be converted to "apptests", i.e., run as apps.

group("public_tests") {
  testonly = true
  deps = [
    ":mojo_public_application_unittests",
    ":mojo_public_bindings_perftests",
    ":mojo_public_bindings_unittests",
    ":mojo_public_environment_unittests",
    ":mojo_public_system_perftests",
    ":mojo_public_system_unittests",
    ":mojo_public_utility_unittests",
    ":mojo_system_impl_private_unittests",
  ]
}

test("mojo_public_application_unittests") {
  deps = [
    "//mojo/edk/test:run_all_unittests",
    "//mojo/public/cpp/application/tests",
  ]
}

test("mojo_public_bindings_unittests") {
  deps = [
    "//mojo/edk/test:run_all_unittests",
    "//mojo/public/cpp/bindings/tests",
  ]
}

test("mojo_public_bindings_perftests") {
  deps = [
    "//mojo/edk/test:run_all_perftests",
    "//mojo/public/cpp/bindings/tests:perftests",
  ]
}

test("mojo_public_environment_unittests") {
  deps = [
    "//mojo/edk/test:run_all_unittests",
    "//mojo/public/cpp/environment/tests",
  ]
}

test("mojo_public_system_perftests") {
  deps = [
    "//mojo/edk/test:run_all_perftests",
    "//mojo/public/c/system/tests:perftests",
  ]
}

test("mojo_public_system_unittests") {
  deps = [
    "//mojo/edk/test:run_all_unittests",
    "//mojo/public/cpp/system/tests",
  ]
}

test("mojo_public_utility_unittests") {
  deps = [
    "//mojo/edk/test:run_all_unittests",
    "//mojo/public/cpp/utility/tests",
  ]
}

test("mojo_system_impl_private_unittests") {
  deps = [
    "//mojo/edk/test:run_all_unittests",
    "//mojo/public/platform/native:system_impl_private_tests",
  ]
}
