Skip to content

Commit bcb4f6b

Browse files
andypeetersckadluba
authored andcommitted
Add (slightly) general Truncate extension method
1 parent e995464 commit bcb4f6b

File tree

2 files changed

+106
-0
lines changed

2 files changed

+106
-0
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
namespace Serilog.Sinks.MSSqlServer.Extensions
2+
{
3+
internal static class StringExtensions
4+
{
5+
public static string Truncate(this string value, int maxLength, string suffix)
6+
{
7+
if (value == null) return null;
8+
var suffixLength = suffix?.Length ?? 0;
9+
if (maxLength <= suffixLength) return string.Empty;
10+
11+
var correctedMaxLength = maxLength - suffixLength;
12+
return value.Length <= maxLength ? value : $"{value.Substring(0, correctedMaxLength)}{suffix}";
13+
}
14+
}
15+
}
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
using Serilog.Sinks.MSSqlServer.Extensions;
2+
using Serilog.Sinks.MSSqlServer.Tests.TestUtils;
3+
using Xunit;
4+
5+
namespace Serilog.Sinks.MSSqlServer.Tests.Extensions
6+
{
7+
[Trait(TestCategory.TraitName, TestCategory.Unit)]
8+
public class StringExtensionsTests
9+
{
10+
[Fact]
11+
public void ReturnNullWhenInputStringIsNull()
12+
{
13+
// Arrange
14+
string inputMessage = null;
15+
16+
// Act
17+
var nonTruncatedMessage = inputMessage.Truncate(5, "...");
18+
19+
// Assert
20+
Assert.Null(nonTruncatedMessage);
21+
}
22+
23+
[Fact]
24+
public void ReturnEmptyWhenInputStringIsEmpty()
25+
{
26+
// Arrange
27+
var inputMessage = "";
28+
29+
// Act
30+
var nonTruncatedMessage = inputMessage.Truncate(5, "...");
31+
32+
// Assert
33+
Assert.Equal(inputMessage, nonTruncatedMessage);
34+
}
35+
36+
[Theory]
37+
[InlineData(0)]
38+
[InlineData(-1)]
39+
[InlineData(-5)]
40+
public void ReturnEmptyStringWhenRequestedMaxValueIsZeroOrSmaller(int maxValue)
41+
{
42+
// Arrange
43+
var inputMessage = "A simple test message";
44+
45+
// Act
46+
var nonTruncatedMessage = inputMessage.Truncate(maxValue, "...");
47+
48+
// Assert
49+
Assert.Equal("", nonTruncatedMessage);
50+
}
51+
52+
[Fact]
53+
public void ReturnTruncatedStringWithSuffix()
54+
{
55+
// Arrange
56+
var inputMessage = "A simple test message";
57+
58+
// Act
59+
var truncatedMessage = inputMessage.Truncate(15, "...");
60+
61+
// Assert
62+
Assert.Equal("A simple tes...", truncatedMessage);
63+
}
64+
65+
[Fact]
66+
public void ReturnTruncatedStringWithEmptySuffix()
67+
{
68+
// Arrange
69+
var inputMessage = "A simple test message";
70+
71+
// Act
72+
var truncatedMessage = inputMessage.Truncate(15, "");
73+
74+
// Assert
75+
Assert.Equal("A simple test m", truncatedMessage);
76+
}
77+
78+
[Fact]
79+
public void ReturnTruncatedStringWithNullSuffix()
80+
{
81+
// Arrange
82+
var inputMessage = "A simple test message";
83+
84+
// Act
85+
var truncatedMessage = inputMessage.Truncate(15, null);
86+
87+
// Assert
88+
Assert.Equal("A simple test m", truncatedMessage);
89+
}
90+
}
91+
}

0 commit comments

Comments
 (0)