Skip to content

Commit ef55be7

Browse files
committed
Use verbatim literals for multi-line strings
1 parent a18788d commit ef55be7

File tree

4 files changed

+32
-6
lines changed

4 files changed

+32
-6
lines changed

src/CSharpScriptSerializer/LiteralCSScriptSerializer.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
using System.Collections.Generic;
33
using Microsoft.CodeAnalysis;
44
using Microsoft.CodeAnalysis.CSharp;
5+
using Microsoft.CodeAnalysis.CSharp.Scripting.Hosting;
56
using Microsoft.CodeAnalysis.CSharp.Syntax;
7+
using Microsoft.CodeAnalysis.Scripting.Hosting;
68

79
namespace CSharpScriptSerialization
810
{
@@ -30,7 +32,13 @@ public override ExpressionSyntax GetCreation(object obj)
3032
{typeof(float), x => SyntaxFactory.Literal((float)x)},
3133
{typeof(int), x => SyntaxFactory.Literal((int)x)},
3234
{typeof(long), x => SyntaxFactory.Literal((long)x)},
33-
{typeof(string), x => SyntaxFactory.Literal((string)x)},
35+
{
36+
typeof(string), x => SyntaxFactory.Literal(
37+
SyntaxTriviaList.Empty,
38+
CSharpObjectFormatter.Instance.FormatObject(x, new PrintOptions {EscapeNonPrintableCharacters = false}),
39+
(string)x,
40+
SyntaxTriviaList.Empty)
41+
},
3442
{typeof(uint), x => SyntaxFactory.Literal((uint)x)},
3543
{typeof(ulong), x => SyntaxFactory.Literal((ulong)x)},
3644
{typeof(short), x => SyntaxFactory.Literal((short)x)},

src/CSharpScriptSerializer/project.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"version": "1.1.0-*",
2+
"version": "1.1.1-*",
33
"name": "CSharpScriptSerializer",
44
"title": "CSharpScriptSerializer",
55
"description": "Serialize to C# scripts",
@@ -9,7 +9,7 @@
99
"packOptions": {
1010
"tags": [ "Roslyn", "CSharp", "C#", "CSX", "Script", "Serialization" ],
1111
"owners": [ "Andriy.Svyryd" ],
12-
"releaseNotes": "Version 1.1.0\r\n* Enable customizing the property serialization condition in PropertyCSScriptSerializer\r\nVersion 1.0.0\r\n* Enable customizing the default values in PropertyCSScriptSerializer\r\n* Change ICSScriptSerializable.GetSerializer() to return ICSScriptSerializer\r\n* Fix parameters not being used in DeserializeAsync\r\n\r\nVersion 1.0.0-alpha1\r\n* Initial release",
12+
"releaseNotes": "Version 1.1.1\r\n* Use verbatim literals for multi-line strings\r\n* Remove redundant flags enum values\r\nVersion 1.1.0\r\n* Enable customizing the property serialization condition in PropertyCSScriptSerializer\r\nVersion 1.0.0\r\n* Enable customizing the default values in PropertyCSScriptSerializer\r\n* Change ICSScriptSerializable.GetSerializer() to return ICSScriptSerializer\r\n* Fix parameters not being used in DeserializeAsync\r\n\r\nVersion 1.0.0-alpha1\r\n* Initial release",
1313
"projectUrl": "https://github.com/AndriySvyryd/CSharpScriptSerializer",
1414
"licenseUrl": "http://www.apache.org/licenses/LICENSE-2.0",
1515
"requireLicenseAcceptance": false,

test/CSharpScriptSerializer.Tests/RoundTrippingTest.cs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
using System;
22
using System.Collections.Generic;
33
using System.Reflection;
4-
using Microsoft.CodeAnalysis.CSharp.Syntax;
54
using Xunit;
65

76
namespace CSharpScriptSerialization.Tests
@@ -165,6 +164,25 @@ public void Combined_flag_enum()
165164
+ typeof(RoundtrippingTest).Name + "." + typeof(FlagsEnum).Name + "." + FlagsEnum.SecondAndThird, script);
166165
}
167166

167+
[Fact]
168+
public void VerbatimStrings()
169+
{
170+
ValidateStringLiteral("\r", verbatim: true);
171+
ValidateStringLiteral("\n", verbatim: true);
172+
ValidateStringLiteral("\"", verbatim: false);
173+
ValidateStringLiteral("@", verbatim: false);
174+
ValidateStringLiteral("A", verbatim: false);
175+
}
176+
177+
private void ValidateStringLiteral(string input, bool verbatim)
178+
{
179+
var script = CSScriptSerializer.Serialize(input);
180+
Assert.Equal(verbatim ? '@' : '"', script[0]);
181+
182+
var output = CSScriptSerializer.Deserialize<string>(script);
183+
Assert.Equal(input, output);
184+
}
185+
168186
[Fact]
169187
public void Self_referencing_type()
170188
{

test/CSharpScriptSerializer.Tests/project.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"version": "1.1.0-*",
2+
"version": "1.1.1-*",
33

44
"buildOptions": {
55
"warningsAsErrors": true
@@ -8,7 +8,7 @@
88
"testRunner": "xunit",
99

1010
"dependencies": {
11-
"CSharpScriptSerializer": "1.1.0-*",
11+
"CSharpScriptSerializer": "1.1.1-*",
1212
"dotnet-test-xunit": "2.2.0-preview2-build1029",
1313
"xunit": "2.2.0-beta4-build3444"
1414
},

0 commit comments

Comments
 (0)