ColorTests.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #nullable enable
  2. namespace Terminal.Gui.DrawingTests;
  3. public partial class ColorTests {
  4. [Theory]
  5. [CombinatorialData]
  6. public void Argb_Returns_Expected_Value ([CombinatorialValues (0, 255)] byte a, [CombinatorialRange (0, 255, 51)] byte r, [CombinatorialRange (0, 153, 51)] byte g, [CombinatorialRange (0, 128, 32)] byte b)
  7. {
  8. Color color = new (r, g, b, a);
  9. // Color.Rgba is expected to be a signed int32 in little endian order (a,b,g,r)
  10. ReadOnlySpan<byte> littleEndianBytes = [b, g, r, a];
  11. uint expectedArgb = BitConverter.ToUInt32 (littleEndianBytes);
  12. Assert.Equal (expectedArgb, color.Argb);
  13. }
  14. [Fact]
  15. public void Color_ColorName_Get_ReturnsClosestColorName ()
  16. {
  17. // Arrange
  18. var color = new Color (128, 64, 40); // Custom RGB color, closest to Yellow
  19. var expectedColorName = ColorName.Yellow;
  20. // Act
  21. var colorName = color.GetClosestNamedColor ();
  22. // Assert
  23. Assert.Equal (expectedColorName, colorName);
  24. }
  25. [Fact]
  26. public void Color_IsClosestToNamedColor_ReturnsExpectedValue ()
  27. {
  28. // Arrange
  29. var color1 = new Color (ColorName.Red);
  30. var color2 = new Color (197, 15, 31); // Red in RGB
  31. Assert.True (color1.IsClosestToNamedColor (ColorName.Red));
  32. Assert.True (color2.IsClosestToNamedColor (ColorName.Red));
  33. }
  34. [Theory]
  35. [MemberData (nameof (ColorTestsTheoryDataGenerators.FindClosestColor_ReturnsClosestColor), MemberType = typeof (ColorTestsTheoryDataGenerators))]
  36. public void FindClosestColor_ReturnsClosestColor (Color inputColor, ColorName expectedColorName)
  37. {
  38. var actualColorName = Color.GetClosestNamedColor (inputColor);
  39. Assert.Equal (expectedColorName, actualColorName);
  40. }
  41. [Theory]
  42. [CombinatorialData]
  43. public void Rgba_Returns_Expected_Value ([CombinatorialValues (0, 255)] byte a, [CombinatorialRange (0, 255, 51)] byte r, [CombinatorialRange (0, 153, 51)] byte g, [CombinatorialRange (0, 128, 32)] byte b)
  44. {
  45. Color color = new (r, g, b, a);
  46. // Color.Rgba is expected to be a signed int32 in little endian order (a,b,g,r)
  47. ReadOnlySpan<byte> littleEndianBytes = [b, g, r, a];
  48. int expectedRgba = BitConverter.ToInt32 (littleEndianBytes);
  49. Assert.Equal (expectedRgba, color.Rgba);
  50. }
  51. }
  52. public static partial class ColorTestsTheoryDataGenerators {
  53. public static TheoryData<Color, ColorName> FindClosestColor_ReturnsClosestColor ()
  54. {
  55. TheoryData<Color, ColorName> data = [];
  56. data.Add (new Color (0, 0), ColorName.Black);
  57. data.Add (new Color (255, 255, 255), ColorName.White);
  58. data.Add (new Color (5, 100, 255), ColorName.BrightBlue);
  59. data.Add (new Color (0, 255), ColorName.BrightGreen);
  60. data.Add (new Color (255, 70, 8), ColorName.BrightRed);
  61. data.Add (new Color (0, 128, 128), ColorName.Cyan);
  62. data.Add (new Color (128, 64, 32), ColorName.Yellow);
  63. return data;
  64. }
  65. }