1
1
using NHibernate . Engine . Query ;
2
+ using NSubstitute ;
2
3
using NUnit . Framework ;
3
4
4
5
namespace NHibernate . Test . EngineTest
@@ -19,8 +20,8 @@ FROM tablea
19
20
20
21
var recognizer = new ParamLocationRecognizer ( ) ;
21
22
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" ) ) ;
24
25
}
25
26
26
27
[ Test ]
@@ -30,14 +31,14 @@ public void CanFindParameterAfterInlineComment()
30
31
@"
31
32
SELECT id
32
33
FROM tablea
33
- -- Comment with ' number 1
34
+ -- Comment with ' : number 1
34
35
WHERE Name = :name
35
36
ORDER BY Name" ;
36
37
37
38
var recognizer = new ParamLocationRecognizer ( ) ;
38
39
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" ) ) ;
41
42
}
42
43
43
44
[ Test ]
@@ -54,9 +55,41 @@ FROM tablea
54
55
55
56
var recognizer = new ParamLocationRecognizer ( ) ;
56
57
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" ) ) ) ;
60
93
}
61
94
}
62
95
}
0 commit comments