# 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("//testing/test.gni")

group("mojo") {
  # Meta-target, don't link into production code.
  testonly = true
  deps = [
    ":tests",
    "//mojo/common",
  ]

  if (!(is_linux && current_cpu == "x86")) {
    deps += [ "//mojo/public" ]
  }

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

  deps += [ "//services/service_manager:all" ]
}

group("tests") {
  testonly = true
  deps = [
    ":mojo_perftests",
    ":mojo_unittests",
    "//ipc:ipc_tests",
    "//mojo/common:mojo_common_unittests",
    "//services/service_manager/tests",
  ]
}

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

test("mojo_perftests") {
  deps = [
    "//mojo/edk/test:run_all_perftests",
    "//mojo/edk/test:test_support",
    "//mojo/public/c/system/tests:perftests",
    "//mojo/public/cpp/bindings/tests:perftests",
  ]

  if (!is_ios) {
    sources = [
      "//mojo/edk/system/message_pipe_perftest.cc",
    ]

    deps += [
      "//base",
      "//base/test:test_support",
      "//mojo/edk/system",
      "//mojo/edk/system:test_utils",
      "//testing/gtest",
    ]
  }
}
