summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/util/Casing.java14
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/util/CasingTests.java14
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));
+ }
}