Skip to content

Commit 6d40038

Browse files
committed
* Fixed bug: invalid xml if property names contain space at begin or end anf first non space digit is not a letter or string begins with "xml" (example: " xmlName").
* Added unit tests for XmlPropertyFormatter.GetValidElementName()
1 parent 9c3c44c commit 6d40038

File tree

2 files changed

+83
-1
lines changed

2 files changed

+83
-1
lines changed

src/Serilog.Sinks.MSSqlServer/Sinks/MSSqlServer/Output/XmlPropertyFormatter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ public string GetValidElementName(string name)
180180

181181
if (!char.IsLetter(validName[0]) || validName.StartsWith("xml", true, CultureInfo.CurrentCulture))
182182
{
183-
validName = "x" + name;
183+
validName = "x" + validName;
184184
}
185185

186186
validName = Regex.Replace(validName, @"\s", "_");
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
using Serilog.Sinks.MSSqlServer.Output;
2+
using Xunit;
3+
4+
namespace Serilog.Sinks.MSSqlServer.Tests.Sinks.MSSqlServer.Output
5+
{
6+
public class XmlPropertyFormatterTests
7+
{
8+
[Fact]
9+
public void GetValidElementNameReturnsValidNameOnNull()
10+
{
11+
var sut = new XmlPropertyFormatter();
12+
13+
var result = sut.GetValidElementName(null);
14+
15+
Assert.Equal("x", result);
16+
}
17+
18+
[Fact]
19+
public void GetValidElementNameReturnsValidNameOnEmpty()
20+
{
21+
var sut = new XmlPropertyFormatter();
22+
23+
var result = sut.GetValidElementName(string.Empty);
24+
25+
Assert.Equal("x", result);
26+
}
27+
28+
[Fact]
29+
public void GetValidElementNameTrimsWhitespace()
30+
{
31+
var sut = new XmlPropertyFormatter();
32+
33+
var result = sut.GetValidElementName(" \tname \t");
34+
35+
Assert.Equal("name", result);
36+
}
37+
38+
[Fact]
39+
public void GetValidElementNamePrependsXIfNonLetterAtBegin()
40+
{
41+
var sut = new XmlPropertyFormatter();
42+
43+
var result = sut.GetValidElementName("$Name");
44+
45+
Assert.Equal("x$Name", result);
46+
}
47+
48+
[Fact]
49+
public void GetValidElementNamePrependsXIfXmlAtBeginCaseInsensitive()
50+
{
51+
var sut = new XmlPropertyFormatter();
52+
53+
var result = sut.GetValidElementName("xmlName");
54+
Assert.Equal("xxmlName", result);
55+
56+
var result2 = sut.GetValidElementName("XmlName");
57+
Assert.Equal("xXmlName", result2);
58+
}
59+
60+
[Fact]
61+
public void GetValidElementNameTrimsWhitespaceAndPrependsXIfInvalidBegin()
62+
{
63+
var sut = new XmlPropertyFormatter();
64+
65+
var result = sut.GetValidElementName(" xmlName ");
66+
Assert.Equal("xxmlName", result);
67+
68+
var result2 = sut.GetValidElementName(" 4Name ");
69+
Assert.Equal("x4Name", result2);
70+
}
71+
72+
[Fact]
73+
public void GetValidElementNameReplacesEnclosedWhitespaceWithUnderscore()
74+
{
75+
var sut = new XmlPropertyFormatter();
76+
77+
var result = sut.GetValidElementName("Name\tWith Space");
78+
79+
Assert.Equal("Name_With___Space", result);
80+
}
81+
}
82+
}

0 commit comments

Comments
 (0)