11using NHibernate . Engine . Query ;
2+ using NSubstitute ;
23using NUnit . Framework ;
34
45namespace NHibernate . Test . EngineTest
@@ -19,8 +20,8 @@ FROM tablea
1920
2021 var recognizer = new ParamLocationRecognizer ( ) ;
2122 ParameterParser . Parse ( query , recognizer ) ;
22- ParamLocationRecognizer . NamedParameterDescription p ;
23- Assert . DoesNotThrow ( ( ) => p = recognizer . NamedParameterDescriptionMap [ "name" ] ) ;
23+ Assert . That ( recognizer . NamedParameterDescriptionMap , Has . Count . EqualTo ( 1 ) ) ;
24+ Assert . That ( recognizer . NamedParameterDescriptionMap , Contains . Key ( "name" ) ) ;
2425 }
2526
2627 [ Test ]
@@ -30,14 +31,14 @@ public void CanFindParameterAfterInlineComment()
3031 @"
3132SELECT id
3233FROM tablea
33- -- Comment with ' number 1
34+ -- Comment with ' : number 1
3435WHERE Name = :name
3536ORDER BY Name" ;
3637
3738 var recognizer = new ParamLocationRecognizer ( ) ;
3839 ParameterParser . Parse ( query , recognizer ) ;
39- ParamLocationRecognizer . NamedParameterDescription p ;
40- Assert . DoesNotThrow ( ( ) => p = recognizer . NamedParameterDescriptionMap [ "name" ] ) ;
40+ Assert . That ( recognizer . NamedParameterDescriptionMap , Has . Count . EqualTo ( 1 ) ) ;
41+ Assert . That ( recognizer . NamedParameterDescriptionMap , Contains . Key ( "name" ) ) ;
4142 }
4243
4344 [ Test ]
@@ -54,9 +55,41 @@ FROM tablea
5455
5556 var recognizer = new ParamLocationRecognizer ( ) ;
5657 ParameterParser . Parse ( query , recognizer ) ;
57- ParamLocationRecognizer . NamedParameterDescription p ;
58- Assert . DoesNotThrow ( ( ) => p = recognizer . NamedParameterDescriptionMap [ "name" ] ) ;
59- Assert . DoesNotThrow ( ( ) => p = recognizer . NamedParameterDescriptionMap [ "pizza" ] ) ;
58+ Assert . That ( recognizer . NamedParameterDescriptionMap , Has . Count . EqualTo ( 2 ) ) ;
59+ Assert . That ( recognizer . NamedParameterDescriptionMap , Contains . Key ( "name" ) ) ;
60+ Assert . That ( recognizer . NamedParameterDescriptionMap , Contains . Key ( "pizza" ) ) ;
61+ }
62+
63+ [ Test ]
64+ public void IgnoresCommentsWithinQuotes ( )
65+ {
66+ string query =
67+ @"
68+ SELECT id
69+ FROM tablea WHERE Name = '
70+ -- :comment1
71+ ' OR Name = '
72+ /* :comment2 */
73+ '
74+ -- :comment3
75+ /* :comment4 */
76+ ORDER BY Name + :pizza -- :comment5" ;
77+
78+ var recognizer = Substitute . For < ParameterParser . IRecognizer > ( ) ;
79+ ParameterParser . Parse ( query , recognizer ) ;
80+
81+ //Only one parameter in the query
82+ recognizer . ReceivedWithAnyArgs ( 1 ) . NamedParameter ( default , default ) ;
83+ recognizer . Received ( 1 ) . NamedParameter ( "pizza" , Arg . Any < int > ( ) ) ;
84+
85+ //comment1 and comment2 are not really comments and therefore not parsed as blocks
86+ recognizer . DidNotReceive ( ) . Other ( Arg . Is < string > ( x => x . Contains ( "comment1" ) ) ) ;
87+ recognizer . DidNotReceive ( ) . Other ( Arg . Is < string > ( x => x . Contains ( "comment2" ) ) ) ;
88+
89+ //comment 3-5 are actual comments and therefore parsed as blocks
90+ recognizer . Received ( 1 ) . Other ( Arg . Is < string > ( x => x . StartsWith ( "-- :comment3" ) ) ) ;
91+ recognizer . Received ( 1 ) . Other ( "/* :comment4 */" ) ;
92+ recognizer . Received ( 1 ) . Other ( Arg . Is < string > ( x => x . StartsWith ( "-- :comment5" ) ) ) ;
6093 }
6194 }
6295}
0 commit comments