From e9a198544e9e65f245cd4663dc5156f42d1b0019 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Fri, 24 Oct 2025 13:52:24 -0400 Subject: [PATCH 1/3] tests: adds a unit test to ensure yaml multi-line literals maintain their lines Signed-off-by: Vincent Biret --- .../YamlConverterTests.cs | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/test/Microsoft.OpenApi.Readers.Tests/YamlConverterTests.cs b/test/Microsoft.OpenApi.Readers.Tests/YamlConverterTests.cs index 9fa456bab..70073bfaa 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/YamlConverterTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/YamlConverterTests.cs @@ -282,6 +282,31 @@ public void BooleanPropertyNamesShouldRemainStringsFromYaml() // Then Assert.Equal(yamlInput.MakeLineBreaksEnvironmentNeutral(), convertedBackOutput.MakeLineBreaksEnvironmentNeutral()); } + + [Fact] + public void LineBreaksShouldRoundTrip() + { + var yamlInput = + """ + python: |- + from openai import OpenAI + + client = OpenAI( + api_key="My API Key", + ) + page = client.beta.assistants.list() + page = page.data[0] + print(page.id) + """; + // When + var jsonNode = ConvertYamlStringToJsonNode(yamlInput); + var convertedBack = jsonNode.ToYamlNode(); + var convertedBackOutput = ConvertYamlNodeToString(convertedBack); + + // Then + Assert.Equal(yamlInput.MakeLineBreaksEnvironmentNeutral(), convertedBackOutput.MakeLineBreaksEnvironmentNeutral()); + } + private static JsonNode ConvertYamlStringToJsonNode(string yamlInput) { var yamlDocument = new YamlStream(); From 314dd380871fa6a54a009810b5c114b08cd92cfd Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 27 Oct 2025 08:40:27 -0400 Subject: [PATCH 2/3] chore: upgrades sharpyaml dependency Signed-off-by: Vincent Biret --- .../Microsoft.OpenApi.YamlReader.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.YamlReader/Microsoft.OpenApi.YamlReader.csproj b/src/Microsoft.OpenApi.YamlReader/Microsoft.OpenApi.YamlReader.csproj index c836548aa..1f2f5fb36 100644 --- a/src/Microsoft.OpenApi.YamlReader/Microsoft.OpenApi.YamlReader.csproj +++ b/src/Microsoft.OpenApi.YamlReader/Microsoft.OpenApi.YamlReader.csproj @@ -33,7 +33,7 @@ all - + From b05384872e9364aedf8d8fc24b36bab9824594c5 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 27 Oct 2025 08:40:43 -0400 Subject: [PATCH 3/3] fix: yaml blocks and line returns Signed-off-by: Vincent Biret --- src/Microsoft.OpenApi.YamlReader/YamlConverter.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.YamlReader/YamlConverter.cs b/src/Microsoft.OpenApi.YamlReader/YamlConverter.cs index d76cf8ec8..5acf0c007 100644 --- a/src/Microsoft.OpenApi.YamlReader/YamlConverter.cs +++ b/src/Microsoft.OpenApi.YamlReader/YamlConverter.cs @@ -151,10 +151,19 @@ private static YamlScalarNode ToYamlScalar(this JsonValue val) // Strings that look like numbers, booleans, or null need to be quoted // to preserve their string type when round-tripping var needsQuoting = NeedsQuoting(stringValue); + + var containsNewLine = stringValue.Contains('\n'); + + var style = (needsQuoting, containsNewLine) switch + { + (true, _) => ScalarStyle.DoubleQuoted, + (false, true) => ScalarStyle.Literal, + (false, false) => ScalarStyle.Plain + }; return new YamlScalarNode(stringValue) { - Style = needsQuoting ? ScalarStyle.DoubleQuoted : ScalarStyle.Plain + Style = style }; }