@@ -60,6 +60,159 @@ public void ImplicitExpressionAcceptsInnerInsertions()
60
60
factory . Markup ( " baz" ) ) , additionalFlags : PartialParseResult . Provisional ) ;
61
61
}
62
62
63
+ [ Fact ]
64
+ public void ImplicitExpressionAcceptsWholeIdentifierReplacement ( )
65
+ {
66
+ // Arrange
67
+ SpanFactory factory = SpanFactory . CreateCsHtml ( ) ;
68
+ StringTextBuffer old = new StringTextBuffer ( "foo @date baz" ) ;
69
+ StringTextBuffer changed = new StringTextBuffer ( "foo @DateTime baz" ) ;
70
+
71
+ // Act and Assert
72
+ RunPartialParseTest ( new TextChange ( 5 , 4 , old , 8 , changed ) ,
73
+ new MarkupBlock (
74
+ factory . Markup ( "foo " ) ,
75
+ new ExpressionBlock (
76
+ factory . CodeTransition ( ) ,
77
+ factory . Code ( "DateTime" ) . AsImplicitExpression ( CSharpCodeParser . DefaultKeywords ) . Accepts ( AcceptedCharacters . NonWhiteSpace ) ) ,
78
+ factory . Markup ( " baz" ) ) ) ;
79
+ }
80
+
81
+ [ Fact ]
82
+ public void ImplicitExpressionRejectsWholeIdentifierReplacementToKeyword ( )
83
+ {
84
+ // Arrange
85
+ RazorEngineHost host = CreateHost ( ) ;
86
+ RazorEditorParser parser = new RazorEditorParser ( host , @"C:\This\Is\A\Test\Path" ) ;
87
+
88
+ using ( TestParserManager manager = new TestParserManager ( parser ) )
89
+ {
90
+ StringTextBuffer old = new StringTextBuffer ( "foo @date baz" ) ;
91
+ StringTextBuffer changed = new StringTextBuffer ( "foo @if baz" ) ;
92
+ TextChange textChange = new TextChange ( 5 , 4 , old , 2 , changed ) ;
93
+ manager . InitializeWithDocument ( old ) ;
94
+
95
+ // Act
96
+ PartialParseResult result = manager . CheckForStructureChangesAndWait ( textChange ) ;
97
+
98
+ // Assert
99
+ Assert . Equal ( PartialParseResult . Rejected , result ) ;
100
+ Assert . Equal ( 2 , manager . ParseCount ) ;
101
+ }
102
+ }
103
+
104
+ [ Fact ]
105
+ public void ImplicitExpressionRejectsWholeIdentifierReplacementToDirective ( )
106
+ {
107
+ // Arrange
108
+ RazorEngineHost host = CreateHost ( ) ;
109
+ RazorEditorParser parser = new RazorEditorParser ( host , @"C:\This\Is\A\Test\Path" ) ;
110
+
111
+ using ( var manager = new TestParserManager ( parser ) )
112
+ {
113
+ StringTextBuffer old = new StringTextBuffer ( "foo @date baz" ) ;
114
+ StringTextBuffer changed = new StringTextBuffer ( "foo @inherits baz" ) ;
115
+ TextChange textChange = new TextChange ( 5 , 4 , old , 8 , changed ) ;
116
+ manager . InitializeWithDocument ( old ) ;
117
+
118
+ // Act
119
+ PartialParseResult result = manager . CheckForStructureChangesAndWait ( textChange ) ;
120
+
121
+ // Assert
122
+ Assert . Equal ( PartialParseResult . Rejected | PartialParseResult . SpanContextChanged , result ) ;
123
+ Assert . Equal ( 2 , manager . ParseCount ) ;
124
+ }
125
+ }
126
+
127
+ [ Fact ]
128
+ public void ImplicitExpressionAcceptsPrefixIdentifierReplacements_SingleSymbol ( )
129
+ {
130
+ // Arrange
131
+ SpanFactory factory = SpanFactory . CreateCsHtml ( ) ;
132
+ StringTextBuffer old = new StringTextBuffer ( "foo @dTime baz" ) ;
133
+ StringTextBuffer changed = new StringTextBuffer ( "foo @DateTime baz" ) ;
134
+
135
+ // Act and Assert
136
+ RunPartialParseTest ( new TextChange ( 5 , 1 , old , 4 , changed ) ,
137
+ new MarkupBlock (
138
+ factory . Markup ( "foo " ) ,
139
+ new ExpressionBlock (
140
+ factory . CodeTransition ( ) ,
141
+ factory . Code ( "DateTime" ) . AsImplicitExpression ( CSharpCodeParser . DefaultKeywords ) . Accepts ( AcceptedCharacters . NonWhiteSpace ) ) ,
142
+ factory . Markup ( " baz" ) ) ) ;
143
+ }
144
+
145
+ [ Fact ]
146
+ public void ImplicitExpressionAcceptsPrefixIdentifierReplacements_MultipleSymbols ( )
147
+ {
148
+ // Arrange
149
+ SpanFactory factory = SpanFactory . CreateCsHtml ( ) ;
150
+ StringTextBuffer old = new StringTextBuffer ( "foo @dTime.Now baz" ) ;
151
+ StringTextBuffer changed = new StringTextBuffer ( "foo @DateTime.Now baz" ) ;
152
+
153
+ // Act and Assert
154
+ RunPartialParseTest ( new TextChange ( 5 , 1 , old , 4 , changed ) ,
155
+ new MarkupBlock (
156
+ factory . Markup ( "foo " ) ,
157
+ new ExpressionBlock (
158
+ factory . CodeTransition ( ) ,
159
+ factory . Code ( "DateTime.Now" ) . AsImplicitExpression ( CSharpCodeParser . DefaultKeywords ) . Accepts ( AcceptedCharacters . NonWhiteSpace ) ) ,
160
+ factory . Markup ( " baz" ) ) ) ;
161
+ }
162
+
163
+ [ Fact ]
164
+ public void ImplicitExpressionAcceptsSuffixIdentifierReplacements_SingleSymbol ( )
165
+ {
166
+ // Arrange
167
+ SpanFactory factory = SpanFactory . CreateCsHtml ( ) ;
168
+ StringTextBuffer old = new StringTextBuffer ( "foo @Datet baz" ) ;
169
+ StringTextBuffer changed = new StringTextBuffer ( "foo @DateTime baz" ) ;
170
+
171
+ // Act and Assert
172
+ RunPartialParseTest ( new TextChange ( 9 , 1 , old , 4 , changed ) ,
173
+ new MarkupBlock (
174
+ factory . Markup ( "foo " ) ,
175
+ new ExpressionBlock (
176
+ factory . CodeTransition ( ) ,
177
+ factory . Code ( "DateTime" ) . AsImplicitExpression ( CSharpCodeParser . DefaultKeywords ) . Accepts ( AcceptedCharacters . NonWhiteSpace ) ) ,
178
+ factory . Markup ( " baz" ) ) ) ;
179
+ }
180
+
181
+ [ Fact ]
182
+ public void ImplicitExpressionAcceptsSuffixIdentifierReplacements_MultipleSymbols ( )
183
+ {
184
+ // Arrange
185
+ SpanFactory factory = SpanFactory . CreateCsHtml ( ) ;
186
+ StringTextBuffer old = new StringTextBuffer ( "foo @DateTime.n baz" ) ;
187
+ StringTextBuffer changed = new StringTextBuffer ( "foo @DateTime.Now baz" ) ;
188
+
189
+ // Act and Assert
190
+ RunPartialParseTest ( new TextChange ( 14 , 1 , old , 3 , changed ) ,
191
+ new MarkupBlock (
192
+ factory . Markup ( "foo " ) ,
193
+ new ExpressionBlock (
194
+ factory . CodeTransition ( ) ,
195
+ factory . Code ( "DateTime.Now" ) . AsImplicitExpression ( CSharpCodeParser . DefaultKeywords ) . Accepts ( AcceptedCharacters . NonWhiteSpace ) ) ,
196
+ factory . Markup ( " baz" ) ) ) ;
197
+ }
198
+
199
+ [ Fact ]
200
+ public void ImplicitExpressionAcceptsSurroundedIdentifierReplacements ( )
201
+ {
202
+ // Arrange
203
+ SpanFactory factory = SpanFactory . CreateCsHtml ( ) ;
204
+ StringTextBuffer old = new StringTextBuffer ( "foo @DateTime.n.ToString() baz" ) ;
205
+ StringTextBuffer changed = new StringTextBuffer ( "foo @DateTime.Now.ToString() baz" ) ;
206
+
207
+ // Act and Assert
208
+ RunPartialParseTest ( new TextChange ( 14 , 1 , old , 3 , changed ) ,
209
+ new MarkupBlock (
210
+ factory . Markup ( "foo " ) ,
211
+ new ExpressionBlock (
212
+ factory . CodeTransition ( ) ,
213
+ factory . Code ( "DateTime.Now.ToString()" ) . AsImplicitExpression ( CSharpCodeParser . DefaultKeywords ) . Accepts ( AcceptedCharacters . NonWhiteSpace ) ) ,
214
+ factory . Markup ( " baz" ) ) ) ;
215
+ }
63
216
64
217
[ Fact ]
65
218
public void ImplicitExpressionAcceptsDotlessCommitInsertionsInStatementBlockAfterIdentifiers ( )
@@ -255,6 +408,61 @@ public void ImplicitExpressionProvisionallyAcceptsDotlessCommitInsertionsAfterId
255
408
}
256
409
}
257
410
411
+ [ Fact ]
412
+ public void ImplicitExpressionProvisionallyAcceptsCaseInsensitiveDotlessCommitInsertions_NewRoslynIntegration ( )
413
+ {
414
+ SpanFactory factory = SpanFactory . CreateCsHtml ( ) ;
415
+ StringTextBuffer old = new StringTextBuffer ( "foo @date baz" ) ;
416
+ StringTextBuffer changed = new StringTextBuffer ( "foo @date. baz" ) ;
417
+ TextChange textChange = new TextChange ( 9 , 0 , old , 1 , changed ) ;
418
+ using ( TestParserManager manager = CreateParserManager ( ) )
419
+ {
420
+ Action < TextChange , PartialParseResult , string > applyAndVerifyPartialChange = ( changeToApply , expectedResult , expectedCode ) =>
421
+ {
422
+ PartialParseResult result = manager . CheckForStructureChangesAndWait ( textChange ) ;
423
+
424
+ // Assert
425
+ Assert . Equal ( expectedResult , result ) ;
426
+ Assert . Equal ( 1 , manager . ParseCount ) ;
427
+
428
+ ParserTestBase . EvaluateParseTree ( manager . Parser . CurrentParseTree , new MarkupBlock (
429
+ factory . Markup ( "foo " ) ,
430
+ new ExpressionBlock (
431
+ factory . CodeTransition ( ) ,
432
+ factory . Code ( expectedCode ) . AsImplicitExpression ( CSharpCodeParser . DefaultKeywords ) . Accepts ( AcceptedCharacters . NonWhiteSpace ) ) ,
433
+ factory . Markup ( " baz" ) ) ) ;
434
+ } ;
435
+
436
+ manager . InitializeWithDocument ( textChange . OldBuffer ) ;
437
+
438
+ // This is the process of a dotless commit when doing "." insertions to commit intellisense changes.
439
+
440
+ // @date => @date.
441
+ applyAndVerifyPartialChange ( textChange , PartialParseResult . Accepted | PartialParseResult . Provisional , "date." ) ;
442
+
443
+ old = changed ;
444
+ changed = new StringTextBuffer ( "foo @date baz" ) ;
445
+ textChange = new TextChange ( 9 , 1 , old , 0 , changed ) ;
446
+
447
+ // @date. => @date
448
+ applyAndVerifyPartialChange ( textChange , PartialParseResult . Accepted , "date" ) ;
449
+
450
+ old = changed ;
451
+ changed = new StringTextBuffer ( "foo @DateTime baz" ) ;
452
+ textChange = new TextChange ( 5 , 4 , old , 8 , changed ) ;
453
+
454
+ // @date => @DateTime
455
+ applyAndVerifyPartialChange ( textChange , PartialParseResult . Accepted , "DateTime" ) ;
456
+
457
+ old = changed ;
458
+ changed = new StringTextBuffer ( "foo @DateTime. baz" ) ;
459
+ textChange = new TextChange ( 13 , 0 , old , 1 , changed ) ;
460
+
461
+ // @DateTime => @DateTime.
462
+ applyAndVerifyPartialChange ( textChange , PartialParseResult . Accepted | PartialParseResult . Provisional , "DateTime." ) ;
463
+ }
464
+ }
465
+
258
466
[ Fact ]
259
467
public void ImplicitExpressionProvisionallyAcceptsDeleteOfIdentifierPartsIfDotRemains ( )
260
468
{
0 commit comments