File tree 2 files changed +46
-0
lines changed
main/java/org/springframework/data/r2dbc/repository/query
test/java/org/springframework/data/r2dbc/repository/query
2 files changed +46
-0
lines changed Original file line number Diff line number Diff line change @@ -36,6 +36,10 @@ public class LikeEscaper {
36
36
private final List <String > toReplace ;
37
37
38
38
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
+ }
39
43
this .escapeCharacter = escapeCharacter ;
40
44
this .toReplace = Arrays .asList (String .valueOf (escapeCharacter ), "_" , "%" );
41
45
}
@@ -45,6 +49,7 @@ private LikeEscaper(char escapeCharacter) {
45
49
*
46
50
* @param escapeCharacter escape character
47
51
* @return new instance of {@link LikeEscaper}
52
+ * @throws IllegalArgumentException if escape character is one of special characters ('_' and '%')
48
53
*/
49
54
public static LikeEscaper of (char escapeCharacter ) {
50
55
return new LikeEscaper (escapeCharacter );
Original file line number Diff line number Diff line change 15
15
*/
16
16
package org .springframework .data .r2dbc .repository .query ;
17
17
18
+ import static org .assertj .core .api .Assertions .*;
18
19
import static org .junit .jupiter .api .Assertions .*;
19
20
20
21
import org .junit .Test ;
@@ -27,4 +28,44 @@ public class LikeEscaperUnitTests {
27
28
public void ignoresNulls () {
28
29
assertNull (LikeEscaper .DEFAULT .escape (null ));
29
30
}
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
+ }
30
71
}
You can’t perform that action at this time.
0 commit comments