| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- using System.Text.Json;
- using Moq;
- using UnitTests;
- namespace Terminal.Gui.ConfigurationTests;
- public class AttributeJsonConverterTests
- {
- public static readonly JsonSerializerOptions JsonOptions = new ()
- {
- Converters = { new AttributeJsonConverter (), new ColorJsonConverter () }
- };
- [Fact]
- public void TestDeserialize ()
- {
- // Test deserializing from human-readable color names
- var json = "{\"Foreground\":\"Blue\",\"Background\":\"Green\"}";
- var attribute = JsonSerializer.Deserialize<Attribute> (json, JsonOptions);
- Assert.Equal (Color.Blue, attribute.Foreground.GetClosestNamedColor16 ());
- Assert.Equal (Color.Green, attribute.Background.GetClosestNamedColor16 ());
- // Test deserializing from RGB values
- json = "{\"Foreground\":\"rgb(255,0,0)\",\"Background\":\"rgb(0,255,0)\"}";
- attribute = JsonSerializer.Deserialize<Attribute> (json, JsonOptions);
- Assert.Equal (Color.Red, attribute.Foreground.GetClosestNamedColor16 ());
- Assert.Equal (Color.BrightGreen, attribute.Background.GetClosestNamedColor16 ());
- }
- [Fact]
- public void Deserialize_TextStyle ()
- {
- var justStyleJson = "\"Bold\"";
- TextStyle textStyle = JsonSerializer.Deserialize<TextStyle> (justStyleJson, JsonOptions);
- Assert.Equal (TextStyle.Bold, textStyle);
- justStyleJson = "\"Bold,Underline\"";
- textStyle = JsonSerializer.Deserialize<TextStyle> (justStyleJson, JsonOptions);
- Assert.Equal (TextStyle.Bold | TextStyle.Underline, textStyle);
- var json = "{\"Foreground\":\"Blue\",\"Background\":\"Green\",\"Style\":\"Bold\"}";
- Attribute attribute = JsonSerializer.Deserialize<Attribute> (json, JsonOptions);
- Assert.Equal (TextStyle.Bold, attribute.Style);
- }
- [Fact]
- public void TestSerialize ()
- {
- // Test serializing to human-readable color names
- var attribute = new Attribute (Color.Blue, Color.Green);
- string json = JsonSerializer.Serialize (attribute, JsonOptions);
- Assert.Equal ("{\"Foreground\":\"Blue\",\"Background\":\"Green\"}", json);
- }
- [Fact]
- public void Serialize_TextStyle ()
- {
- // Test serializing to human-readable color names
- var attribute = new Attribute (Color.Blue, Color.Green, TextStyle.Bold);
- string json = JsonSerializer.Serialize (attribute, JsonOptions);
- Assert.Equal ("{\"Foreground\":\"Blue\",\"Background\":\"Green\",\"Style\":\"Bold\"}", json);
- attribute = new Attribute (Color.Blue, Color.Green, TextStyle.Bold | TextStyle.Italic);
- json = JsonSerializer.Serialize (attribute, JsonOptions);
- Assert.Equal ("{\"Foreground\":\"Blue\",\"Background\":\"Green\",\"Style\":\"Bold, Italic\"}", json);
- }
- [Fact]
- public void JsonRoundTrip_PreservesEquality ()
- {
- Attribute original = new (Color.Red, Color.Green, TextStyle.None);
- string json = JsonSerializer.Serialize (original, new JsonSerializerOptions
- {
- Converters = { new AttributeJsonConverter (), new ColorJsonConverter () }
- });
- Attribute roundTripped = JsonSerializer.Deserialize<Attribute> (json, new JsonSerializerOptions
- {
- Converters = { new AttributeJsonConverter (), new ColorJsonConverter () }
- })!;
- Assert.Equal (original, roundTripped); // ✅ This should pass if all fields are faithfully round-tripped
- }
- }
|