MockSharedPreferences.kt 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /*
  2. * Nextcloud - Android Client
  3. *
  4. * SPDX-FileCopyrightText: 2020 Chris Narkiewicz <hello@ezaquarii.com>
  5. * SPDX-License-Identifier: AGPL-3.0-or-later
  6. */
  7. package com.nextcloud.client.migrations
  8. import android.content.SharedPreferences
  9. import java.util.TreeMap
  10. /**
  11. * This shared preferences implementation uses in-memory value store
  12. * and it can be used in tests without using global, file-backed storage,
  13. * improving test isolation.
  14. *
  15. * The implementation is not thread-safe.
  16. */
  17. @Suppress("TooManyFunctions")
  18. class MockSharedPreferences : SharedPreferences {
  19. class MockEditor(val store: MutableMap<String?, Any?>) : SharedPreferences.Editor {
  20. val editorStore: MutableMap<String?, Any?> = TreeMap()
  21. override fun clear(): SharedPreferences.Editor = throw UnsupportedOperationException()
  22. override fun putLong(key: String?, value: Long): SharedPreferences.Editor =
  23. throw UnsupportedOperationException("Implement as needed")
  24. override fun putInt(key: String?, value: Int): SharedPreferences.Editor {
  25. editorStore.put(key, value)
  26. return this
  27. }
  28. override fun remove(key: String?): SharedPreferences.Editor = throw UnsupportedOperationException()
  29. override fun putBoolean(key: String?, value: Boolean): SharedPreferences.Editor {
  30. editorStore.put(key, value)
  31. return this
  32. }
  33. override fun putStringSet(key: String?, values: MutableSet<String>?): SharedPreferences.Editor {
  34. editorStore.put(key, values?.toMutableSet())
  35. return this
  36. }
  37. override fun commit(): Boolean = true
  38. override fun putFloat(key: String?, value: Float): SharedPreferences.Editor =
  39. throw UnsupportedOperationException("Implement as needed")
  40. override fun apply() = store.putAll(editorStore)
  41. override fun putString(key: String?, value: String?): SharedPreferences.Editor {
  42. editorStore.put(key, value)
  43. return this
  44. }
  45. }
  46. val store: MutableMap<String?, Any?> = TreeMap()
  47. override fun contains(key: String?): Boolean = store.containsKey(key)
  48. override fun getBoolean(key: String?, defValue: Boolean): Boolean = store.getOrDefault(key, defValue) as Boolean
  49. override fun unregisterOnSharedPreferenceChangeListener(
  50. listener: SharedPreferences.OnSharedPreferenceChangeListener?
  51. ) = throw UnsupportedOperationException()
  52. override fun getInt(key: String?, defValue: Int): Int = store.getOrDefault(key, defValue) as Int
  53. override fun getAll(): MutableMap<String?, Any?> {
  54. return HashMap(store)
  55. }
  56. override fun edit(): SharedPreferences.Editor {
  57. return MockEditor(store)
  58. }
  59. override fun getLong(key: String?, defValue: Long): Long {
  60. throw UnsupportedOperationException()
  61. }
  62. override fun getFloat(key: String?, defValue: Float): Float {
  63. throw UnsupportedOperationException()
  64. }
  65. override fun getStringSet(key: String?, defValues: MutableSet<String>?): MutableSet<String>? {
  66. return store.getOrDefault(key, defValues) as MutableSet<String>?
  67. }
  68. override fun registerOnSharedPreferenceChangeListener(
  69. listener: SharedPreferences.OnSharedPreferenceChangeListener?
  70. ) = throw UnsupportedOperationException()
  71. override fun getString(key: String?, defValue: String?): String? = store.getOrDefault(key, defValue) as String?
  72. }