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

static_library("test_support") {
  testonly = true
  sources = [
    "mojo_test_base.cc",
    "mojo_test_base.h",
    "test_utils.h",
    "test_utils_posix.cc",
    "test_utils_win.cc",
  ]

  if (!is_ios) {
    sources += [
      "multiprocess_test_helper.cc",
      "multiprocess_test_helper.h",
    ]
  }

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

source_set("run_all_unittests") {
  testonly = true
  sources = [
    "run_all_unittests.cc",
  ]

  deps = [
    ":test_support",
    ":test_support_impl",
    "//base",
    "//base/test:test_support",
    "//mojo/edk/system",
    "//mojo/public/c/test_support",
    "//testing/gtest",
  ]

  if (is_linux && !is_component_build) {
    public_configs = [ "//build/config/gcc:rpath_for_built_shared_libraries" ]
  }
}

source_set("run_all_perftests") {
  testonly = true
  deps = [
    ":test_support_impl",
    "//base",
    "//base/test:test_support",
    "//mojo/edk/system",
    "//mojo/edk/test:test_support",
    "//mojo/public/c/test_support",
  ]

  sources = [
    "run_all_perftests.cc",
  ]

  if (is_linux && !is_component_build) {
    public_configs = [ "//build/config/gcc:rpath_for_built_shared_libraries" ]
  }
}

static_library("test_support_impl") {
  testonly = true
  deps = [
    "//base",
    "//base/test:test_support",
    "//mojo/public/c/test_support",
    "//mojo/public/cpp/system",
  ]

  sources = [
    "test_support_impl.cc",
    "test_support_impl.h",
  ]
}

# Public SDK test targets follow. These targets are not defined within the
# public SDK itself as running the unittests requires the EDK.
# TODO(vtl): These don't really belong here. (They should be converted to
# apptests, but even apart from that these targets belong somewhere else.)

group("public_tests") {
  testonly = true
  deps = [
    ":mojo_public_bindings_unittests",
    ":mojo_public_system_perftests",
    ":mojo_public_system_unittests",
  ]
}

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

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

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

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