2121import org .junit .jupiter .api .Test ;
2222import org .sonarsource .analyzer .commons .regex .RegexFeature ;
2323
24- import static org .apache .commons .lang .StringEscapeUtils .escapeJava ;
2524import static org .assertj .core .api .Assertions .assertThat ;
2625import static org .sonarsource .analyzer .commons .regex .RegexParserTestUtils .assertFailParsing ;
2726import static org .sonarsource .analyzer .commons .regex .RegexParserTestUtils .assertKind ;
@@ -31,29 +30,29 @@ class BackReferenceTreeTest {
3130
3231 @ Test
3332 void backReferences () {
34- assertBackReference (escapeJava ( "\\ k<group1>" ) , "group1" );
35- assertBackReference (escapeJava ( "\\ k<ALPHA>" ) , "ALPHA" );
36- assertBackReference (escapeJava ( "\\ k<0invalid>" ) , "0invalid" );
37-
38- assertBackReference (escapeJava ( "\\ 1" ) , 1 );
39- assertBackReference (escapeJava ( "(1)\\ 1" ) , 1 );
40- assertBackReference (escapeJava ( "(1)\\ 7" ) , 7 );
41- assertBackReference (escapeJava ( "(1)\\ 11" ) , 1 );
42- assertBackReference (escapeJava ( "(1)(2)(3)(4)(5)(6)(7)(8)(9)(a)\\ 11" ) , 1 );
43- assertBackReference (escapeJava ( "(1)(2)(3)(4)(5)(6)(7)(8)(9)(a)(b)\\ 11" ) , 11 );
44- assertBackReference (escapeJava ( "(1)(2)(3)(4)(5)(6)(7)(8)(9)(a)(b)(c)\\ 11" ) , 11 );
45- assertBackReference (escapeJava ( "(((((5)(6)(7)(8)(9)(a)\\ 11)?)+)*)" ) , 1 );
46- assertBackReference (escapeJava ( "(((((5)(6)(7)(8)(9)(a)(b)\\ 11)?)+)*)" ) , 11 );
47-
48- RegexTree regex = assertSuccessfulParse (escapeJava ( "\\ 42." ) );
33+ assertBackReference ("\\ \\ k<group1>" , "group1" );
34+ assertBackReference ("\\ \\ k<ALPHA>" , "ALPHA" );
35+ assertBackReference ("\\ \\ k<0invalid>" , "0invalid" );
36+
37+ assertBackReference ("\\ \\ 1" , 1 );
38+ assertBackReference ("(1)\\ \\ 1" , 1 );
39+ assertBackReference ("(1)\\ \\ 7" , 7 );
40+ assertBackReference ("(1)\\ \\ 11" , 1 );
41+ assertBackReference ("(1)(2)(3)(4)(5)(6)(7)(8)(9)(a)\\ \\ 11" , 1 );
42+ assertBackReference ("(1)(2)(3)(4)(5)(6)(7)(8)(9)(a)(b)\\ \\ 11" , 11 );
43+ assertBackReference ("(1)(2)(3)(4)(5)(6)(7)(8)(9)(a)(b)(c)\\ \\ 11" , 11 );
44+ assertBackReference ("(((((5)(6)(7)(8)(9)(a)\\ \\ 11)?)+)*)" , 1 );
45+ assertBackReference ("(((((5)(6)(7)(8)(9)(a)(b)\\ \\ 11)?)+)*)" , 11 );
46+
47+ RegexTree regex = assertSuccessfulParse ("\\ \\ 42." );
4948 assertThat (regex .is (RegexTree .Kind .SEQUENCE )).isTrue ();
5049 SequenceTree seq = (SequenceTree ) regex ;
5150 assertThat (seq .getItems ()).hasSize (3 );
5251 assertThat (seq .getItems ().get (0 )).isInstanceOf (BackReferenceTree .class );
5352 assertThat (seq .getItems ().get (1 )).isInstanceOf (CharacterTree .class );
5453 assertThat (seq .getItems ().get (2 )).isInstanceOf (DotTree .class );
5554
56- RegexTree regex2 = assertSuccessfulParse (escapeJava ( "\\ 42a" ) );
55+ RegexTree regex2 = assertSuccessfulParse ("\\ \\ 42a" );
5756 assertThat (regex2 .is (RegexTree .Kind .SEQUENCE )).isTrue ();
5857 SequenceTree seq2 = (SequenceTree ) regex2 ;
5958 assertThat (seq2 .getItems ()).hasSize (3 );
@@ -115,33 +114,33 @@ private void assertBackReferenceGroupAssignment(String pattern, RegexFeature...
115114
116115 @ Test
117116 void failingInvalidBackReferences () {
118- assertFailParsing (escapeJava ( "\\ ko" ) , "Expected '<', but found 'o'" , RegexFeature .JAVA_SYNTAX_GROUP_NAME );
119- assertFailParsing (escapeJava ( "\\ k<" ) , "Expected a group name, but found the end of the regex" , RegexFeature .JAVA_SYNTAX_GROUP_NAME );
120- assertFailParsing (escapeJava ( "\\ k<o" ) , "Expected '>', but found the end of the regex" , RegexFeature .JAVA_SYNTAX_GROUP_NAME );
121- assertFailParsing (escapeJava ( "\\ k<>" ) , "Expected a group name, but found '>'" , RegexFeature .JAVA_SYNTAX_GROUP_NAME );
122- assertFailParsing (escapeJava ( "\\ ko" ) , "Expected '<' or ''', but found 'o'" , RegexFeature .DOTNET_SYNTAX_GROUP_NAME );
123- assertFailParsing (escapeJava ( "\\ go" ) , "Expected '{', but found 'o'" , RegexFeature .PERL_SYNTAX_GROUP_NAME );
124- assertFailParsing (escapeJava ( "\\ ko" ) , "Expected '{', but found 'o'" , RegexFeature .PERL_SYNTAX_GROUP_NAME );
117+ assertFailParsing ("\\ \\ ko" , "Expected '<', but found 'o'" , RegexFeature .JAVA_SYNTAX_GROUP_NAME );
118+ assertFailParsing ("\\ \\ k<" , "Expected a group name, but found the end of the regex" , RegexFeature .JAVA_SYNTAX_GROUP_NAME );
119+ assertFailParsing ("\\ \\ k<o" , "Expected '>', but found the end of the regex" , RegexFeature .JAVA_SYNTAX_GROUP_NAME );
120+ assertFailParsing ("\\ \\ k<>" , "Expected a group name, but found '>'" , RegexFeature .JAVA_SYNTAX_GROUP_NAME );
121+ assertFailParsing ("\\ \\ ko" , "Expected '<' or ''', but found 'o'" , RegexFeature .DOTNET_SYNTAX_GROUP_NAME );
122+ assertFailParsing ("\\ \\ go" , "Expected '{', but found 'o'" , RegexFeature .PERL_SYNTAX_GROUP_NAME );
123+ assertFailParsing ("\\ \\ ko" , "Expected '{', but found 'o'" , RegexFeature .PERL_SYNTAX_GROUP_NAME );
125124 assertFailParsing ("(?P=)" , "Expected a group name, but found ')'" , RegexFeature .PYTHON_SYNTAX_GROUP_NAME );
126125 assertFailParsing ("(?P=name)" , "Expected flag or ':' or ')', but found 'P'" );
127126 }
128127
129128 @ Test
130129 void failingInvalidWhenWrongFeatureIsSupported () {
131- assertFailParsing (escapeJava ( "\\ k<name>" ) , "Expected '{', but found '<'" , RegexFeature .PERL_SYNTAX_GROUP_NAME );
132- assertFailParsing (escapeJava ( "\\ k'name'" ) , "Expected '<', but found '''" , RegexFeature .JAVA_SYNTAX_GROUP_NAME );
133- assertFailParsing (escapeJava ( "\\ k{name}" ) , "Expected '<', but found '{'" , RegexFeature .JAVA_SYNTAX_GROUP_NAME );
130+ assertFailParsing ("\\ \\ k<name>" , "Expected '{', but found '<'" , RegexFeature .PERL_SYNTAX_GROUP_NAME );
131+ assertFailParsing ("\\ \\ k'name'" , "Expected '<', but found '''" , RegexFeature .JAVA_SYNTAX_GROUP_NAME );
132+ assertFailParsing ("\\ \\ k{name}" , "Expected '<', but found '{'" , RegexFeature .JAVA_SYNTAX_GROUP_NAME );
134133 }
135134
136135 @ Test
137136 void noFailingWhenFeatureNotSupported () {
138- assertKind (RegexTree .Kind .SEQUENCE , assertSuccessfulParse (escapeJava ( "\\ ko" ) ));
139- assertKind (RegexTree .Kind .SEQUENCE , assertSuccessfulParse (escapeJava ( "\\ k<" ) ));
140- assertKind (RegexTree .Kind .SEQUENCE , assertSuccessfulParse (escapeJava ( "\\ k<o" ) ));
141- assertKind (RegexTree .Kind .SEQUENCE , assertSuccessfulParse (escapeJava ( "\\ k<>" ) ));
142- assertKind (RegexTree .Kind .SEQUENCE , assertSuccessfulParse (escapeJava ( "\\ ko" ) ));
143- assertKind (RegexTree .Kind .SEQUENCE , assertSuccessfulParse (escapeJava ( "\\ go" ) ));
144- assertKind (RegexTree .Kind .SEQUENCE , assertSuccessfulParse (escapeJava ( "\\ ko" ) ));
137+ assertKind (RegexTree .Kind .SEQUENCE , assertSuccessfulParse ("\\ \\ ko" ));
138+ assertKind (RegexTree .Kind .SEQUENCE , assertSuccessfulParse ("\\ \\ k<" ));
139+ assertKind (RegexTree .Kind .SEQUENCE , assertSuccessfulParse ("\\ \\ k<o" ));
140+ assertKind (RegexTree .Kind .SEQUENCE , assertSuccessfulParse ("\\ \\ k<>" ));
141+ assertKind (RegexTree .Kind .SEQUENCE , assertSuccessfulParse ("\\ \\ ko" ));
142+ assertKind (RegexTree .Kind .SEQUENCE , assertSuccessfulParse ("\\ \\ go" ));
143+ assertKind (RegexTree .Kind .SEQUENCE , assertSuccessfulParse ("\\ \\ ko" ));
145144 }
146145
147146 private static void assertBackReference (String regex , String expectedGroupName ) {
0 commit comments