@@ -6,37 +6,49 @@ namespace ModelContextProtocol.Tests.Protocol;
66public static class IconTests
77{
88 [ Fact ]
9- public static void Icon_SerializesToJson_WithAllProperties ( )
9+ public static void Icon_SerializationRoundTrip_PreservesAllProperties ( )
1010 {
11- var icon = new Icon
11+ // Arrange
12+ var original = new Icon
1213 {
1314 Src = "https://example.com/icon.png" ,
1415 MimeType = "image/png" ,
1516 Sizes = "48x48"
1617 } ;
1718
18- string json = JsonSerializer . Serialize ( icon ) ;
19- var result = JsonSerializer . Deserialize < Icon > ( json ) ;
19+ // Act - Serialize to JSON
20+ string json = JsonSerializer . Serialize ( original ) ;
21+
22+ // Act - Deserialize back from JSON
23+ var deserialized = JsonSerializer . Deserialize < Icon > ( json ) ;
2024
21- Assert . Equal ( "https://example.com/icon.png" , result ! . Src ) ;
22- Assert . Equal ( "image/png" , result . MimeType ) ;
23- Assert . Equal ( "48x48" , result . Sizes ) ;
25+ // Assert
26+ Assert . NotNull ( deserialized ) ;
27+ Assert . Equal ( original . Src , deserialized . Src ) ;
28+ Assert . Equal ( original . MimeType , deserialized . MimeType ) ;
29+ Assert . Equal ( original . Sizes , deserialized . Sizes ) ;
2430 }
2531
2632 [ Fact ]
27- public static void Icon_SerializesToJson_WithOnlyRequiredProperties ( )
33+ public static void Icon_SerializationRoundTrip_WithOnlyRequiredProperties ( )
2834 {
29- var icon = new Icon
35+ // Arrange
36+ var original = new Icon
3037 {
3138 Src = "data:image/svg+xml;base64,PHN2Zy4uLjwvc3ZnPg=="
3239 } ;
3340
34- string json = JsonSerializer . Serialize ( icon ) ;
35- var result = JsonSerializer . Deserialize < Icon > ( json ) ;
41+ // Act - Serialize to JSON
42+ string json = JsonSerializer . Serialize ( original ) ;
43+
44+ // Act - Deserialize back from JSON
45+ var deserialized = JsonSerializer . Deserialize < Icon > ( json ) ;
3646
37- Assert . Equal ( "data:image/svg+xml;base64,PHN2Zy4uLjwvc3ZnPg==" , result ! . Src ) ;
38- Assert . Null ( result . MimeType ) ;
39- Assert . Null ( result . Sizes ) ;
47+ // Assert
48+ Assert . NotNull ( deserialized ) ;
49+ Assert . Equal ( original . Src , deserialized . Src ) ;
50+ Assert . Equal ( original . MimeType , deserialized . MimeType ) ;
51+ Assert . Equal ( original . Sizes , deserialized . Sizes ) ;
4052 }
4153
4254 [ Fact ]
@@ -57,13 +69,23 @@ public static void Icon_HasCorrectJsonPropertyNames()
5769 }
5870
5971 [ Theory ]
60- [ InlineData ( "" ) ]
61- [ InlineData ( " " ) ]
62- public static void Icon_DoesNotValidateEmptyOrWhitespaceSrc ( string src )
72+ [ InlineData ( """{}""" ) ]
73+ [ InlineData ( """{"mimeType":"image/png"}""" ) ]
74+ [ InlineData ( """{"sizes":"48x48"}""" ) ]
75+ [ InlineData ( """{"mimeType":"image/png","sizes":"48x48"}""" ) ]
76+ public static void Icon_DeserializationWithMissingSrc_ThrowsJsonException ( string invalidJson )
77+ {
78+ Assert . Throws < JsonException > ( ( ) => JsonSerializer . Deserialize < Icon > ( invalidJson ) ) ;
79+ }
80+
81+ [ Theory ]
82+ [ InlineData ( "null" ) ]
83+ [ InlineData ( "false" ) ]
84+ [ InlineData ( "true" ) ]
85+ [ InlineData ( "42" ) ]
86+ [ InlineData ( "[]" ) ]
87+ public static void Icon_DeserializationWithInvalidJson_ThrowsJsonException ( string invalidJson )
6388 {
64- // The Icon class doesn't enforce validation in the constructor
65- // It's up to consumers to validate the URI format
66- var icon = new Icon { Src = src } ;
67- Assert . Equal ( src , icon . Src ) ;
89+ Assert . Throws < JsonException > ( ( ) => JsonSerializer . Deserialize < Icon > ( invalidJson ) ) ;
6890 }
6991}
0 commit comments