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

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

  deps = [
    "//base",
    "//base/test:test_support",
    "//testing/gtest",
  ]

  mojo_edk_deps = [ "mojo/edk/system" ]
}

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

  deps = [
    ":test_support_impl",
    "//base",
    "//base/test:test_support",
    "//testing/gtest",
  ]

  mojo_edk_deps = [ "mojo/edk/system" ]

  mojo_sdk_deps = [ "mojo/public/c/test_support" ]
}

mojo_edk_source_set("run_all_perftests") {
  testonly = true
  deps = [
    ":test_support_impl",
    "//base",
    "//base/test:test_support",
  ]

  mojo_edk_deps = [ "mojo/edk/system" ]

  mojo_sdk_deps = [ "mojo/public/c/test_support" ]

  sources = [
    "run_all_perftests.cc",
  ]
}

mojo_edk_source_set("test_support_impl") {
  testonly = true
  deps = [
    "//base",
    "//base/test:test_support",
  ]

  mojo_sdk_deps = [ "mojo/public/c/test_support" ]

  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_application_unittests",
    ":mojo_public_bindings_unittests",
    ":mojo_public_environment_unittests",
    ":mojo_public_system_perftests",
    ":mojo_public_system_unittests",
    ":mojo_public_utility_unittests",
  ]
}

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

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

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

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

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

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