Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit 0b028d4

Browse files
committed
Add support for converting lower_case_underscore into PascalCase with tests
1 parent 85b0a85 commit 0b028d4

File tree

2 files changed

+32
-3
lines changed

2 files changed

+32
-3
lines changed

src/ServiceStack.Text/StringExtensions.cs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -588,9 +588,22 @@ public static string ToCamelCase(this string value)
588588

589589
public static string ToPascalCase(this string value)
590590
{
591-
if (string.IsNullOrEmpty(value) || value.Length <= 1) return value;
591+
if (string.IsNullOrEmpty(value)) return value;
592+
593+
if (value.Contains('_'))
594+
{
595+
var parts = value.Split('_');
596+
var sb = new StringBuilder();
597+
foreach (var part in parts)
598+
{
599+
var str = part.ToCamelCase();
600+
sb.Append(Char.ToUpper(str[0]) + str.SafeSubstring(1, str.Length));
601+
}
602+
return sb.ToString();
603+
}
604+
592605
var camelCase = value.ToCamelCase();
593-
return Char.ToUpper(camelCase[0]) + camelCase.Substring(1);
606+
return Char.ToUpper(camelCase[0]) + camelCase.SafeSubstring(1, camelCase.Length);
594607
}
595608

596609
public static string ToTitleCase(this string value)
@@ -636,7 +649,7 @@ public static string SafeSubstring(this string value, int startIndex)
636649

637650
public static string SafeSubstring(this string value, int startIndex, int length)
638651
{
639-
if (String.IsNullOrEmpty(value)) return String.Empty;
652+
if (string.IsNullOrEmpty(value)) return string.Empty;
640653
if (value.Length >= (startIndex + length))
641654
return value.Substring(startIndex, length);
642655

tests/ServiceStack.Text.Tests/StringExtensionsTests.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,23 @@ public void Can_SafeSubstring_with_length()
266266
Assert.That(input.SafeSubstring(2, 4), Is.EqualTo("stSt"));
267267
Assert.That(input.SafeSubstring(20, 4), Is.EqualTo(""));
268268
Assert.That(input.SafeSubstring(0, 20), Is.EqualTo("TestString"));
269+
}
269270

271+
[Test]
272+
public void Can_convert_ToPascalCase()
273+
{
274+
Assert.That(((string)null).ToPascalCase(), Is.Null);
275+
Assert.That("".ToPascalCase(), Is.EqualTo(""));
276+
Assert.That("a".ToPascalCase(), Is.EqualTo("A"));
277+
Assert.That("aB".ToPascalCase(), Is.EqualTo("AB"));
278+
Assert.That("AB".ToPascalCase(), Is.EqualTo("Ab"));
279+
Assert.That("aaBb".ToPascalCase(), Is.EqualTo("AaBb"));
280+
Assert.That("aaBbCc".ToPascalCase(), Is.EqualTo("AaBbCc"));
281+
Assert.That("a_B".ToPascalCase(), Is.EqualTo("AB"));
282+
Assert.That("a_b".ToPascalCase(), Is.EqualTo("AB"));
283+
Assert.That("aa_bb".ToPascalCase(), Is.EqualTo("AaBb"));
284+
Assert.That("Aa_Bb".ToPascalCase(), Is.EqualTo("AaBb"));
285+
Assert.That("AA_BB".ToPascalCase(), Is.EqualTo("AaBb"));
270286
}
271287
}
272288
}

0 commit comments

Comments
 (0)