@@ -286,5 +286,58 @@ public void UnbalancedGroupCorrectlyMarksTrailingParenAsError()
286286                Assert . AreEqual ( expected [ i ] ,  subexpressions [ i ] ) ; 
287287            } 
288288        } 
289+ 
290+         [ Category ( "RegexAssistant" ) ] 
291+         [ Test ] 
292+         public  void  EscapedParensGroupIsParsedProperly ( ) 
293+         { 
294+             var  expected  =  new  List < IRegularExpression > ( ) 
295+             { 
296+                 new  SingleAtomExpression ( new  Literal ( "\\ (" ,  Quantifier . None ) ) , 
297+                 new  SingleAtomExpression ( new  Group ( new  ConcatenatedExpression ( new  IRegularExpression [ ] { 
298+                     new  SingleAtomExpression ( new  Literal ( "\\ (" ,  Quantifier . None ) ) , 
299+                     new  SingleAtomExpression ( new  Literal ( "\\ )" ,  Quantifier . None ) ) , 
300+                 } . ToList ( ) ) , "(\\ (\\ ))" ,  Quantifier . None ) ) , 
301+                 new  SingleAtomExpression ( new  Literal ( "\\ )" ,  Quantifier . None ) ) , 
302+             } ; 
303+             var  expression  =  VBRegexParser . Parse ( @"\((\(\))\)" ) ; 
304+             Assert . IsInstanceOf ( typeof ( ConcatenatedExpression ) ,  expression ) ; 
305+             var  subexpressions  =  ( expression  as  ConcatenatedExpression ) . Subexpressions ; 
306+             Assert . AreEqual ( expected . Count ,  subexpressions . Count ) ; 
307+             for  ( var  i  =  0 ;  i  <  expected . Count ;  i ++ ) 
308+             { 
309+                 Assert . AreEqual ( expected [ i ] ,  subexpressions [ i ] ) ; 
310+             } 
311+         } 
312+ 
313+         [ Category ( "RegexAssistant" ) ] 
314+         [ Test ] 
315+         public  void  IncorrectEscapeSequenceIsGroupSubExpression ( ) 
316+         { 
317+             var  expected  =  new  List < IRegularExpression > 
318+             { 
319+                 new  ErrorExpression ( "\\ " ) , 
320+                 new  SingleAtomExpression ( new  Literal ( "m" ,  Quantifier . None ) ) 
321+             } ; 
322+             var  expression  =  VBRegexParser . Parse ( "(\\ m)" ) ; 
323+             Assert . IsInstanceOf ( typeof ( SingleAtomExpression ) ,  expression ) ; 
324+             var  subexpressions  =  ( ( ( expression  as  SingleAtomExpression ) . Atom  as  Group ) ? . Subexpression  as  ConcatenatedExpression ) ? . Subexpressions  ??  new  List < IRegularExpression > ( ) ; 
325+             Assert . AreEqual ( expected . Count ,  subexpressions . Count ) ; 
326+             for  ( var  i  =  0 ;  i  <  expected . Count ;  i ++ ) 
327+             { 
328+                 Assert . AreEqual ( expected [ i ] ,  subexpressions [ i ] ) ; 
329+             } 
330+         } 
331+ 
332+         [ Category ( "RegexAssistant" ) ] 
333+         [ Test ] 
334+         public  void  CorrectEscapeSequenceIsGroupSubExpression ( ) 
335+         { 
336+             var  expression  =  VBRegexParser . Parse ( @"(\\)" ) ; 
337+             Assert . IsInstanceOf ( typeof ( SingleAtomExpression ) ,  expression ) ; 
338+             var  inner  =  ( ( ( expression  as  SingleAtomExpression ) . Atom  as  Group ) ? . Subexpression  as  SingleAtomExpression ) ; 
339+             Assert . IsNotNull ( inner ) ; 
340+             Assert . AreEqual ( new  SingleAtomExpression ( new  Literal ( "\\ \\ " ,  Quantifier . None ) ) ,  inner ) ; 
341+         } 
289342    } 
290343} 
0 commit comments