PreferencesSettingsTests.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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. Assert.True(File.Exists(PathToLocalPreferencesFile));
  27. }
  28. [Theory]
  29. [InlineData(-2)]
  30. [InlineData(false)]
  31. [InlineData("string")]
  32. [InlineData(null)]
  33. public void TestThatGetPreferenceOnNonExistingKeyReturnsFallbackValue<T>(T value)
  34. {
  35. T fallbackValue = value;
  36. T preferenceValue = PreferencesSettings.GetPreference<T>("NonExistingPreference", fallbackValue);
  37. Assert.Equal(fallbackValue, preferenceValue);
  38. }
  39. [Theory]
  40. [InlineData("IntPreference", 1)]
  41. [InlineData("BoolPreference", true)]
  42. public void TestThatUpdatePreferenceUpdatesDictionary<T>(string name, T value)
  43. {
  44. PreferencesSettings.UpdatePreference(name, value);
  45. Assert.Equal(value, PreferencesSettings.GetPreference<T>(name));
  46. }
  47. [Theory]
  48. [InlineData("LongPreference", 1L)]
  49. public void TestThatSaveUpdatesFile<T>(string name, T value)
  50. {
  51. PreferencesSettings.Preferences[name] = value;
  52. PreferencesSettings.Save();
  53. using (var fs = new FileStream(PathToPreferencesFile, FileMode.Open, FileAccess.Read, FileShare.Read))
  54. {
  55. using StreamReader sr = new StreamReader(fs);
  56. string json = sr.ReadToEnd();
  57. var dict = JsonConvert.DeserializeObject<Dictionary<string, object>>(json);
  58. Assert.True(dict.ContainsKey(name));
  59. Assert.Equal(value, dict[name]);
  60. }
  61. }
  62. [Theory]
  63. [InlineData(-2)]
  64. [InlineData(false)]
  65. [InlineData("string")]
  66. [InlineData(null)]
  67. public void TestThatGetPreferenceOnNonExistingKeyReturnsFallbackValueLocal<T>(T value)
  68. {
  69. T fallbackValue = value;
  70. T preferenceValue = PreferencesSettings.GetLocalPreference<T>("NonExistingPreference", fallbackValue);
  71. Assert.Equal(fallbackValue, preferenceValue);
  72. }
  73. [Theory]
  74. [InlineData("IntPreference", 1)]
  75. [InlineData("BoolPreference", true)]
  76. public void TestThatUpdatePreferenceUpdatesDictionaryLocal<T>(string name, T value)
  77. {
  78. PreferencesSettings.UpdateLocalPreference(name, value);
  79. Assert.Equal(value, PreferencesSettings.GetLocalPreference<T>(name));
  80. }
  81. [Theory]
  82. [InlineData("LongPreference", 1L)]
  83. public void TestThatSaveUpdatesFileLocal<T>(string name, T value)
  84. {
  85. PreferencesSettings.LocalPreferences[name] = value;
  86. PreferencesSettings.Save();
  87. using (var fs = new FileStream(PathToPreferencesFile, FileMode.Open, FileAccess.Read, FileShare.Read))
  88. {
  89. using StreamReader sr = new StreamReader(fs);
  90. string json = sr.ReadToEnd();
  91. var dict = JsonConvert.DeserializeObject<Dictionary<string, object>>(json);
  92. Assert.True(dict.ContainsKey(name));
  93. Assert.Equal(value, dict[name]);
  94. }
  95. }
  96. }
  97. }