1- using Microsoft . OpenApi . YamlReader ;
1+ using Microsoft . OpenApi . Tests ;
2+ using Microsoft . OpenApi . YamlReader ;
23using SharpYaml ;
34using SharpYaml . Serialization ;
45using System . IO ;
@@ -208,10 +209,7 @@ public void ToYamlNode_StringWithLineBreaks_PreservesLineBreaks()
208209 var yamlOutput = ConvertYamlNodeToString ( yamlNode ) ;
209210
210211 // Convert back to JSON to verify round-tripping
211- var yamlStream = new YamlStream ( ) ;
212- using var sr = new StringReader ( yamlOutput ) ;
213- yamlStream . Load ( sr ) ;
214- var jsonBack = yamlStream . Documents [ 0 ] . ToJsonNode ( ) ;
212+ var jsonBack = ConvertYamlStringToJsonNode ( yamlOutput ) ;
215213
216214 // Assert - line breaks should be preserved during round-trip
217215 var originalMultiline = json [ "multiline" ] ? . GetValue < string > ( ) ;
@@ -225,12 +223,80 @@ public void ToYamlNode_StringWithLineBreaks_PreservesLineBreaks()
225223 Assert . Contains ( "\n " , roundTripDescription ) ;
226224 }
227225
226+ [ Fact ]
227+ public void NumericPropertyNamesShouldRemainStringsFromJson ( )
228+ {
229+ // Given
230+ var yamlInput =
231+ """
232+ "123": value1
233+ "456": value2
234+ """ ;
235+
236+ // Given
237+ var jsonNode = Assert . IsType < JsonObject > ( JsonNode . Parse ( @"{
238+ ""123"": ""value1"",
239+ ""456"": ""value2""
240+ }" ) ) ;
241+
242+ // When
243+ var convertedBack = jsonNode . ToYamlNode ( ) ;
244+ var convertedBackOutput = ConvertYamlNodeToString ( convertedBack ) ;
245+
246+ // Then
247+ Assert . Equal ( yamlInput . MakeLineBreaksEnvironmentNeutral ( ) , convertedBackOutput . MakeLineBreaksEnvironmentNeutral ( ) ) ;
248+ }
249+
250+ [ Fact ]
251+ public void NumericPropertyNamesShouldRemainStringsFromYaml ( )
252+ {
253+ // Given
254+ var yamlInput =
255+ """
256+ "123": value1
257+ "456": value2
258+ """ ;
259+
260+ var jsonNode = ConvertYamlStringToJsonNode ( yamlInput ) ;
261+
262+ var convertedBack = jsonNode . ToYamlNode ( ) ;
263+ var convertedBackOutput = ConvertYamlNodeToString ( convertedBack ) ;
264+ // Then
265+ Assert . Equal ( yamlInput . MakeLineBreaksEnvironmentNeutral ( ) , convertedBackOutput . MakeLineBreaksEnvironmentNeutral ( ) ) ;
266+ }
267+
268+ [ Fact ]
269+ public void BooleanPropertyNamesShouldRemainStringsFromYaml ( )
270+ {
271+ // Given
272+ var yamlInput =
273+ """
274+ "true": value1
275+ "false": value2
276+ """ ;
277+
278+ var jsonNode = ConvertYamlStringToJsonNode ( yamlInput ) ;
279+
280+ var convertedBack = jsonNode . ToYamlNode ( ) ;
281+ var convertedBackOutput = ConvertYamlNodeToString ( convertedBack ) ;
282+ // Then
283+ Assert . Equal ( yamlInput . MakeLineBreaksEnvironmentNeutral ( ) , convertedBackOutput . MakeLineBreaksEnvironmentNeutral ( ) ) ;
284+ }
285+ private static JsonNode ConvertYamlStringToJsonNode ( string yamlInput )
286+ {
287+ var yamlDocument = new YamlStream ( ) ;
288+ using var sr = new StringReader ( yamlInput ) ;
289+ yamlDocument . Load ( sr ) ;
290+ var yamlRoot = yamlDocument . Documents [ 0 ] . RootNode ;
291+ return yamlRoot . ToJsonNode ( ) ;
292+ }
293+
228294 private static string ConvertYamlNodeToString ( YamlNode yamlNode )
229295 {
230296 using var ms = new MemoryStream ( ) ;
231297 var yamlStream = new YamlStream ( new YamlDocument ( yamlNode ) ) ;
232298 var writer = new StreamWriter ( ms ) ;
233- yamlStream . Save ( writer ) ;
299+ yamlStream . Save ( writer , isLastDocumentEndImplicit : true ) ;
234300 writer . Flush ( ) ;
235301 ms . Seek ( 0 , SeekOrigin . Begin ) ;
236302 var reader = new StreamReader ( ms ) ;
0 commit comments