ColorJsonConverterTests.cs 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. using System.Text.Json;
  2. namespace ConfigurationTests;
  3. public class ColorJsonConverterTests
  4. {
  5. public static readonly JsonSerializerOptions JsonOptions = new ()
  6. {
  7. Converters = { new AttributeJsonConverter (), new ColorJsonConverter () }
  8. };
  9. [Theory]
  10. [InlineData ("\"#000000\"", 0, 0, 0)]
  11. public void DeserializesFromHexCode (string hexCode, int r, int g, int b)
  12. {
  13. // Arrange
  14. var expected = new Color (r, g, b);
  15. // Act
  16. var actual = JsonSerializer.Deserialize<Color> (
  17. hexCode,
  18. new JsonSerializerOptions { Converters = { new ColorJsonConverter () } }
  19. );
  20. //Assert
  21. Assert.Equal (expected, actual);
  22. }
  23. [Theory]
  24. [InlineData ("\"rgb(0,0,0)\"", 0, 0, 0)]
  25. public void DeserializesFromRgb (string rgb, int r, int g, int b)
  26. {
  27. // Arrange
  28. var expected = new Color (r, g, b);
  29. // Act
  30. var actual = JsonSerializer.Deserialize<Color> (
  31. rgb,
  32. new JsonSerializerOptions { Converters = { new ColorJsonConverter () } }
  33. );
  34. //Assert
  35. Assert.Equal (expected, actual);
  36. }
  37. [Theory]
  38. [InlineData (ColorName16.Black, "Black")]
  39. [InlineData (ColorName16.Blue, "Blue")]
  40. [InlineData (ColorName16.Green, "Green")]
  41. [InlineData (ColorName16.Cyan, "Aqua")] // W3C+ Standard overrides
  42. [InlineData (ColorName16.Gray, "Gray")]
  43. [InlineData (ColorName16.Red, "Red")]
  44. [InlineData (ColorName16.Magenta, "Fuchsia")] // W3C+ Standard overrides
  45. [InlineData (ColorName16.Yellow, "Yellow")]
  46. [InlineData (ColorName16.DarkGray, "BrightBlack")] // Legacy ColorName16.DarkGray now serializes as BrightBlack (first alphabetical match)
  47. [InlineData (ColorName16.BrightBlue, "BrightBlue")]
  48. [InlineData (ColorName16.BrightGreen, "BrightGreen")]
  49. [InlineData (ColorName16.BrightCyan, "BrightCyan")]
  50. [InlineData (ColorName16.BrightRed, "BrightRed")]
  51. [InlineData (ColorName16.BrightMagenta, "BrightMagenta")]
  52. [InlineData (ColorName16.BrightYellow, "BrightYellow")]
  53. [InlineData (ColorName16.White, "White")]
  54. public void SerializesColorName16ValuesAsStrings (ColorName16 colorName, string expectedJson)
  55. {
  56. var converter = new ColorJsonConverter ();
  57. var options = new JsonSerializerOptions { Converters = { converter } };
  58. string serialized = JsonSerializer.Serialize (new Color (colorName), options);
  59. Assert.Equal ($"\"{expectedJson}\"", serialized);
  60. }
  61. [Theory]
  62. [InlineData (1, 0, 0, "\"#010000\"")]
  63. [InlineData (0, 0, 1, "\"#000001\"")]
  64. public void SerializesToHexCode (int r, int g, int b, string expected)
  65. {
  66. // Arrange
  67. // Act
  68. string actual = JsonSerializer.Serialize (
  69. new Color (r, g, b),
  70. new JsonSerializerOptions { Converters = { new ColorJsonConverter () } }
  71. );
  72. //Assert
  73. Assert.Equal (expected, actual);
  74. }
  75. [Theory]
  76. [InlineData ("Black", Color.Black)]
  77. [InlineData ("Blue", Color.Blue)]
  78. [InlineData ("BrightBlue", Color.BrightBlue)]
  79. [InlineData ("BrightCyan", Color.BrightCyan)]
  80. [InlineData ("BrightGreen", Color.BrightGreen)]
  81. [InlineData ("BrightMagenta", Color.BrightMagenta)]
  82. [InlineData ("BrightRed", Color.BrightRed)]
  83. [InlineData ("BrightYellow", Color.BrightYellow)]
  84. [InlineData ("Yellow", Color.Yellow)]
  85. [InlineData ("Cyan", Color.Cyan)]
  86. [InlineData ("BrightBlack", Color.DarkGray)] // Legacy ColorName16.DarkGray is now accessible as BrightBlack
  87. [InlineData ("Gray", Color.Gray)]
  88. [InlineData ("Green", Color.Green)]
  89. [InlineData ("Magenta", Color.Magenta)]
  90. [InlineData ("Red", Color.Red)]
  91. [InlineData ("White", Color.White)]
  92. public void TestColorDeserializationFromHumanReadableColorName16 (string colorName, ColorName16 expectedColor)
  93. {
  94. // Arrange
  95. var json = $"\"{colorName}\"";
  96. // Act
  97. var actualColor = JsonSerializer.Deserialize<Color> (json, JsonOptions);
  98. // Assert
  99. Assert.Equal (new (expectedColor), actualColor);
  100. }
  101. [Fact]
  102. public void TestDeserializeColor_Black ()
  103. {
  104. // Arrange
  105. var json = "\"Black\"";
  106. var expectedColor = new Color ("Black");
  107. // Act
  108. var color = JsonSerializer.Deserialize<Color> (
  109. json,
  110. new JsonSerializerOptions { Converters = { new ColorJsonConverter () } }
  111. );
  112. // Assert
  113. Assert.Equal (expectedColor, color);
  114. }
  115. [Fact]
  116. public void TestDeserializeColor_BrightRed ()
  117. {
  118. // Arrange
  119. var json = "\"BrightRed\"";
  120. var expectedColor = Color.BrightRed;
  121. // Act
  122. var color = JsonSerializer.Deserialize<Color> (
  123. json,
  124. new JsonSerializerOptions { Converters = { new ColorJsonConverter () } }
  125. );
  126. // Assert
  127. Assert.Equal (expectedColor, color);
  128. }
  129. [Fact]
  130. public void TestSerializeColor_Black ()
  131. {
  132. // Arrange
  133. var expectedJson = "\"Black\"";
  134. // Act
  135. string json = JsonSerializer.Serialize (
  136. new Color (Color.Black),
  137. new JsonSerializerOptions { Converters = { new ColorJsonConverter () } }
  138. );
  139. // Assert
  140. Assert.Equal (expectedJson, json);
  141. }
  142. [Fact]
  143. public void TestSerializeColor_BrightRed ()
  144. {
  145. // Arrange
  146. var expectedJson = "\"BrightRed\"";
  147. // Act
  148. string json = JsonSerializer.Serialize (
  149. new Color (Color.BrightRed),
  150. new JsonSerializerOptions { Converters = { new ColorJsonConverter () } }
  151. );
  152. // Assert
  153. Assert.Equal (expectedJson, json);
  154. }
  155. }