PreferencesSettingsTests.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. using System.Collections.Generic;
  2. using System.IO;
  3. using Newtonsoft.Json;
  4. using PixiEditor.Models.UserPreferences;
  5. using Xunit;
  6. namespace PixiEditorTests.ModelsTests.UserPreferencesTests
  7. {
  8. public class PreferencesSettingsTests
  9. {
  10. public static string PathToPreferencesFile { get; } = Path.Join("PixiEditor", "test_preferences.json");
  11. public static string PathToLocalPreferencesFile { get; } = Path.Join("PixiEditor", "local_test_preferences.json");
  12. public static readonly PreferencesSettings PreferencesSettings = new PreferencesSettings();
  13. public PreferencesSettingsTests()
  14. {
  15. PreferencesSettings.Init(PathToPreferencesFile, PathToLocalPreferencesFile);
  16. }
  17. [Fact]
  18. public void TestThatPreferencesSettingsIsLoaded()
  19. {
  20. Assert.True(PreferencesSettings.IsLoaded);
  21. }
  22. [Fact]
  23. public void TestThatInitCreatesUserPreferencesJson()
  24. {
  25. Assert.True(File.Exists(PathToPreferencesFile));
  26. }
  27. [Theory]
  28. [InlineData(-2)]
  29. [InlineData(false)]
  30. [InlineData("string")]
  31. [InlineData(null)]
  32. public void TestThatGetPreferenceOnNonExistingKeyReturnsFallbackValue<T>(T value)
  33. {
  34. T fallbackValue = value;
  35. T preferenceValue = PreferencesSettings.GetPreference<T>("NonExistingPreference", fallbackValue);
  36. Assert.Equal(fallbackValue, preferenceValue);
  37. }
  38. [Theory]
  39. [InlineData("IntPreference", 1)]
  40. [InlineData("BoolPreference", true)]
  41. public void TestThatUpdatePreferenceUpdatesDictionary<T>(string name, T value)
  42. {
  43. PreferencesSettings.UpdatePreference(name, value);
  44. Assert.Equal(value, PreferencesSettings.GetPreference<T>(name));
  45. }
  46. [Theory]
  47. [InlineData("LongPreference", 1L)]
  48. public void TestThatSaveUpdatesFile<T>(string name, T value)
  49. {
  50. PreferencesSettings.Preferences[name] = value;
  51. PreferencesSettings.Save();
  52. using (var fs = new FileStream(PathToPreferencesFile, FileMode.Open, FileAccess.Read, FileShare.Read))
  53. {
  54. using StreamReader sr = new StreamReader(fs);
  55. string json = sr.ReadToEnd();
  56. var dict = JsonConvert.DeserializeObject<Dictionary<string, object>>(json);
  57. Assert.True(dict.ContainsKey(name));
  58. Assert.Equal(value, dict[name]);
  59. }
  60. }
  61. [Theory]
  62. [InlineData(-2)]
  63. [InlineData(false)]
  64. [InlineData("string")]
  65. [InlineData(null)]
  66. public void TestThatGetPreferenceOnNonExistingKeyReturnsFallbackValueLocal<T>(T value)
  67. {
  68. T fallbackValue = value;
  69. T preferenceValue = PreferencesSettings.GetLocalPreference<T>("NonExistingPreference", fallbackValue);
  70. Assert.Equal(fallbackValue, preferenceValue);
  71. }
  72. [Theory]
  73. [InlineData("IntPreference", 1)]
  74. [InlineData("BoolPreference", true)]
  75. public void TestThatUpdatePreferenceUpdatesDictionaryLocal<T>(string name, T value)
  76. {
  77. PreferencesSettings.UpdateLocalPreference(name, value);
  78. Assert.Equal(value, PreferencesSettings.GetLocalPreference<T>(name));
  79. }
  80. [Theory]
  81. [InlineData("LongPreference", 1L)]
  82. public void TestThatSaveUpdatesFileLocal<T>(string name, T value)
  83. {
  84. PreferencesSettings.LocalPreferences[name] = value;
  85. PreferencesSettings.Save();
  86. using (var fs = new FileStream(PathToPreferencesFile, FileMode.Open, FileAccess.Read, FileShare.Read))
  87. {
  88. using StreamReader sr = new StreamReader(fs);
  89. string json = sr.ReadToEnd();
  90. var dict = JsonConvert.DeserializeObject<Dictionary<string, object>>(json);
  91. Assert.True(dict.ContainsKey(name));
  92. Assert.Equal(value, dict[name]);
  93. }
  94. }
  95. }
  96. }