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

component("prefs") {
  sources = [
    "command_line_pref_store.cc",
    "command_line_pref_store.h",
    "default_pref_store.cc",
    "default_pref_store.h",
    "in_memory_pref_store.cc",
    "in_memory_pref_store.h",
    "json_pref_store.cc",
    "json_pref_store.h",
    "overlay_user_pref_store.cc",
    "overlay_user_pref_store.h",
    "persistent_pref_store.cc",
    "persistent_pref_store.h",
    "pref_change_registrar.cc",
    "pref_change_registrar.h",
    "pref_filter.h",
    "pref_member.cc",
    "pref_member.h",
    "pref_notifier.h",
    "pref_notifier_impl.cc",
    "pref_notifier_impl.h",
    "pref_observer.h",
    "pref_registry.cc",
    "pref_registry.h",
    "pref_registry_simple.cc",
    "pref_registry_simple.h",
    "pref_service.cc",
    "pref_service.h",
    "pref_service_factory.cc",
    "pref_service_factory.h",
    "pref_store.cc",
    "pref_store.h",
    "pref_value_map.cc",
    "pref_value_map.h",
    "pref_value_store.cc",
    "pref_value_store.h",
    "prefs_export.h",
    "scoped_user_pref_update.cc",
    "scoped_user_pref_update.h",
    "value_map_pref_store.cc",
    "value_map_pref_store.h",
    "writeable_pref_store.cc",
    "writeable_pref_store.h",
  ]

  defines = [ "COMPONENTS_PREFS_IMPLEMENTATION" ]

  deps = [
    "//base",
  ]
}

static_library("test_support") {
  testonly = true
  sources = [
    "mock_pref_change_callback.cc",
    "mock_pref_change_callback.h",
    "pref_store_observer_mock.cc",
    "pref_store_observer_mock.h",
    "testing_pref_service.cc",
    "testing_pref_service.h",
    "testing_pref_store.cc",
    "testing_pref_store.h",
  ]

  public_deps = [
    ":prefs",
  ]
  deps = [
    "//base",
    "//testing/gmock",
    "//testing/gtest",
  ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "default_pref_store_unittest.cc",
    "in_memory_pref_store_unittest.cc",
    "json_pref_store_unittest.cc",
    "overlay_user_pref_store_unittest.cc",
    "persistent_pref_store_unittest.cc",
    "persistent_pref_store_unittest.h",
    "pref_change_registrar_unittest.cc",
    "pref_member_unittest.cc",
    "pref_notifier_impl_unittest.cc",
    "pref_service_unittest.cc",
    "pref_value_map_unittest.cc",
    "pref_value_store_unittest.cc",
    "scoped_user_pref_update_unittest.cc",
  ]

  deps = [
    ":test_support",
    "//base",
    "//base/test:test_support",
    "//testing/gmock",
    "//testing/gtest",
  ]
}
