# Copyright 2019 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.

component("mpris") {
  sources = [
    "mpris_service.cc",
    "mpris_service.h",
    "mpris_service_impl.cc",
    "mpris_service_impl.h",
    "mpris_service_observer.h",
  ]

  defines = [ "IS_MPRIS_IMPL" ]

  deps = [
    "//base",
    "//components/dbus:dbus_thread_linux",
    "//dbus",
  ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "mpris_service_impl_unittest.cc",
  ]
  deps = [
    ":mpris",
    "//base",
    "//base/test:test_support",
    "//components/dbus:dbus_thread_linux",
    "//dbus",
    "//dbus:test_support",
    "//testing/gmock",
    "//testing/gtest",
  ]
}

static_library("test_support") {
  testonly = true

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

  deps = [
    ":mpris",
    "//base",
    "//testing/gmock",
  ]
}
