Skip to content

Commit d606dca

Browse files
Gregory NikolaishviliGregory Nikolaishvili
authored andcommitted
Update ToXmlString method and add unit tests
Modified the `ToXmlString` method for `TimeOnly` to change its output format from "HH:mm:sszzz" to "HH:mm:ss". Added a new test class `ToXmlStringExtTests` with unit tests for various types, ensuring correct XML string representations and invariant culture formatting for numeric types.
1 parent c674f08 commit d606dca

File tree

2 files changed

+105
-3
lines changed

2 files changed

+105
-3
lines changed

src/AltaSoft.DomainPrimitives/ToXmlStringExt.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,12 @@ public static class ToXmlStringExt
3131
public static string ToXmlString(this DateOnly value) => value.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture);
3232

3333
/// <summary>
34-
/// Converts a <see cref="TimeOnly" /> value to its XML string representation in the format "HH:mm:sszzz".
34+
/// Converts a <see cref="TimeOnly" /> value to its XML string representation in the format "HH:mm:ss".
3535
/// </summary>
3636
/// <param name="value">The TimeOnly value to convert.</param>
3737
/// <returns>The XML string representation of the TimeOnly value.</returns>
3838
[MethodImpl(MethodImplOptions.AggressiveInlining)]
39-
public static string ToXmlString(this TimeOnly value) => value.ToString("HH:mm:sszzz", CultureInfo.InvariantCulture);
39+
public static string ToXmlString(this TimeOnly value) => value.ToString("HH:mm:ss", CultureInfo.InvariantCulture);
4040

4141
/// <summary>
4242
/// Converts a <see cref="DateTimeOffset" /> value to its XML string representation
@@ -204,4 +204,4 @@ public static string ToXmlString(this char value)
204204
{
205205
return value.ToString();
206206
}
207-
}
207+
}
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
using System.Xml;
2+
3+
namespace AltaSoft.DomainPrimitives.XmlDataTypes.Tests;
4+
5+
public class ToXmlStringExtTests
6+
{
7+
[Fact]
8+
public void DateTime_ToXmlString_ReturnsExpectedFormat()
9+
{
10+
var dt = new DateTime(2024, 4, 1, 13, 45, 30, DateTimeKind.Local);
11+
var xml = dt.ToXmlString();
12+
Assert.Equal("2024-04-01T13:45:30+04:00", xml);
13+
}
14+
15+
[Fact]
16+
public void DateOnly_ToXmlString_ReturnsExpectedFormat()
17+
{
18+
var d = new DateOnly(2024, 4, 1);
19+
Assert.Equal("2024-04-01", d.ToXmlString());
20+
}
21+
22+
[Fact]
23+
public void TimeOnly_ToXmlString_ReturnsExpectedFormat()
24+
{
25+
var t = new TimeOnly(13, 45, 30);
26+
var xml = t.ToXmlString();
27+
Assert.Equal("13:45:30", xml);
28+
}
29+
30+
[Fact]
31+
public void DateTimeOffset_ToXmlString_ReturnsXmlConvertString()
32+
{
33+
var dto = new DateTimeOffset(2024, 4, 1, 13, 45, 30, TimeSpan.Zero);
34+
Assert.Equal(XmlConvert.ToString(dto), dto.ToXmlString());
35+
}
36+
37+
[Fact]
38+
public void TimeSpan_ToXmlString_ReturnsXmlConvertString()
39+
{
40+
var ts = new TimeSpan(1, 2, 3);
41+
Assert.Equal(XmlConvert.ToString(ts), ts.ToXmlString());
42+
}
43+
44+
[Theory]
45+
[InlineData((byte)42)]
46+
[InlineData((sbyte)-42)]
47+
[InlineData((short)-1234)]
48+
[InlineData((ushort)1234)]
49+
[InlineData(123456)]
50+
[InlineData(123456U)]
51+
[InlineData(1234567890123L)]
52+
[InlineData(1234567890123UL)]
53+
[InlineData(3.14f)]
54+
[InlineData(2.71828)]
55+
public void NumericTypes_ToXmlString_UsesInvariantCulture(object value)
56+
{
57+
var xml = value switch
58+
{
59+
byte b => b.ToXmlString(),
60+
sbyte sb => sb.ToXmlString(),
61+
short s => s.ToXmlString(),
62+
ushort us => us.ToXmlString(),
63+
int i => i.ToXmlString(),
64+
uint ui => ui.ToXmlString(),
65+
long l => l.ToXmlString(),
66+
ulong ul => ul.ToXmlString(),
67+
float f => f.ToXmlString(),
68+
double d => d.ToXmlString(),
69+
_ => throw new NotSupportedException()
70+
};
71+
Assert.DoesNotContain(',', xml); // Invariant culture uses '.'
72+
}
73+
74+
[Fact]
75+
public void Decimal_ToXmlString_UsesInvariantCulture()
76+
{
77+
const decimal m = 123.456m;
78+
var xml = m.ToXmlString();
79+
Assert.DoesNotContain(',', xml);
80+
}
81+
82+
[Fact]
83+
public void Guid_ToXmlString_ReturnsToString()
84+
{
85+
var guid = Guid.NewGuid();
86+
Assert.Equal(guid.ToString(), guid.ToXmlString());
87+
}
88+
89+
[Theory]
90+
[InlineData(true, "true")]
91+
[InlineData(false, "false")]
92+
public void Bool_ToXmlString_ReturnsExpected(bool value, string expected)
93+
{
94+
Assert.Equal(expected, value.ToXmlString());
95+
}
96+
97+
[Fact]
98+
public void Char_ToXmlString_ReturnsToString()
99+
{
100+
Assert.Equal("A", 'A'.ToXmlString());
101+
}
102+
}

0 commit comments

Comments
 (0)