Skip to content

Commit d1d55d7

Browse files
committed
spring-projects#282 - Add more unit tests for LikeEscaper
1 parent b40f9c0 commit d1d55d7

File tree

2 files changed

+46
-0
lines changed

2 files changed

+46
-0
lines changed

Diff for: src/main/java/org/springframework/data/r2dbc/repository/query/LikeEscaper.java

+5
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ public class LikeEscaper {
3636
private final List<String> toReplace;
3737

3838
private LikeEscaper(char escapeCharacter) {
39+
if (escapeCharacter == '_' || escapeCharacter == '%') {
40+
throw new IllegalArgumentException("'_' and '%' are special characters and cannot be used as "
41+
+ "escape character");
42+
}
3943
this.escapeCharacter = escapeCharacter;
4044
this.toReplace = Arrays.asList(String.valueOf(escapeCharacter), "_", "%");
4145
}
@@ -45,6 +49,7 @@ private LikeEscaper(char escapeCharacter) {
4549
*
4650
* @param escapeCharacter escape character
4751
* @return new instance of {@link LikeEscaper}
52+
* @throws IllegalArgumentException if escape character is one of special characters ('_' and '%')
4853
*/
4954
public static LikeEscaper of(char escapeCharacter) {
5055
return new LikeEscaper(escapeCharacter);

Diff for: src/test/java/org/springframework/data/r2dbc/repository/query/LikeEscaperUnitTests.java

+41
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package org.springframework.data.r2dbc.repository.query;
1717

18+
import static org.assertj.core.api.Assertions.*;
1819
import static org.junit.jupiter.api.Assertions.*;
1920

2021
import org.junit.Test;
@@ -27,4 +28,44 @@ public class LikeEscaperUnitTests {
2728
public void ignoresNulls() {
2829
assertNull(LikeEscaper.DEFAULT.escape(null));
2930
}
31+
32+
@Test
33+
public void ignoresEmptyString() {
34+
assertThat(LikeEscaper.DEFAULT.escape("")).isEqualTo("");
35+
}
36+
37+
@Test
38+
public void ignoresBlankString() {
39+
assertThat(LikeEscaper.DEFAULT.escape(" ")).isEqualTo(" ");
40+
}
41+
42+
@Test(expected = IllegalArgumentException.class)
43+
public void throwsExceptionWhenEscapeCharacterIsUnderscore() {
44+
LikeEscaper.of('_');
45+
}
46+
47+
@Test(expected = IllegalArgumentException.class)
48+
public void throwsExceptionWhenEscapeCharacterIsPercent() {
49+
LikeEscaper.of('%');
50+
}
51+
52+
@Test
53+
public void escapesUnderscoresUsingDefaultEscapeCharacter() {
54+
assertThat(LikeEscaper.DEFAULT.escape("_test_")).isEqualTo("\\_test\\_");
55+
}
56+
57+
@Test
58+
public void escapesPercentsUsingDefaultEscapeCharacter() {
59+
assertThat(LikeEscaper.DEFAULT.escape("%test%")).isEqualTo("\\%test\\%");
60+
}
61+
62+
@Test
63+
public void escapesSpecialCharactersUsingCustomEscapeCharacter() {
64+
assertThat(LikeEscaper.of('$').escape("_%")).isEqualTo("$_$%");
65+
}
66+
67+
@Test
68+
public void doublesEscapeCharacter() {
69+
assertThat(LikeEscaper.DEFAULT.escape("\\")).isEqualTo("\\\\");
70+
}
3071
}

0 commit comments

Comments
 (0)