123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360 |
- using Terminal.Gui;
- using System;
- using System.Buffers;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Globalization;
- using System.Linq;
- using System.Text;
- using System.Text.Json;
- using Xunit;
- using static Unix.Terminal.Curses;
- namespace Terminal.Gui.DrawingTests;
- public class ColorTests {
- [Fact, AutoInitShutdown]
- public void ColorScheme_New ()
- {
- var scheme = new ColorScheme ();
- var lbl = new Label ();
- lbl.ColorScheme = scheme;
- lbl.Draw ();
- }
- [Fact]
- public void TestAllColors ()
- {
- var colorNames = Enum.GetValues (typeof (ColorNames));
- Attribute [] attrs = new Attribute [colorNames.Length];
- int idx = 0;
- foreach (ColorNames bg in colorNames) {
- attrs [idx] = new Attribute (bg, colorNames.Length - 1 - bg);
- idx++;
- }
- Assert.Equal (16, attrs.Length);
- Assert.Equal (new Attribute (Color.Black, Color.White), attrs [0]);
- Assert.Equal (new Attribute (Color.Blue, Color.BrightYellow), attrs [1]);
- Assert.Equal (new Attribute (Color.Green, Color.BrightMagenta), attrs [2]);
- Assert.Equal (new Attribute (Color.Cyan, Color.BrightRed), attrs [3]);
- Assert.Equal (new Attribute (Color.Red, Color.BrightCyan), attrs [4]);
- Assert.Equal (new Attribute (Color.Magenta, Color.BrightGreen), attrs [5]);
- Assert.Equal (new Attribute (Color.Brown, Color.BrightBlue), attrs [6]);
- Assert.Equal (new Attribute (Color.Gray, Color.DarkGray), attrs [7]);
- Assert.Equal (new Attribute (Color.DarkGray, Color.Gray), attrs [8]);
- Assert.Equal (new Attribute (Color.BrightBlue, Color.Brown), attrs [9]);
- Assert.Equal (new Attribute (Color.BrightGreen, Color.Magenta), attrs [10]);
- Assert.Equal (new Attribute (Color.BrightCyan, Color.Red), attrs [11]);
- Assert.Equal (new Attribute (Color.BrightRed, Color.Cyan), attrs [12]);
- Assert.Equal (new Attribute (Color.BrightMagenta, Color.Green), attrs [13]);
- Assert.Equal (new Attribute (Color.BrightYellow, Color.Blue), attrs [14]);
- Assert.Equal (new Attribute (Color.White, Color.Black), attrs [^1]);
- }
- [Fact]
- public void ColorNames_Has16Elements ()
- {
- Assert.Equal (16, Enum.GetValues (typeof (ColorNames)).Length);
- }
- [Fact]
- public void ColorNames_HaveCorrectOrdinals ()
- {
- Assert.Equal (0, (int)ColorNames.Black);
- Assert.Equal (1, (int)ColorNames.Blue);
- Assert.Equal (2, (int)ColorNames.Green);
- Assert.Equal (3, (int)ColorNames.Cyan);
- Assert.Equal (4, (int)ColorNames.Red);
- Assert.Equal (5, (int)ColorNames.Magenta);
- Assert.Equal (6, (int)ColorNames.Brown);
- Assert.Equal (7, (int)ColorNames.Gray);
- Assert.Equal (8, (int)ColorNames.DarkGray);
- Assert.Equal (9, (int)ColorNames.BrightBlue);
- Assert.Equal (10, (int)ColorNames.BrightGreen);
- Assert.Equal (11, (int)ColorNames.BrightCyan);
- Assert.Equal (12, (int)ColorNames.BrightRed);
- Assert.Equal (13, (int)ColorNames.BrightMagenta);
- Assert.Equal (14, (int)ColorNames.BrightYellow);
- Assert.Equal (15, (int)ColorNames.White);
- }
- [Fact]
- public void Color_Constructor_WithRGBValues ()
- {
- // Arrange
- int expectedR = 255;
- int expectedG = 0;
- int expectedB = 128;
- // Act
- var color = new Color (expectedR, expectedG, expectedB);
- // Assert
- Assert.Equal (expectedR, color.R);
- Assert.Equal (expectedG, color.G);
- Assert.Equal (expectedB, color.B);
- Assert.Equal (0xFF, color.A); // Alpha should be FF by default
- }
- [Fact]
- public void Color_Constructor_WithAlphaAndRGBValues ()
- {
- // Arrange
- int expectedA = 128;
- int expectedR = 255;
- int expectedG = 0;
- int expectedB = 128;
- // Act
- var color = new Color (expectedA, expectedR, expectedG, expectedB);
- // Assert
- Assert.Equal (expectedA, color.A);
- Assert.Equal (expectedR, color.R);
- Assert.Equal (expectedG, color.G);
- Assert.Equal (expectedB, color.B);
- }
- [Fact]
- public void Color_Constructor_WithArgbValue ()
- {
- // Arrange
- int expectedArgb = unchecked((int)0xFF804040); // Alpha: 255, R: 128, G: 64, B: 64
- // Act
- var color = new Color (expectedArgb);
- // Assert
- Assert.Equal (255, color.A);
- Assert.Equal (128, color.R);
- Assert.Equal (64, color.G);
- Assert.Equal (64, color.B);
- }
- [Fact]
- public void Color_Constructor_WithColorName ()
- {
- // Arrange
- ColorNames colorName = ColorNames.Blue;
- var expectedColor = new Color (0, 55, 218); // Blue
- // Act
- var color = new Color (colorName);
- // Assert
- Assert.Equal (expectedColor, color);
- }
- [Fact]
- public void Color_ToString_WithNamedColor ()
- {
- // Arrange
- Color color = new Color (0, 55, 218); // Blue
- // Act
- string colorString = color.ToString ();
- // Assert
- Assert.Equal ("Blue", colorString);
- }
- [Fact]
- public void Color_ToString_WithRGBColor ()
- {
- // Arrange
- Color color = new Color (1, 64, 32); // Custom RGB color
- // Act
- string colorString = color.ToString ();
- // Assert
- Assert.Equal ("#014020", colorString);
- }
- [Fact]
- public void Color_ImplicitOperator_FromInt ()
- {
- // Arrange
- int argb = unchecked((int)0xFF804020); // Alpha: 255, R: 128, G: 64, B: 32
- var expectedColor = new Color (255, 128, 64, 32);
- // Act
- Color color = argb;
- // Assert
- Assert.Equal (expectedColor, color);
- }
- [Fact]
- public void Color_ExplicitOperator_ToInt ()
- {
- // Arrange
- var color = new Color (255, 128, 64, 32);
- int expectedArgb = unchecked((int)0xFF804020); // Alpha: 255, R: 128, G: 64, B: 32
- // Act
- int argb = (int)color;
- // Assert
- Assert.Equal (expectedArgb, argb);
- }
- [Fact]
- public void Color_ImplicitOperator_FromColorNames ()
- {
- // Arrange
- ColorNames colorName = ColorNames.Blue;
- var expectedColor = new Color (0, 55, 218); // Blue
- // Act
- Color color = (Color)colorName;
- // Assert
- Assert.Equal (expectedColor, color);
- }
- [Fact]
- public void Color_ExplicitOperator_ToColorNames ()
- {
- // Arrange
- var color = new Color (0, 0, 0x80); // Blue
- ColorNames expectedColorName = ColorNames.Blue;
- // Act
- ColorNames colorName = (ColorNames)color;
- // Assert
- Assert.Equal (expectedColorName, colorName);
- }
- [Fact]
- public void Color_EqualityOperator_WithColorAndColor ()
- {
- // Arrange
- var color1 = new Color (255, 128, 64, 32);
- var color2 = new Color (255, 128, 64, 32);
- // Act & Assert
- Assert.True (color1 == color2);
- Assert.False (color1 != color2);
- }
- [Fact]
- public void Color_InequalityOperator_WithColorAndColor ()
- {
- // Arrange
- var color1 = new Color (255, 128, 64, 32);
- var color2 = new Color (128, 64, 32, 16);
- // Act & Assert
- Assert.False (color1 == color2);
- Assert.True (color1 != color2);
- }
- [Fact]
- public void Color_EqualityOperator_WithColorNamesAndColor ()
- {
- // Arrange
- var color1 = new Color (ColorNames.Red);
- var color2 = new Color (197, 15, 31); // Red in RGB
- // Act & Assert
- Assert.True (ColorNames.Red == color1);
- Assert.False (ColorNames.Red != color1);
- Assert.True (color1 == ColorNames.Red);
- Assert.False (color1 != ColorNames.Red);
- Assert.True (color2 == ColorNames.Red);
- Assert.False (color2 != ColorNames.Red);
- }
- [Fact]
- public void Color_InequalityOperator_WithColorNamesAndColor ()
- {
- // Arrange
- var color1 = new Color (ColorNames.Red);
- var color2 = new Color (58, 150, 221); // Cyan in RGB
- // Act & Assert
- Assert.False (ColorNames.Red == color2);
- Assert.True (ColorNames.Red != color2);
- Assert.False (color2 == ColorNames.Red);
- Assert.True (color2 != ColorNames.Red);
- }
- [Fact]
- public void Color_FromColorName_ConvertsColorNamesToColor ()
- {
- // Arrange
- var colorName = ColorNames.Red;
- var expectedColor = new Color (197, 15, 31); // Red in RGB
- // Act
- var convertedColor = (Color)colorName;
- // Assert
- Assert.Equal (expectedColor, convertedColor);
- }
- [Fact]
- public void Color_ColorName_Get_ReturnsClosestColorName ()
- {
- // Arrange
- var color = new Color (128, 64, 40); // Custom RGB color, closest to Brown
- var expectedColorName = ColorNames.Brown;
- // Act
- var colorName = color.ColorName;
- // Assert
- Assert.Equal (expectedColorName, colorName);
- }
- [Fact]
- public void FindClosestColor_ReturnsClosestColor ()
- {
- // Test cases with RGB values and expected closest color names
- var testCases = new []
- {
- (new Color(0, 0, 0), ColorNames.Black),
- (new Color(255, 255, 255), ColorNames.White),
- (new Color(5, 100, 255), ColorNames.BrightBlue),
- (new Color(0, 255, 0), ColorNames.BrightGreen),
- (new Color(255, 70, 8), ColorNames.BrightRed),
- (new Color(0, 128, 128), ColorNames.Cyan),
- (new Color(128, 64, 32), ColorNames.Brown),
- };
- foreach (var testCase in testCases) {
- var inputColor = testCase.Item1;
- var expectedColorName = testCase.Item2;
- var actualColorName = Color.FindClosestColor (inputColor);
- Assert.Equal (expectedColorName, actualColorName);
- }
- }
- [Fact]
- public void Color_ColorName_Set_SetsColorBasedOnColorName ()
- {
- // Arrange
- var color = new Color (0, 0, 0); // Black
- var expectedColor = new Color (ColorNames.Magenta);
- // Act
- color.ColorName = ColorNames.Magenta;
- // Assert
- Assert.Equal (expectedColor, color);
- }
- }
|