# 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("//build/config/features.gni")
import("//testing/test.gni")
import("//third_party/protobuf/proto_library.gni")

assert(use_dbus)

component("dbus") {
  sources = [
    "bus.cc",
    "bus.h",
    "dbus_export.h",
    "dbus_statistics.cc",
    "dbus_statistics.h",
    "exported_object.cc",
    "exported_object.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.cc",
    "scoped_dbus_error.h",
    "string_util.cc",
    "string_util.h",
    "util.cc",
    "util.h",
    "values_util.cc",
    "values_util.h",
  ]

  defines = [ "DBUS_IMPLEMENTATION" ]

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

  public_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.
static_library("test_support") {
  testonly = true
  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",
  ]

  public_deps = [
    ":dbus",
  ]
  deps = [
    "//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",
    "signal_sender_verification_unittest.cc",
    "string_util_unittest.cc",
    "test_service.cc",
    "test_service.h",
    "util_unittest.cc",
    "values_util_unittest.cc",
  ]

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

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

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

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

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