diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/util/Casing.java | 14 | ||||
| -rw-r--r-- | src/test/java/org/zwobble/hobgoblin/compiler/util/CasingTests.java | 14 |
2 files changed, 28 insertions, 0 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/util/Casing.java b/src/main/java/org/zwobble/hobgoblin/compiler/util/Casing.java index 3705f99..ef002ba 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/util/Casing.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/util/Casing.java @@ -42,4 +42,18 @@ public class Casing { return snakeCase.toString(); } + + public static String upperCamelCaseToSnakeCase(String lowerCamelCase) { + var snakeCase = new StringBuilder(); + + for (var characterIndex = 0; characterIndex < lowerCamelCase.length(); characterIndex++) { + var character = lowerCamelCase.charAt(characterIndex); + if (characterIndex != 0 && Character.isUpperCase(character) || Character.isDigit(character)) { + snakeCase.append('_'); + } + snakeCase.append(Character.toLowerCase(character)); + } + + return snakeCase.toString(); + } } diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/util/CasingTests.java b/src/test/java/org/zwobble/hobgoblin/compiler/util/CasingTests.java index 5893335..4d8c9c4 100644 --- a/src/test/java/org/zwobble/hobgoblin/compiler/util/CasingTests.java +++ b/src/test/java/org/zwobble/hobgoblin/compiler/util/CasingTests.java @@ -49,4 +49,18 @@ public class CasingTests { assertThat(result, equalTo(expectedUpperCase)); } + + @ParameterizedTest + @CsvSource({ + "A,a", + "Abc,abc", + "AbcDef,abc_def", + "AbDeFg,ab_de_fg", + "A0,a_0", + }) + public void upperCamelCaseToSnakeCase(String lowerCamelCase, String expectedUpperCase) { + var result = Casing.upperCamelCaseToSnakeCase(lowerCamelCase); + + assertThat(result, equalTo(expectedUpperCase)); + } } |
