ConfigTest.cs 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. namespace MeloongCore.Tests;
  2. public class ConfigTest : TestWithFolder {
  3. #region JsonConfigProvider
  4. [Test]
  5. public async Task JsonConfigProvider_字符串列表() {
  6. string configFile = Path.Combine(tempFolder, "config.json");
  7. var entry = new ConfigEntry<List<string>>("list", [], new JsonConfigProvider(configFile));
  8. entry.Set(["Alpha", "中文", "123"]);
  9. var reloadedEntry = new ConfigEntry<List<string>>("list", [], new JsonConfigProvider(configFile));
  10. var reloadedValue = reloadedEntry.Get();
  11. await Assert.That(reloadedValue is not null).IsTrue();
  12. await Assert.That(string.Join("|", reloadedValue!)).IsEqualTo("Alpha|中文|123");
  13. await Assert.That(FileUtils.ReadAsString(configFile)).Contains("\"list\": [");
  14. }
  15. [Test]
  16. public async Task JsonConfigProvider_自定义类列表() {
  17. string configFile = Path.Combine(tempFolder, "config.json");
  18. var entry = new ConfigEntry<List<TestConfigItem>>("items", [], new JsonConfigProvider(configFile));
  19. entry.Set([
  20. new() { Name = "Fabric", Count = 2, Enabled = true },
  21. new() { Name = "Forge 中文", Count = 5, Enabled = false }
  22. ]);
  23. var reloadedEntry = new ConfigEntry<List<TestConfigItem>>("items", [], new JsonConfigProvider(configFile));
  24. var reloadedValue = reloadedEntry.Get();
  25. await Assert.That(reloadedValue is not null).IsTrue();
  26. await Assert.That(string.Join("|", reloadedValue!.Select(i => $"{i.Name}:{i.Count}:{i.Enabled}"))).IsEqualTo("Fabric:2:True|Forge 中文:5:False");
  27. string json = FileUtils.ReadAsString(configFile);
  28. await Assert.That(json).Contains("\"items\": [");
  29. await Assert.That(json).Contains("\"Name\": \"Fabric\"");
  30. await Assert.That(json).Contains("\"Count\": 2");
  31. await Assert.That(json).Contains("\"Enabled\": true");
  32. await Assert.That(json).Contains("\"Name\": \"Forge 中文\"");
  33. await Assert.That(json).Contains("\"Enabled\": false");
  34. }
  35. [Test]
  36. public async Task ConfigEntry_SetNull_RoundTripsThroughJson() {
  37. string configFile = Path.Combine(tempFolder, "config.json");
  38. var entry = new ConfigEntry<string>("nullable", "fallback", new JsonConfigProvider(configFile));
  39. entry.Set(null);
  40. var reloadedEntry = new ConfigEntry<string>("nullable", "fallback", new JsonConfigProvider(configFile));
  41. await Assert.That(reloadedEntry.HasValue()).IsTrue();
  42. await Assert.That(reloadedEntry.Get() is null).IsTrue();
  43. await Assert.That(FileUtils.ReadAsString(configFile)).Contains("\"nullable\": null");
  44. }
  45. [Test]
  46. public async Task ConfigEntry_SetString_RoundTripsThroughJson() {
  47. string configFile = Path.Combine(tempFolder, "config.json");
  48. var entry = new ConfigEntry<string>("text", "fallback", new JsonConfigProvider(configFile));
  49. entry.Set("plain text 中文");
  50. var reloadedEntry = new ConfigEntry<string>("text", "fallback", new JsonConfigProvider(configFile));
  51. await Assert.That(reloadedEntry.Get()).IsEqualTo("plain text 中文");
  52. await Assert.That(FileUtils.ReadAsString(configFile)).Contains("\"text\": \"plain text 中文\"");
  53. }
  54. public class TestConfigItem {
  55. public string Name { get; set; } = "";
  56. public int Count { get; set; }
  57. public bool Enabled { get; set; }
  58. }
  59. #endregion
  60. }