ColorTests.Constructors.cs 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. namespace Terminal.Gui.DrawingTests;
  2. public partial class ColorTests
  3. {
  4. [Fact]
  5. public void Constructor_Empty_ReturnsColorWithZeroValue ()
  6. {
  7. Color color = new ();
  8. Assert.Multiple (
  9. () => Assert.Equal (0, color.Rgba),
  10. () => Assert.Equal (0u, color.Argb),
  11. () => Assert.Equal (0, color.R),
  12. () => Assert.Equal (0, color.G),
  13. () => Assert.Equal (0, color.B),
  14. () => Assert.Equal (0, color.A)
  15. );
  16. }
  17. [Theory]
  18. [CombinatorialData]
  19. public void Constructor_WithByteRGBAValues_AllValuesCorrect (
  20. [CombinatorialValues (0, 1, 254)] byte r,
  21. [CombinatorialValues (0, 1, 253)] byte g,
  22. [CombinatorialValues (0, 1, 252)] byte b,
  23. [CombinatorialValues (0, 1, 251)] byte a
  24. )
  25. {
  26. var color = new Color (r, g, b, a);
  27. ReadOnlySpan<byte> bytes = [b, g, r, a];
  28. var expectedRgba = BitConverter.ToInt32 (bytes);
  29. var expectedArgb = BitConverter.ToUInt32 (bytes);
  30. Assert.Multiple (
  31. () => Assert.Equal (r, color.R),
  32. () => Assert.Equal (g, color.G),
  33. () => Assert.Equal (b, color.B),
  34. () => Assert.Equal (a, color.A),
  35. () => Assert.Equal (expectedRgba, color.Rgba),
  36. () => Assert.Equal (expectedArgb, color.Argb)
  37. );
  38. }
  39. [Theory]
  40. [CombinatorialData]
  41. public void Constructor_WithByteRGBValues_AllValuesCorrect (
  42. [CombinatorialValues (0, 1, 254)] byte r,
  43. [CombinatorialValues (0, 1, 253)] byte g,
  44. [CombinatorialValues (0, 1, 252)] byte b
  45. )
  46. {
  47. var color = new Color (r, g, b);
  48. ReadOnlySpan<byte> bytes = [b, g, r, 255];
  49. var expectedRgba = BitConverter.ToInt32 (bytes);
  50. var expectedArgb = BitConverter.ToUInt32 (bytes);
  51. Assert.Multiple (
  52. () => Assert.Equal (r, color.R),
  53. () => Assert.Equal (g, color.G),
  54. () => Assert.Equal (b, color.B),
  55. () => Assert.Equal (byte.MaxValue, color.A),
  56. () => Assert.Equal (expectedRgba, color.Rgba),
  57. () => Assert.Equal (expectedArgb, color.Argb)
  58. );
  59. }
  60. [Theory]
  61. [CombinatorialData]
  62. public void Constructor_WithInt32_AllValuesCorrect (
  63. [CombinatorialValues (0, 1, 254)] byte r,
  64. [CombinatorialValues (0, 1, 253)] byte g,
  65. [CombinatorialValues (0, 1, 252)] byte b,
  66. [CombinatorialValues (0, 1, 251)] byte a
  67. )
  68. {
  69. ReadOnlySpan<byte> bytes = [b, g, r, a];
  70. var expectedRgba = BitConverter.ToInt32 (bytes);
  71. var expectedArgb = BitConverter.ToUInt32 (bytes);
  72. var color = new Color (expectedRgba);
  73. Assert.Multiple (
  74. () => Assert.Equal (r, color.R),
  75. () => Assert.Equal (g, color.G),
  76. () => Assert.Equal (b, color.B),
  77. () => Assert.Equal (a, color.A),
  78. () => Assert.Equal (expectedRgba, color.Rgba),
  79. () => Assert.Equal (expectedArgb, color.Argb)
  80. );
  81. }
  82. [Theory]
  83. [CombinatorialData]
  84. public void Constructor_WithInt32RGBAValues_AllValuesCorrect (
  85. [CombinatorialRandomData (Count = 4, Minimum = 0, Maximum = 255)]
  86. int r,
  87. [CombinatorialRandomData (Count = 4, Minimum = 0, Maximum = 255)]
  88. int g,
  89. [CombinatorialRandomData (Count = 4, Minimum = 0, Maximum = 255)]
  90. int b,
  91. [CombinatorialRandomData (Count = 4, Minimum = 0, Maximum = 255)]
  92. int a
  93. )
  94. {
  95. var color = new Color (r, g, b, a);
  96. Assert.Multiple (
  97. () => Assert.Equal (r, color.R),
  98. () => Assert.Equal (g, color.G),
  99. () => Assert.Equal (b, color.B),
  100. () => Assert.Equal (a, color.A)
  101. );
  102. }
  103. [Theory]
  104. [CombinatorialData]
  105. public void Constructor_WithInt32RGBValues_AllValuesCorrect (
  106. [CombinatorialRandomData (Count = 4, Minimum = 0, Maximum = 255)]
  107. int r,
  108. [CombinatorialRandomData (Count = 4, Minimum = 0, Maximum = 255)]
  109. int g,
  110. [CombinatorialRandomData (Count = 4, Minimum = 0, Maximum = 255)]
  111. int b
  112. )
  113. {
  114. var color = new Color (r, g, b);
  115. Assert.Multiple (
  116. () => Assert.Equal (r, color.R),
  117. () => Assert.Equal (g, color.G),
  118. () => Assert.Equal (b, color.B),
  119. () => Assert.Equal (byte.MaxValue, color.A)
  120. );
  121. }
  122. [Theory]
  123. [CombinatorialData]
  124. public void Constructor_WithString_EmptyOrWhitespace_ThrowsArgumentException (
  125. [CombinatorialValues ("", "\t", " ", "\r", "\r\n", "\n", " ")]
  126. string badString
  127. )
  128. {
  129. Assert.Throws<ArgumentException> (() => Color.Parse (badString));
  130. }
  131. [Fact]
  132. public void Constructor_WithString_Null_ThrowsArgumentNullException () { Assert.Throws<ArgumentNullException> (static () => Color.Parse (null)); }
  133. [Theory]
  134. [CombinatorialData]
  135. public void Constructor_WithUInt32_AllChannelsCorrect (
  136. [CombinatorialValues (0, 1, 254)] byte r,
  137. [CombinatorialValues (0, 1, 253)] byte g,
  138. [CombinatorialValues (0, 1, 252)] byte b,
  139. [CombinatorialValues (0, 1, 251)] byte a
  140. )
  141. {
  142. ReadOnlySpan<byte> bytes = [b, g, r, a];
  143. var expectedArgb = BitConverter.ToUInt32 (bytes);
  144. var color = new Color (expectedArgb);
  145. Assert.Multiple (
  146. () => Assert.Equal (r, color.R),
  147. () => Assert.Equal (g, color.G),
  148. () => Assert.Equal (b, color.B),
  149. () => Assert.Equal (a, color.A)
  150. );
  151. }
  152. }
  153. public static partial class ColorTestsTheoryDataGenerators
  154. {
  155. public static TheoryData<ColorName16, ValueTuple<byte, byte, byte>> Constructor_WithColorName_AllChannelsCorrect ()
  156. {
  157. TheoryData<ColorName16, ValueTuple<byte, byte, byte>> data = [];
  158. data.Add (ColorName16.Black, new ValueTuple<byte, byte, byte> (12, 12, 12));
  159. data.Add (ColorName16.Blue, new ValueTuple<byte, byte, byte> (0, 55, 218));
  160. data.Add (ColorName16.Green, new ValueTuple<byte, byte, byte> (19, 161, 14));
  161. data.Add (ColorName16.Cyan, new ValueTuple<byte, byte, byte> (58, 150, 221));
  162. data.Add (ColorName16.Red, new ValueTuple<byte, byte, byte> (197, 15, 31));
  163. data.Add (ColorName16.Magenta, new ValueTuple<byte, byte, byte> (136, 23, 152));
  164. data.Add (ColorName16.Yellow, new ValueTuple<byte, byte, byte> (128, 64, 32));
  165. data.Add (ColorName16.Gray, new ValueTuple<byte, byte, byte> (204, 204, 204));
  166. data.Add (ColorName16.DarkGray, new ValueTuple<byte, byte, byte> (118, 118, 118));
  167. data.Add (ColorName16.BrightBlue, new ValueTuple<byte, byte, byte> (59, 120, 255));
  168. data.Add (ColorName16.BrightGreen, new ValueTuple<byte, byte, byte> (22, 198, 12));
  169. data.Add (ColorName16.BrightCyan, new ValueTuple<byte, byte, byte> (97, 214, 214));
  170. data.Add (ColorName16.BrightRed, new ValueTuple<byte, byte, byte> (231, 72, 86));
  171. data.Add (ColorName16.BrightMagenta, new ValueTuple<byte, byte, byte> (180, 0, 158));
  172. data.Add (ColorName16.BrightYellow, new ValueTuple<byte, byte, byte> (249, 241, 165));
  173. data.Add (ColorName16.White, new ValueTuple<byte, byte, byte> (242, 242, 242));
  174. return data;
  175. }
  176. }