# 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("//third_party/protobuf/proto_library.gni")

component("dbus") {
  sources = [
    "bus.cc",
    "bus.h",
    "dbus_export.h",
    "dbus_statistics.cc",
    "dbus_statistics.h",
    "exported_object.cc",
    "exported_object.h",
    "file_descriptor.cc",
    "file_descriptor.h",
    "message.cc",
    "message.h",
    "object_manager.cc",
    "object_manager.h",
    "object_path.cc",
    "object_path.h",
    "object_proxy.cc",
    "object_proxy.h",
    "property.cc",
    "property.h",
    "scoped_dbus_error.h",
    "string_util.cc",
    "string_util.h",
    "values_util.cc",
    "values_util.h",
  ]

  defines = [
    "DBUS_IMPLEMENTATION",
  ]

  deps = [
    "//base",
    "//third_party/protobuf:protobuf_lite",
  ]

  direct_dependent_configs = [
    "//build/config/linux:dbus",
  ]
}

proto_library("test_proto") {
  sources = [ "test_proto.proto" ]
}

# This target contains mocks that can be used to write unit tests without
# issuing actual D-Bus calls.
source_set("test_support") {
  sources = [
    "mock_bus.cc",
    "mock_bus.h",
    "mock_exported_object.cc",
    "mock_exported_object.h",
    "mock_object_manager.cc",
    "mock_object_manager.h",
    "mock_object_proxy.cc",
    "mock_object_proxy.h",
  ]

  deps = [
    ":dbus",
    "//testing/gmock",
  ]

  configs += [
    "//build/config/linux:dbus",
  ]
}

test("dbus_unittests") {
  sources = [
    "bus_unittest.cc",
    "dbus_statistics_unittest.cc",
    "end_to_end_async_unittest.cc",
    "end_to_end_sync_unittest.cc",
    "message_unittest.cc",
    "mock_unittest.cc",
    "object_manager_unittest.cc",
    "object_proxy_unittest.cc",
    "property_unittest.cc",
    "run_all_unittests.cc",
    "signal_sender_verification_unittest.cc",
    "string_util_unittest.cc",
    "test_service.cc",
    "test_service.h",
    "values_util_unittest.cc",
  ]

  deps = [
    ":dbus",
    ":test_proto",
    ":test_support",
    "//base/test:test_support",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/protobuf:protobuf_lite",
  ]

  configs += [
    "//build/config/linux:dbus",
  ]
}

executable("dbus_test_server") {
  sources = [
    "test_server.cc",
    "test_service.cc",
    "test_service.h",
  ]

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

  configs += [
    "//build/config/linux:dbus",
  ]
}
