ColorTests.cs 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  1. using Terminal.Gui;
  2. using System;
  3. using System.Buffers;
  4. using System.Collections.Generic;
  5. using System.ComponentModel;
  6. using System.Data;
  7. using System.Globalization;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Text.Json;
  11. using Xunit;
  12. using static Unix.Terminal.Curses;
  13. namespace Terminal.Gui.DrawingTests;
  14. public class ColorTests {
  15. [Fact]
  16. public void ColorNames_Has16Elements ()
  17. {
  18. Assert.Equal (16, Enum.GetValues (typeof (ColorNames)).Length);
  19. }
  20. [Fact]
  21. public void ColorNames_HaveCorrectOrdinals ()
  22. {
  23. Assert.Equal (0, (int)ColorNames.Black);
  24. Assert.Equal (1, (int)ColorNames.Blue);
  25. Assert.Equal (2, (int)ColorNames.Green);
  26. Assert.Equal (3, (int)ColorNames.Cyan);
  27. Assert.Equal (4, (int)ColorNames.Red);
  28. Assert.Equal (5, (int)ColorNames.Magenta);
  29. Assert.Equal (6, (int)ColorNames.Brown);
  30. Assert.Equal (7, (int)ColorNames.Gray);
  31. Assert.Equal (8, (int)ColorNames.DarkGray);
  32. Assert.Equal (9, (int)ColorNames.BrightBlue);
  33. Assert.Equal (10, (int)ColorNames.BrightGreen);
  34. Assert.Equal (11, (int)ColorNames.BrightCyan);
  35. Assert.Equal (12, (int)ColorNames.BrightRed);
  36. Assert.Equal (13, (int)ColorNames.BrightMagenta);
  37. Assert.Equal (14, (int)ColorNames.BrightYellow);
  38. Assert.Equal (15, (int)ColorNames.White);
  39. }
  40. [Fact]
  41. public void Color_Constructor_WithRGBValues ()
  42. {
  43. // Arrange
  44. int expectedR = 255;
  45. int expectedG = 0;
  46. int expectedB = 128;
  47. // Act
  48. var color = new Color (expectedR, expectedG, expectedB);
  49. // Assert
  50. Assert.Equal (expectedR, color.R);
  51. Assert.Equal (expectedG, color.G);
  52. Assert.Equal (expectedB, color.B);
  53. Assert.Equal (0xFF, color.A); // Alpha should be FF by default
  54. }
  55. [Fact]
  56. public void Color_Constructor_WithAlphaAndRGBValues ()
  57. {
  58. // Arrange
  59. int expectedA = 128;
  60. int expectedR = 255;
  61. int expectedG = 0;
  62. int expectedB = 128;
  63. // Act
  64. var color = new Color (expectedA, expectedR, expectedG, expectedB);
  65. // Assert
  66. Assert.Equal (expectedA, color.A);
  67. Assert.Equal (expectedR, color.R);
  68. Assert.Equal (expectedG, color.G);
  69. Assert.Equal (expectedB, color.B);
  70. }
  71. [Fact]
  72. public void Color_Constructor_WithArgbValue ()
  73. {
  74. // Arrange
  75. int expectedArgb = unchecked((int)0xFF804040); // Alpha: 255, R: 128, G: 64, B: 64
  76. // Act
  77. var color = new Color (expectedArgb);
  78. // Assert
  79. Assert.Equal (255, color.A);
  80. Assert.Equal (128, color.R);
  81. Assert.Equal (64, color.G);
  82. Assert.Equal (64, color.B);
  83. }
  84. [Fact]
  85. public void Color_Constructor_WithColorName ()
  86. {
  87. // Arrange
  88. ColorNames colorName = ColorNames.Blue;
  89. var expectedColor = new Color (0, 55, 218); // Blue
  90. // Act
  91. var color = new Color (colorName);
  92. // Assert
  93. Assert.Equal (expectedColor, color);
  94. }
  95. [Fact]
  96. public void Color_ToString_WithNamedColor ()
  97. {
  98. // Arrange
  99. Color color = new Color (0, 55, 218); // Blue
  100. // Act
  101. string colorString = color.ToString ();
  102. // Assert
  103. Assert.Equal ("Blue", colorString);
  104. }
  105. [Fact]
  106. public void Color_ToString_WithRGBColor ()
  107. {
  108. // Arrange
  109. Color color = new Color (1, 64, 32); // Custom RGB color
  110. // Act
  111. string colorString = color.ToString ();
  112. // Assert
  113. Assert.Equal ("#014020", colorString);
  114. }
  115. [Fact]
  116. public void Color_ImplicitOperator_FromInt ()
  117. {
  118. // Arrange
  119. int argb = unchecked((int)0xFF804020); // Alpha: 255, R: 128, G: 64, B: 32
  120. var expectedColor = new Color (255, 128, 64, 32);
  121. // Act
  122. Color color = argb;
  123. // Assert
  124. Assert.Equal (expectedColor, color);
  125. }
  126. [Fact]
  127. public void Color_ExplicitOperator_ToInt ()
  128. {
  129. // Arrange
  130. var color = new Color (255, 128, 64, 32);
  131. int expectedArgb = unchecked((int)0xFF804020); // Alpha: 255, R: 128, G: 64, B: 32
  132. // Act
  133. int argb = (int)color;
  134. // Assert
  135. Assert.Equal (expectedArgb, argb);
  136. }
  137. [Fact]
  138. public void Color_ImplicitOperator_FromColorNames ()
  139. {
  140. // Arrange
  141. ColorNames colorName = ColorNames.Blue;
  142. var expectedColor = new Color (0, 55, 218); // Blue
  143. // Act
  144. Color color = (Color)colorName;
  145. // Assert
  146. Assert.Equal (expectedColor, color);
  147. }
  148. [Fact]
  149. public void Color_ExplicitOperator_ToColorNames ()
  150. {
  151. // Arrange
  152. var color = new Color (0, 0, 0x80); // Blue
  153. ColorNames expectedColorName = ColorNames.Blue;
  154. // Act
  155. ColorNames colorName = (ColorNames)color;
  156. // Assert
  157. Assert.Equal (expectedColorName, colorName);
  158. }
  159. [Fact]
  160. public void Color_EqualityOperator_WithColorAndColor ()
  161. {
  162. // Arrange
  163. var color1 = new Color (255, 128, 64, 32);
  164. var color2 = new Color (255, 128, 64, 32);
  165. // Act & Assert
  166. Assert.True (color1 == color2);
  167. Assert.False (color1 != color2);
  168. }
  169. [Fact]
  170. public void Color_InequalityOperator_WithColorAndColor ()
  171. {
  172. // Arrange
  173. var color1 = new Color (255, 128, 64, 32);
  174. var color2 = new Color (128, 64, 32, 16);
  175. // Act & Assert
  176. Assert.False (color1 == color2);
  177. Assert.True (color1 != color2);
  178. }
  179. [Fact]
  180. public void Color_EqualityOperator_WithColorNamesAndColor ()
  181. {
  182. // Arrange
  183. var color1 = new Color (ColorNames.Red);
  184. var color2 = new Color (197, 15, 31); // Red in RGB
  185. // Act & Assert
  186. Assert.True (ColorNames.Red == color1);
  187. Assert.False (ColorNames.Red != color1);
  188. Assert.True (color1 == ColorNames.Red);
  189. Assert.False (color1 != ColorNames.Red);
  190. Assert.True (color2 == ColorNames.Red);
  191. Assert.False (color2 != ColorNames.Red);
  192. }
  193. [Fact]
  194. public void Color_InequalityOperator_WithColorNamesAndColor ()
  195. {
  196. // Arrange
  197. var color1 = new Color (ColorNames.Red);
  198. var color2 = new Color (58, 150, 221); // Cyan in RGB
  199. // Act & Assert
  200. Assert.False (ColorNames.Red == color2);
  201. Assert.True (ColorNames.Red != color2);
  202. Assert.False (color2 == ColorNames.Red);
  203. Assert.True (color2 != ColorNames.Red);
  204. }
  205. [Fact]
  206. public void Color_FromColorName_ConvertsColorNamesToColor ()
  207. {
  208. // Arrange
  209. var colorName = ColorNames.Red;
  210. var expectedColor = new Color (197, 15, 31); // Red in RGB
  211. // Act
  212. var convertedColor = Color.FromColorName (colorName);
  213. // Assert
  214. Assert.Equal (expectedColor, convertedColor);
  215. }
  216. [Fact]
  217. public void Color_FromColorName_ConvertsColorNameIdToColor ()
  218. {
  219. // Arrange
  220. int colorNameId = (int)ColorNames.Green;
  221. var expectedColor = new Color (19, 161, 14); // Green in RGB
  222. // Act
  223. var convertedColor = Color.FromColorName (colorNameId);
  224. // Assert
  225. Assert.Equal (expectedColor, convertedColor);
  226. }
  227. [Fact]
  228. public void Color_ColorName_Get_ReturnsClosestColorName ()
  229. {
  230. // Arrange
  231. var color = new Color (128, 64, 40); // Custom RGB color, closest to Brown
  232. var expectedColorName = ColorNames.Brown;
  233. // Act
  234. var colorName = color.ColorName;
  235. // Assert
  236. Assert.Equal (expectedColorName, colorName);
  237. }
  238. [Fact]
  239. public void FindClosestColor_ReturnsClosestColor ()
  240. {
  241. // Test cases with RGB values and expected closest color names
  242. var testCases = new []
  243. {
  244. (new Color(0, 0, 0), ColorNames.Black),
  245. (new Color(255, 255, 255), ColorNames.White),
  246. (new Color(5, 100, 255), ColorNames.BrightBlue),
  247. (new Color(0, 255, 0), ColorNames.BrightGreen),
  248. (new Color(255, 70, 8), ColorNames.BrightRed),
  249. (new Color(0, 128, 128), ColorNames.Cyan),
  250. (new Color(128, 64, 32), ColorNames.Brown),
  251. };
  252. foreach (var testCase in testCases) {
  253. var inputColor = testCase.Item1;
  254. var expectedColorName = testCase.Item2;
  255. var actualColorName = Color.FindClosestColor (inputColor);
  256. Assert.Equal (expectedColorName, actualColorName);
  257. }
  258. }
  259. [Fact]
  260. public void Color_ColorName_Set_SetsColorBasedOnColorName ()
  261. {
  262. // Arrange
  263. var color = new Color (0, 0, 0); // Black
  264. var expectedColor = new Color (ColorNames.Magenta);
  265. // Act
  266. color.ColorName = ColorNames.Magenta;
  267. // Assert
  268. Assert.Equal (expectedColor, color);
  269. }
  270. }