Skip to content

Commit cf81824

Browse files
authored
squeaky-clean: add more tests (exercism#2131)
1 parent 9cd0fee commit cf81824

2 files changed

Lines changed: 17 additions & 7 deletions

File tree

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,25 @@
11
class SqueakyClean {
22
static String clean(String identifier) {
33
final StringBuilder cleanIdentifier = new StringBuilder();
4+
boolean kebab = false;
45
for (int i = 0; i < identifier.length(); i++) {
56
final char ch = identifier.charAt(i);
67
if (Character.isSpaceChar(ch)) {
78
cleanIdentifier.append("_");
89
} else if (Character.isISOControl(ch)) {
910
cleanIdentifier.append("CTRL");
10-
} else if (ch == '-' && i < identifier.length() + 1) {
11-
i++;
12-
cleanIdentifier.append(Character.toUpperCase(identifier.charAt(i)));
13-
} else if (ch >= 'α' && ch <= 'ω') {
14-
} else if (Character.isAlphabetic(ch)) {
15-
cleanIdentifier.append(ch);
11+
} else if (ch == '-') {
12+
kebab = true;
13+
} else if (isLetter(ch)) {
14+
cleanIdentifier.append(
15+
kebab ? Character.toUpperCase(ch) : ch
16+
);
17+
kebab = false;
1618
}
1719
}
1820
return cleanIdentifier.toString();
1921
}
22+
private static boolean isLetter(char ch) {
23+
return Character.isLetter(ch) && !(ch >= 'α' && ch <= 'ω');
24+
}
2025
}

exercises/concept/squeaky-clean/src/test/java/SqueakyCleanTest.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public void leading_and_trailing_spaces() {
3131

3232
@Test
3333
public void ctrl() {
34-
assertThat(SqueakyClean.clean("my\0Id")).isEqualTo("myCTRLId");
34+
assertThat(SqueakyClean.clean("my\0\r\u007FId")).isEqualTo("myCTRLCTRLCTRLId");
3535
}
3636

3737
@Test
@@ -49,6 +49,11 @@ public void kebab_to_camel_case() {
4949
assertThat(SqueakyClean.clean("à-ḃç")).isEqualTo("àḂç");
5050
}
5151

52+
@Test
53+
public void kebab_to_camel_case_no_letter() {
54+
assertThat(SqueakyClean.clean("a-1C")).isEqualTo("aC");
55+
}
56+
5257
@Test
5358
public void omit_lower_case_greek_letters() {
5459
assertThat(SqueakyClean.clean("MyΟβιεγτFinder")).isEqualTo("MyΟFinder");

0 commit comments

Comments
 (0)