ColorJsonConverterTests.cs 6.2 KB

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