@@ -184,6 +184,7 @@ public void TryParseFormValues_SingleSegmentWorks(Encoding encoding)
184
184
var formReader = new FormPipeReader ( null , encoding ) ;
185
185
186
186
formReader . ParseFormValues ( ref readOnlySequence , ref accumulator , isFinalBlock : true ) ;
187
+ Assert . True ( readOnlySequence . IsEmpty ) ;
187
188
188
189
Assert . Equal ( 2 , accumulator . KeyCount ) ;
189
190
var dict = accumulator . GetResults ( ) ;
@@ -201,6 +202,7 @@ public void TryParseFormValues_Works(Encoding encoding)
201
202
202
203
var formReader = new FormPipeReader ( null , encoding ) ;
203
204
formReader . ParseFormValues ( ref readOnlySequence , ref accumulator , isFinalBlock : true ) ;
205
+ Assert . True ( readOnlySequence . IsEmpty ) ;
204
206
205
207
Assert . Equal ( 3 , accumulator . KeyCount ) ;
206
208
var dict = accumulator . GetResults ( ) ;
@@ -219,6 +221,7 @@ public void TryParseFormValues_SplitAcrossSegmentsWorks(Encoding encoding)
219
221
220
222
var formReader = new FormPipeReader ( null , encoding ) ;
221
223
formReader . ParseFormValues ( ref readOnlySequence , ref accumulator , isFinalBlock : true ) ;
224
+ Assert . True ( readOnlySequence . IsEmpty ) ;
222
225
223
226
Assert . Equal ( 3 , accumulator . KeyCount ) ;
224
227
var dict = accumulator . GetResults ( ) ;
@@ -237,6 +240,7 @@ public void TryParseFormValues_MultiSegmentWithArrayPoolAcrossSegmentsWorks(Enco
237
240
238
241
var formReader = new FormPipeReader ( null , encoding ) ;
239
242
formReader . ParseFormValues ( ref readOnlySequence , ref accumulator , isFinalBlock : true ) ;
243
+ Assert . True ( readOnlySequence . IsEmpty ) ;
240
244
241
245
Assert . Equal ( 2 , accumulator . KeyCount ) ;
242
246
var dict = accumulator . GetResults ( ) ;
@@ -254,6 +258,7 @@ public void TryParseFormValues_MultiSegmentSplitAcrossSegmentsWithPlusesWorks(En
254
258
255
259
var formReader = new FormPipeReader ( null , encoding ) ;
256
260
formReader . ParseFormValues ( ref readOnlySequence , ref accumulator , isFinalBlock : true ) ;
261
+ Assert . True ( readOnlySequence . IsEmpty ) ;
257
262
258
263
Assert . Equal ( 3 , accumulator . KeyCount ) ;
259
264
var dict = accumulator . GetResults ( ) ;
@@ -272,6 +277,7 @@ public void TryParseFormValues_DecodedPlusesWorks(Encoding encoding)
272
277
273
278
var formReader = new FormPipeReader ( null , encoding ) ;
274
279
formReader . ParseFormValues ( ref readOnlySequence , ref accumulator , isFinalBlock : true ) ;
280
+ Assert . True ( readOnlySequence . IsEmpty ) ;
275
281
276
282
Assert . Equal ( 3 , accumulator . KeyCount ) ;
277
283
var dict = accumulator . GetResults ( ) ;
@@ -290,13 +296,31 @@ public void TryParseFormValues_SplitAcrossSegmentsThatNeedDecodingWorks(Encoding
290
296
291
297
var formReader = new FormPipeReader ( null , encoding ) ;
292
298
formReader . ParseFormValues ( ref readOnlySequence , ref accumulator , isFinalBlock : true ) ;
299
+ Assert . True ( readOnlySequence . IsEmpty ) ;
293
300
294
301
Assert . Equal ( 2 , accumulator . KeyCount ) ;
295
302
var dict = accumulator . GetResults ( ) ;
296
303
Assert . Equal ( "\" %-.<>\\ ^_`{|}~" , dict [ "\" %-.<>\\ ^_`{|}~" ] ) ;
297
304
Assert . Equal ( "wow" , dict [ "\" %-.<>\\ ^_`{|}" ] ) ;
298
305
}
299
306
307
+ [ Fact ]
308
+ public void TryParseFormValues_MultiSegmentFastPathWorks ( )
309
+ {
310
+ var readOnlySequence = ReadOnlySequenceFactory . CreateSegments ( Encoding . UTF8 . GetBytes ( "foo=bar&" ) , Encoding . UTF8 . GetBytes ( "baz=boo" ) ) ;
311
+
312
+ KeyValueAccumulator accumulator = default ;
313
+
314
+ var formReader = new FormPipeReader ( null ) ;
315
+ formReader . ParseFormValues ( ref readOnlySequence , ref accumulator , isFinalBlock : true ) ;
316
+ Assert . True ( readOnlySequence . IsEmpty ) ;
317
+
318
+ Assert . Equal ( 2 , accumulator . KeyCount ) ;
319
+ var dict = accumulator . GetResults ( ) ;
320
+ Assert . Equal ( "bar" , dict [ "foo" ] ) ;
321
+ Assert . Equal ( "boo" , dict [ "baz" ] ) ;
322
+ }
323
+
300
324
[ Fact ]
301
325
public void TryParseFormValues_ExceedKeyLengthThrows ( )
302
326
{
@@ -411,6 +435,7 @@ public void ParseFormWithIncompleteKeyWhenIsFinalBlockSucceeds(ReadOnlySequence<
411
435
} ;
412
436
413
437
formReader . ParseFormValues ( ref readOnlySequence , ref accumulator , isFinalBlock : true ) ;
438
+ Assert . True ( readOnlySequence . IsEmpty ) ;
414
439
415
440
IDictionary < string , StringValues > values = accumulator . GetResults ( ) ;
416
441
Assert . Contains ( "fo" , values ) ;
@@ -431,6 +456,7 @@ public void ParseFormWithIncompleteValueWhenIsFinalBlockSucceeds(ReadOnlySequenc
431
456
} ;
432
457
433
458
formReader . ParseFormValues ( ref readOnlySequence , ref accumulator , isFinalBlock : true ) ;
459
+ Assert . True ( readOnlySequence . IsEmpty ) ;
434
460
435
461
IDictionary < string , StringValues > values = accumulator . GetResults ( ) ;
436
462
Assert . Contains ( "fo" , values ) ;
0 commit comments