@@ -57,7 +57,7 @@ public static TheoryData<SetCookieHeaderValue, string> SetCookieHeaderDataSet
57
57
{
58
58
SameSite = SameSiteMode . None ,
59
59
} ;
60
- dataset . Add ( header7 , "name7=value7" ) ;
60
+ dataset . Add ( header7 , "name7=value7; samesite=none " ) ;
61
61
62
62
63
63
return dataset ;
@@ -155,9 +155,20 @@ public static TheoryData<IList<SetCookieHeaderValue>, string[]> ListOfSetCookieH
155
155
{
156
156
SameSite = SameSiteMode . Strict
157
157
} ;
158
- var string6a = "name6=value6; samesite" ;
159
- var string6b = "name6=value6; samesite=Strict" ;
160
- var string6c = "name6=value6; samesite=invalid" ;
158
+ var string6 = "name6=value6; samesite=Strict" ;
159
+
160
+ var header7 = new SetCookieHeaderValue ( "name7" , "value7" )
161
+ {
162
+ SameSite = SameSiteMode . None
163
+ } ;
164
+ var string7 = "name7=value7; samesite=None" ;
165
+
166
+ var header8 = new SetCookieHeaderValue ( "name8" , "value8" )
167
+ {
168
+ SameSite = ( SameSiteMode ) ( - 1 ) // Unspecified
169
+ } ;
170
+ var string8a = "name8=value8; samesite" ;
171
+ var string8b = "name8=value8; samesite=invalid" ;
161
172
162
173
dataset . Add ( new [ ] { header1 } . ToList ( ) , new [ ] { string1 } ) ;
163
174
dataset . Add ( new [ ] { header1 , header1 } . ToList ( ) , new [ ] { string1 , string1 } ) ;
@@ -170,9 +181,10 @@ public static TheoryData<IList<SetCookieHeaderValue>, string[]> ListOfSetCookieH
170
181
dataset . Add ( new [ ] { header1 , header2 , header3 , header4 } . ToList ( ) , new [ ] { string . Join ( "," , string1 , string2 , string3 , string4 ) } ) ;
171
182
dataset . Add ( new [ ] { header5 } . ToList ( ) , new [ ] { string5a } ) ;
172
183
dataset . Add ( new [ ] { header5 } . ToList ( ) , new [ ] { string5b } ) ;
173
- dataset . Add ( new [ ] { header6 } . ToList ( ) , new [ ] { string6a } ) ;
174
- dataset . Add ( new [ ] { header6 } . ToList ( ) , new [ ] { string6b } ) ;
175
- dataset . Add ( new [ ] { header6 } . ToList ( ) , new [ ] { string6c } ) ;
184
+ dataset . Add ( new [ ] { header6 } . ToList ( ) , new [ ] { string6 } ) ;
185
+ dataset . Add ( new [ ] { header7 } . ToList ( ) , new [ ] { string7 } ) ;
186
+ dataset . Add ( new [ ] { header8 } . ToList ( ) , new [ ] { string8a } ) ;
187
+ dataset . Add ( new [ ] { header8 } . ToList ( ) , new [ ] { string8b } ) ;
176
188
177
189
return dataset ;
178
190
}
@@ -301,6 +313,28 @@ public void SetCookieHeaderValue_ToString(SetCookieHeaderValue input, string exp
301
313
Assert . Equal ( expectedValue , input . ToString ( ) ) ;
302
314
}
303
315
316
+ [ Fact ]
317
+ public void SetCookieHeaderValue_ToString_SameSite2016Compat ( )
318
+ {
319
+ SetCookieHeaderValue . UseSameSite2016Compat = true ;
320
+
321
+ var input = new SetCookieHeaderValue ( "name" , "value" )
322
+ {
323
+ SameSite = SameSiteMode . None ,
324
+ } ;
325
+
326
+ Assert . Equal ( "name=value" , input . ToString ( ) ) ;
327
+
328
+ SetCookieHeaderValue . UseSameSite2016Compat = false ;
329
+
330
+ var input2 = new SetCookieHeaderValue ( "name" , "value" )
331
+ {
332
+ SameSite = SameSiteMode . None ,
333
+ } ;
334
+
335
+ Assert . Equal ( "name=value; samesite=none" , input2 . ToString ( ) ) ;
336
+ }
337
+
304
338
[ Theory ]
305
339
[ MemberData ( nameof ( SetCookieHeaderDataSet ) ) ]
306
340
public void SetCookieHeaderValue_AppendToStringBuilder ( SetCookieHeaderValue input , string expectedValue )
@@ -312,6 +346,32 @@ public void SetCookieHeaderValue_AppendToStringBuilder(SetCookieHeaderValue inpu
312
346
Assert . Equal ( expectedValue , builder . ToString ( ) ) ;
313
347
}
314
348
349
+ [ Fact ]
350
+ public void SetCookieHeaderValue_AppendToStringBuilder_SameSite2016Compat ( )
351
+ {
352
+ SetCookieHeaderValue . UseSameSite2016Compat = true ;
353
+
354
+ var builder = new StringBuilder ( ) ;
355
+ var input = new SetCookieHeaderValue ( "name" , "value" )
356
+ {
357
+ SameSite = SameSiteMode . None ,
358
+ } ;
359
+
360
+ input . AppendToStringBuilder ( builder ) ;
361
+ Assert . Equal ( "name=value" , builder . ToString ( ) ) ;
362
+
363
+ SetCookieHeaderValue . UseSameSite2016Compat = false ;
364
+
365
+ var builder2 = new StringBuilder ( ) ;
366
+ var input2 = new SetCookieHeaderValue ( "name" , "value" )
367
+ {
368
+ SameSite = SameSiteMode . None ,
369
+ } ;
370
+
371
+ input2 . AppendToStringBuilder ( builder2 ) ;
372
+ Assert . Equal ( "name=value; samesite=none" , builder2 . ToString ( ) ) ;
373
+ }
374
+
315
375
[ Theory ]
316
376
[ MemberData ( nameof ( SetCookieHeaderDataSet ) ) ]
317
377
public void SetCookieHeaderValue_Parse_AcceptsValidValues ( SetCookieHeaderValue cookie , string expectedValue )
@@ -322,6 +382,31 @@ public void SetCookieHeaderValue_Parse_AcceptsValidValues(SetCookieHeaderValue c
322
382
Assert . Equal ( expectedValue , header . ToString ( ) ) ;
323
383
}
324
384
385
+ [ Fact ]
386
+ public void SetCookieHeaderValue_Parse_AcceptsValidValues_SameSite2016Compat ( )
387
+ {
388
+ SetCookieHeaderValue . UseSameSite2016Compat = true ;
389
+ var header = SetCookieHeaderValue . Parse ( "name=value; samesite=none" ) ;
390
+
391
+ var cookie = new SetCookieHeaderValue ( "name" , "value" )
392
+ {
393
+ SameSite = SameSiteMode . Strict ,
394
+ } ;
395
+
396
+ Assert . Equal ( cookie , header ) ;
397
+ Assert . Equal ( "name=value; samesite=strict" , header . ToString ( ) ) ;
398
+ SetCookieHeaderValue . UseSameSite2016Compat = false ;
399
+
400
+ var header2 = SetCookieHeaderValue . Parse ( "name=value; samesite=none" ) ;
401
+
402
+ var cookie2 = new SetCookieHeaderValue ( "name" , "value" )
403
+ {
404
+ SameSite = SameSiteMode . None ,
405
+ } ;
406
+ Assert . Equal ( cookie2 , header2 ) ;
407
+ Assert . Equal ( "name=value; samesite=none" , header2 . ToString ( ) ) ;
408
+ }
409
+
325
410
[ Theory ]
326
411
[ MemberData ( nameof ( SetCookieHeaderDataSet ) ) ]
327
412
public void SetCookieHeaderValue_TryParse_AcceptsValidValues ( SetCookieHeaderValue cookie , string expectedValue )
@@ -332,6 +417,31 @@ public void SetCookieHeaderValue_TryParse_AcceptsValidValues(SetCookieHeaderValu
332
417
Assert . Equal ( expectedValue , header . ToString ( ) ) ;
333
418
}
334
419
420
+ [ Fact ]
421
+ public void SetCookieHeaderValue_TryParse_AcceptsValidValues_SameSite2016Compat ( )
422
+ {
423
+ SetCookieHeaderValue . UseSameSite2016Compat = true ;
424
+ Assert . True ( SetCookieHeaderValue . TryParse ( "name=value; samesite=none" , out var header ) ) ;
425
+ var cookie = new SetCookieHeaderValue ( "name" , "value" )
426
+ {
427
+ SameSite = SameSiteMode . Strict ,
428
+ } ;
429
+
430
+ Assert . Equal ( cookie , header ) ;
431
+ Assert . Equal ( "name=value; samesite=strict" , header . ToString ( ) ) ;
432
+
433
+ SetCookieHeaderValue . UseSameSite2016Compat = false ;
434
+
435
+ Assert . True ( SetCookieHeaderValue . TryParse ( "name=value; samesite=none" , out var header2 ) ) ;
436
+ var cookie2 = new SetCookieHeaderValue ( "name" , "value" )
437
+ {
438
+ SameSite = SameSiteMode . None ,
439
+ } ;
440
+
441
+ Assert . Equal ( cookie2 , header2 ) ;
442
+ Assert . Equal ( "name=value; samesite=none" , header2 . ToString ( ) ) ;
443
+ }
444
+
335
445
[ Theory ]
336
446
[ MemberData ( nameof ( InvalidSetCookieHeaderDataSet ) ) ]
337
447
public void SetCookieHeaderValue_Parse_RejectsInvalidValues ( string value )
0 commit comments