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

# Utilties for use by EDK internal (unit and perf) tests.
mojo_edk_source_set("test") {
  testonly = true
  mojo_edk_visibility = [ "mojo/edk/*" ]

  sources = [
    "random.cc",
    "random.h",
    "scoped_test_dir.cc",
    "scoped_test_dir.h",
    "simple_test_thread.cc",
    "simple_test_thread.h",
    "test_command_line.cc",
    "test_command_line.h",
    "test_io_thread.cc",
    "test_io_thread.h",
    "timeouts.cc",
    "timeouts.h",
  ]

  mojo_sdk_public_deps = [
    "mojo/public/c/system",
    "mojo/public/cpp/system",
  ]

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

  mojo_edk_deps = [
    "mojo/edk/base_edk",
    "mojo/edk/util",
  ]
}

# Utilities for use by EDK internal perf tests (for use with
# :run_all_perftests).
mojo_edk_source_set("perf") {
  testonly = true
  mojo_edk_visibility = [ "mojo/edk/*" ]

  sources = [
    "perf_log.cc",
    "perf_log.h",
  ]

  deps = [
    "//base/test:test_support",
  ]
}

mojo_edk_source_set("run_all_unittests") {
  testonly = true
  mojo_edk_visibility = [ "mojo/edk/*" ]

  sources = [
    "run_all_unittests.cc",
  ]

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

mojo_edk_source_set("run_all_perftests") {
  testonly = true
  mojo_edk_visibility = [ "mojo/edk/*" ]

  sources = [
    "run_all_perftests.cc",
  ]

  deps = [
    ":test",
    "//base/test:test_support",
  ]
}

mojo_edk_unittests("mojo_edk_system_test_unittests") {
  sources = [
    "random_unittest.cc",
  ]

  deps = [
    ":test",
    "//testing/gtest",
  ]
}
