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 ac0871b..e99aec6 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/util/Casing.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/util/Casing.java
@@ -24,4 +24,18 @@ public class Casing {
return upperCase.toString();
}
+
+ public static String lowerCamelCaseToSnakeCase(String lowerCamelCase) {
+ var snakeCase = new StringBuilder();
+
+ for (var characterIndex = 0; characterIndex < lowerCamelCase.length(); characterIndex++) {
+ var character = lowerCamelCase.charAt(characterIndex);
+ if (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 fbdf429..561ec8a 100644
--- a/src/test/java/org/zwobble/hobgoblin/compiler/util/CasingTests.java
+++ b/src/test/java/org/zwobble/hobgoblin/compiler/util/CasingTests.java
@@ -20,4 +20,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 lowerCamelCaseToSnakeCase(String lowerCamelCase, String expectedUpperCase) {
+ var result = Casing.lowerCamelCaseToSnakeCase(lowerCamelCase);
+
+ assertThat(result, equalTo(expectedUpperCase));
+ }
}