123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277 |
- using System.Text.Json;
- using Xunit;
- namespace Terminal.Gui.ConfigurationTests {
- public class ColorJsonConverterTests {
- [Theory]
- [InlineData ("Black", Color.Black)]
- [InlineData ("Blue", Color.Blue)]
- [InlineData ("BrightBlue", Color.BrightBlue)]
- [InlineData ("BrightCyan", Color.BrightCyan)]
- [InlineData ("BrightGreen", Color.BrightGreen)]
- [InlineData ("BrightMagenta", Color.BrightMagenta)]
- [InlineData ("BrightRed", Color.BrightRed)]
- [InlineData ("BrightYellow", Color.BrightYellow)]
- [InlineData ("Brown", Color.Brown)]
- [InlineData ("Cyan", Color.Cyan)]
- [InlineData ("DarkGray", Color.DarkGray)]
- [InlineData ("Gray", Color.Gray)]
- [InlineData ("Green", Color.Green)]
- [InlineData ("Magenta", Color.Magenta)]
- [InlineData ("Red", Color.Red)]
- [InlineData ("White", Color.White)]
- public void TestColorDeserializationFromHumanReadableColorNames (string colorName, Color expectedColor)
- {
- // Arrange
- string json = $"\"{colorName}\"";
- // Act
- Color actualColor = JsonSerializer.Deserialize<Color> (json, ConfigurationManagerTests._jsonOptions);
- // Assert
- Assert.Equal (expectedColor, actualColor);
- }
- [Theory]
- [InlineData (Color.Black, "Black")]
- [InlineData (Color.Blue, "Blue")]
- [InlineData (Color.Green, "Green")]
- [InlineData (Color.Cyan, "Cyan")]
- [InlineData (Color.Gray, "Gray")]
- [InlineData (Color.Red, "Red")]
- [InlineData (Color.Magenta, "Magenta")]
- [InlineData (Color.Brown, "Brown")]
- [InlineData (Color.DarkGray, "DarkGray")]
- [InlineData (Color.BrightBlue, "BrightBlue")]
- [InlineData (Color.BrightGreen, "BrightGreen")]
- [InlineData (Color.BrightCyan, "BrightCyan")]
- [InlineData (Color.BrightRed, "BrightRed")]
- [InlineData (Color.BrightMagenta, "BrightMagenta")]
- [InlineData (Color.BrightYellow, "BrightYellow")]
- [InlineData (Color.White, "White")]
- public void SerializesEnumValuesAsStrings (Color color, string expectedJson)
- {
- var converter = new ColorJsonConverter ();
- var options = new JsonSerializerOptions { Converters = { converter } };
- var serialized = JsonSerializer.Serialize (color, options);
- Assert.Equal ($"\"{expectedJson}\"", serialized);
- }
- [Fact]
- public void TestSerializeColor_Black ()
- {
- // Arrange
- var color = Color.Black;
- var expectedJson = "\"Black\"";
- // Act
- var json = JsonSerializer.Serialize (color, new JsonSerializerOptions {
- Converters = { new ColorJsonConverter () }
- });
- // Assert
- Assert.Equal (expectedJson, json);
- }
- [Fact]
- public void TestSerializeColor_BrightRed ()
- {
- // Arrange
- var color = Color.BrightRed;
- var expectedJson = "\"BrightRed\"";
- // Act
- var json = JsonSerializer.Serialize (color, new JsonSerializerOptions {
- Converters = { new ColorJsonConverter () }
- });
- // Assert
- Assert.Equal (expectedJson, json);
- }
- [Fact]
- public void TestDeserializeColor_Black ()
- {
- // Arrange
- var json = "\"Black\"";
- var expectedColor = Color.Black;
- // Act
- var color = JsonSerializer.Deserialize<Color> (json, new JsonSerializerOptions {
- Converters = { new ColorJsonConverter () }
- });
- // Assert
- Assert.Equal (expectedColor, color);
- }
- [Fact]
- public void TestDeserializeColor_BrightRed ()
- {
- // Arrange
- var json = "\"BrightRed\"";
- var expectedColor = Color.BrightRed;
- // Act
- var color = JsonSerializer.Deserialize<Color> (json, new JsonSerializerOptions {
- Converters = { new ColorJsonConverter () }
- });
- // Assert
- Assert.Equal (expectedColor, color);
- }
- }
- public class TrueColorJsonConverterTests {
- [Theory]
- [InlineData (0,0,0, "\"#000000\"")]
- public void SerializesToHexCode (int r, int g, int b, string expected)
- {
- // Arrange
- // Act
- var actual = JsonSerializer.Serialize (new TrueColor (r, g, b), new JsonSerializerOptions {
- Converters = { new TrueColorJsonConverter () }
- });
- //Assert
- Assert.Equal (expected, actual);
- }
- [Theory]
- [InlineData ("\"#000000\"", 0, 0, 0)]
- public void DeserializesFromHexCode (string hexCode, int r, int g, int b)
- {
- // Arrange
- TrueColor expected = new TrueColor (r, g, b);
- // Act
- var actual = JsonSerializer.Deserialize<TrueColor> (hexCode, new JsonSerializerOptions {
- Converters = { new TrueColorJsonConverter () }
- });
- //Assert
- Assert.Equal (expected, actual);
- }
- [Theory]
- [InlineData ("\"rgb(0,0,0)\"", 0, 0, 0)]
- public void DeserializesFromRgb (string rgb, int r, int g, int b)
- {
- // Arrange
- TrueColor expected = new TrueColor (r, g, b);
- // Act
- var actual = JsonSerializer.Deserialize<TrueColor> (rgb, new JsonSerializerOptions {
- Converters = { new TrueColorJsonConverter () }
- });
- //Assert
- Assert.Equal (expected, actual);
- }
- }
- public class AttributeJsonConverterTests {
- [Fact, AutoInitShutdown]
- public void TestDeserialize ()
- {
- // Test deserializing from human-readable color names
- var json = "{\"Foreground\":\"Blue\",\"Background\":\"Green\"}";
- var attribute = JsonSerializer.Deserialize<Attribute> (json, ConfigurationManagerTests._jsonOptions);
- Assert.Equal (Color.Blue, attribute.Foreground);
- Assert.Equal (Color.Green, attribute.Background);
- // Test deserializing from RGB values
- json = "{\"Foreground\":\"rgb(255,0,0)\",\"Background\":\"rgb(0,255,0)\"}";
- attribute = JsonSerializer.Deserialize<Attribute> (json, ConfigurationManagerTests._jsonOptions);
- Assert.Equal (Color.BrightRed, attribute.Foreground);
- Assert.Equal (Color.BrightGreen, attribute.Background);
- }
- [Fact, AutoInitShutdown]
- public void TestSerialize ()
- {
- // Test serializing to human-readable color names
- var attribute = new Attribute (Color.Blue, Color.Green);
- var json = JsonSerializer.Serialize<Attribute> (attribute, ConfigurationManagerTests._jsonOptions);
- Assert.Equal ("{\"Foreground\":\"Blue\",\"Background\":\"Green\",\"TrueColorForeground\":\"#000080\",\"TrueColorBackground\":\"#008000\"}", json);
- }
- }
- public class ColorSchemeJsonConverterTests {
- //string json = @"
- // {
- // ""ColorSchemes"": {
- // ""Base"": {
- // ""normal"": {
- // ""foreground"": ""White"",
- // ""background"": ""Blue""
- // },
- // ""focus"": {
- // ""foreground"": ""Black"",
- // ""background"": ""Gray""
- // },
- // ""hotNormal"": {
- // ""foreground"": ""BrightCyan"",
- // ""background"": ""Blue""
- // },
- // ""hotFocus"": {
- // ""foreground"": ""BrightBlue"",
- // ""background"": ""Gray""
- // },
- // ""disabled"": {
- // ""foreground"": ""DarkGray"",
- // ""background"": ""Blue""
- // }
- // }
- // }
- // }";
- [Fact, AutoInitShutdown]
- public void TestColorSchemesSerialization ()
- {
- // Arrange
- var expectedColorScheme = new ColorScheme {
- Normal = Attribute.Make (Color.White, Color.Blue),
- Focus = Attribute.Make (Color.Black, Color.Gray),
- HotNormal = Attribute.Make (Color.BrightCyan, Color.Blue),
- HotFocus = Attribute.Make (Color.BrightBlue, Color.Gray),
- Disabled = Attribute.Make (Color.DarkGray, Color.Blue)
- };
- var serializedColorScheme = JsonSerializer.Serialize<ColorScheme> (expectedColorScheme, ConfigurationManagerTests._jsonOptions);
- // Act
- var actualColorScheme = JsonSerializer.Deserialize<ColorScheme> (serializedColorScheme, ConfigurationManagerTests._jsonOptions);
- // Assert
- Assert.Equal (expectedColorScheme, actualColorScheme);
- }
- }
- public class KeyJsonConverterTests {
- [Theory, AutoInitShutdown]
- [InlineData (Key.A, "A")]
- [InlineData (Key.a | Key.ShiftMask, "a, ShiftMask")]
- [InlineData (Key.A | Key.CtrlMask, "A, CtrlMask")]
- [InlineData (Key.a | Key.AltMask | Key.CtrlMask, "a, CtrlMask, AltMask")]
- [InlineData (Key.Delete | Key.AltMask | Key.CtrlMask, "Delete, CtrlMask, AltMask")]
- [InlineData (Key.D4, "D4")]
- [InlineData (Key.Esc, "Esc")]
- public void TestKeyRoundTripConversion (Key key, string expectedStringTo)
- {
- // Arrange
- var options = new JsonSerializerOptions ();
- options.Converters.Add (new KeyJsonConverter ());
- // Act
- var json = JsonSerializer.Serialize (key, options);
- var deserializedKey = JsonSerializer.Deserialize<Key> (json, options);
- // Assert
- Assert.Equal (expectedStringTo, deserializedKey.ToString ());
- }
- }
- }
|