From e2984c27ab2a915037fc0d9aaa9426894a7ad781 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 19 Jun 2026 18:37:51 +0100 Subject: Add lowerCamelCaseToUpperCase --- .../zwobble/hobgoblin/compiler/util/Casing.java | 16 ++++++++++++++++ .../hobgoblin/compiler/util/CasingTests.java | 22 ++++++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 src/test/java/org/zwobble/hobgoblin/compiler/util/CasingTests.java 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 80b8459..1b962a4 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/util/Casing.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/util/Casing.java @@ -8,4 +8,20 @@ public class Casing { public static String lowerCamelCaseToUpperCamelCase(String name) { return name.substring(0, 1).toUpperCase(Locale.ROOT) + name.substring(1); } + + public static String lowerCamelCaseToUpperCase(String lowerCamelCase) { + var upperCase = new StringBuilder(); + + for (var characterIndex = 0; characterIndex < lowerCamelCase.length(); characterIndex++) { + var character = lowerCamelCase.charAt(characterIndex); + if (Character.isUpperCase(character)) { + upperCase.append('_'); + upperCase.append(character); + } else { + upperCase.append(Character.toUpperCase(character)); + } + } + + return upperCase.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 new file mode 100644 index 0000000..1441811 --- /dev/null +++ b/src/test/java/org/zwobble/hobgoblin/compiler/util/CasingTests.java @@ -0,0 +1,22 @@ +package org.zwobble.hobgoblin.compiler.util; + +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; + +import static org.zwobble.precisely.AssertThat.assertThat; +import static org.zwobble.precisely.Matchers.equalTo; + +public class CasingTests { + @ParameterizedTest + @CsvSource({ + "a,A", + "abc,ABC", + "abcDef,ABC_DEF", + "abDeFg,AB_DE_FG", + }) + public void lowerCamelCaseToUpperCase(String lowerCamelCase, String expectedUpperCase) { + var result = Casing.lowerCamelCaseToUpperCase(lowerCamelCase); + + assertThat(result, equalTo(expectedUpperCase)); + } +} -- cgit v1.2.3