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

if (is_android) {
  import("//build/config/android/config.gni")
  import("//build/config/android/rules.gni")
}

config("system_config") {
  defines = [
    # Ensures that dependent projects import the core functions on Windows.
    "MOJO_USE_SYSTEM_IMPL",
  ]
}

component("system") {
  output_name = "mojo_system_impl"

  sources = [
    "async_waiter.cc",
    "async_waiter.h",
    "awakable.h",
    "awakable_list.cc",
    "awakable_list.h",
    "channel.cc",
    "channel.h",
    "channel_endpoint.cc",
    "channel_endpoint.h",
    "channel_endpoint_client.h",
    "channel_endpoint_id.cc",
    "channel_endpoint_id.h",
    "channel_id.h",
    "channel_manager.cc",
    "channel_manager.h",
    "configuration.cc",
    "configuration.h",
    "connection_identifier.h",
    "connection_manager.cc",
    "connection_manager.h",
    "core.cc",
    "core.h",
    "data_pipe.cc",
    "data_pipe.h",
    "data_pipe_consumer_dispatcher.cc",
    "data_pipe_consumer_dispatcher.h",
    "data_pipe_impl.cc",
    "data_pipe_impl.h",
    "data_pipe_producer_dispatcher.cc",
    "data_pipe_producer_dispatcher.h",
    "dispatcher.cc",
    "dispatcher.h",
    "endpoint_relayer.cc",
    "endpoint_relayer.h",
    "handle_signals_state.h",
    "handle_table.cc",
    "handle_table.h",
    "incoming_endpoint.cc",
    "incoming_endpoint.h",
    "ipc_support.cc",
    "ipc_support.h",
    "local_data_pipe_impl.cc",
    "local_data_pipe_impl.h",
    "local_message_pipe_endpoint.cc",
    "local_message_pipe_endpoint.h",
    "mapping_table.cc",
    "mapping_table.h",
    "master_connection_manager.cc",
    "master_connection_manager.h",
    "memory.cc",
    "memory.h",
    "message_in_transit.cc",
    "message_in_transit.h",
    "message_in_transit_queue.cc",
    "message_in_transit_queue.h",
    "message_pipe.cc",
    "message_pipe.h",
    "message_pipe_dispatcher.cc",
    "message_pipe_dispatcher.h",
    "message_pipe_endpoint.cc",
    "message_pipe_endpoint.h",
    "mutex.cc",
    "mutex.h",
    "options_validation.h",
    "platform_handle_dispatcher.cc",
    "platform_handle_dispatcher.h",
    "process_identifier.h",
    "proxy_message_pipe_endpoint.cc",
    "proxy_message_pipe_endpoint.h",
    "raw_channel.cc",
    "raw_channel.h",
    "raw_channel_posix.cc",
    "raw_channel_win.cc",
    "remote_consumer_data_pipe_impl.cc",
    "remote_consumer_data_pipe_impl.h",
    "remote_data_pipe_ack.h",
    "remote_producer_data_pipe_impl.cc",
    "remote_producer_data_pipe_impl.h",
    "shared_buffer_dispatcher.cc",
    "shared_buffer_dispatcher.h",
    "simple_dispatcher.cc",
    "simple_dispatcher.h",
    "slave_connection_manager.cc",
    "slave_connection_manager.h",
    "thread_annotations.h",
    "transport_data.cc",
    "transport_data.h",
    "unique_identifier.cc",
    "unique_identifier.h",
    "waiter.cc",
    "waiter.h",
  ]

  defines = [
    "MOJO_SYSTEM_IMPL_IMPLEMENTATION",
    "MOJO_SYSTEM_IMPLEMENTATION",
  ]

  all_dependent_configs = [ ":system_config" ]

  public_deps = [
    "../embedder",
    "../embedder:delegates",
    "../embedder:platform",
    "../../public/c/system",
    "../../public/cpp/system",
  ]

  deps = [
    "//base",
    "//base/third_party/dynamic_annotations",
  ]

  allow_circular_includes_from = [ "../embedder" ]
}

group("tests") {
  testonly = true
  deps = [
    ":mojo_system_unittests",
    ":mojo_message_pipe_perftests",
  ]
}

mojo_edk_source_set("test_utils") {
  testonly = true

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

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

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

test("mojo_system_unittests") {
  sources = [
    "../test/multiprocess_test_helper_unittest.cc",
    "awakable_list_unittest.cc",
    "channel_endpoint_id_unittest.cc",
    "channel_endpoint_unittest.cc",
    "channel_manager_unittest.cc",
    "channel_test_base.cc",
    "channel_test_base.h",
    "channel_unittest.cc",
    "connection_manager_unittest.cc",
    "core_test_base.cc",
    "core_test_base.h",
    "core_unittest.cc",
    "data_pipe_impl_unittest.cc",
    "data_pipe_unittest.cc",
    "dispatcher_unittest.cc",
    "endpoint_relayer_unittest.cc",
    "ipc_support_unittest.cc",
    "memory_unittest.cc",
    "message_in_transit_queue_unittest.cc",
    "message_in_transit_test_utils.cc",
    "message_in_transit_test_utils.h",
    "message_pipe_dispatcher_unittest.cc",
    "message_pipe_test_utils.cc",
    "message_pipe_test_utils.h",
    "message_pipe_unittest.cc",
    "multiprocess_message_pipe_unittest.cc",
    "mutex_unittest.cc",
    "options_validation_unittest.cc",
    "platform_handle_dispatcher_unittest.cc",
    "raw_channel_unittest.cc",
    "remote_data_pipe_impl_unittest.cc",
    "remote_message_pipe_unittest.cc",
    "run_all_unittests.cc",
    "shared_buffer_dispatcher_unittest.cc",
    "simple_dispatcher_unittest.cc",
    "test_channel_endpoint_client.cc",
    "test_channel_endpoint_client.h",
    "thread_annotations_unittest.cc",
    "unique_identifier_unittest.cc",
    "waiter_test_utils.cc",
    "waiter_test_utils.h",
    "waiter_unittest.cc",
  ]

  deps = [
    ":system",
    ":test_utils",
    "../embedder:embedder_unittests",
    "../test:test_support",
    "//base",
    "//base/test:test_support",
    "//testing/gtest",
  ]

  allow_circular_includes_from = [ "../embedder:embedder_unittests" ]
}

test("mojo_message_pipe_perftests") {
  sources = [
    "message_pipe_perftest.cc",
    "message_pipe_test_utils.cc",
    "message_pipe_test_utils.h",
  ]

  deps = [
    ":system",
    ":test_utils",
    "../test:test_support",
    "//base",
    "//base/test:test_support",
    "//base/test:test_support_perf",
    "//testing/gtest",
  ]
}
