# 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("dbus_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("dbus_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",
    ":dbus_test_proto",
    ":dbus_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",
  ]
}
