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

# "Completes" the implementation of //mojo/edk/platform (i.e., implements those
# things that //mojo/edk/platform declares but doesn't define), using //base.
mojo_edk_source_set("base_edk") {
  sources = [
    "io_thread.cc",
    "platform_handle_watcher_impl.cc",
    "platform_handle_watcher_impl.h",
    "platform_message_loop_for_io_impl.cc",
    "platform_message_loop_for_io_impl.h",
    "platform_message_loop_impl.cc",
    "platform_message_loop_impl.h",
    "platform_pipe.cc",
    "platform_pipe_utils_posix.cc",
    "platform_task_runner_impl.cc",
    "platform_task_runner_impl.h",
    "random.cc",
    "simple_platform_shared_buffer.cc",
    "thread_utils.cc",
    "time_ticks.cc",
  ]

  deps = [
    "//base",
  ]

  if (is_android) {
    deps += [ "//third_party/ashmem" ]
  }

  mojo_edk_public_deps = [ "mojo/edk/platform" ]
}

# "Completes" the implementation of //mojo/edk/platform:test_platform.
mojo_edk_source_set("test_base_edk") {
  testonly = true

  sources = [
    "test_message_loops.cc",
  ]

  deps = [
    ":base_edk",
  ]

  mojo_edk_public_deps = [
    "mojo/edk/platform",
    "mojo/edk/platform:test_platform",
  ]
}

# Direct tests of parts of :base_edk. Note that other parts are tested using the
# combination of //mojo/edk/platform:unittests and
# //mojo/edk/platform:mojo_edk_platform_unittests.
mojo_edk_unittests("mojo_edk_base_edk_unittests") {
  sources = [
    "platform_message_loop_for_io_impl_unittest.cc",
    "platform_message_loop_impl_unittest.cc",
  ]

  deps = [
    ":base_edk",
    ":test_base_edk",
    "//base",
    "//testing/gtest",
  ]

  mojo_edk_deps = [
    "mojo/edk/platform",
    "mojo/edk/platform:test_platform",
    "mojo/edk/util",
  ]
}

# Tests //mojo/edk/platform and //mojo/edk/platform:test_platform using the
# implementation of :platform provided by :base_edk and :test_base_edk.
mojo_edk_unittests("mojo_edk_platform_unittests") {
  deps = [
    ":base_edk",
    ":test_base_edk",
  ]

  mojo_edk_deps = [ "mojo/edk/platform:unittests" ]
}
