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
-
+
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
};
}
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();