4
4
using System ;
5
5
using System . Collections . Generic ;
6
6
using System . Linq ;
7
+ using System . Net ;
7
8
using System . Text ;
9
+ using Microsoft . Extensions . Primitives ;
10
+ using Moq ;
8
11
using Xunit ;
9
12
10
13
namespace Microsoft . Net . Http . Headers
@@ -24,9 +27,11 @@ public static TheoryData<SetCookieHeaderValue, string> SetCookieHeaderDataSet
24
27
HttpOnly = true ,
25
28
MaxAge = TimeSpan . FromDays ( 1 ) ,
26
29
Path = "path1" ,
27
- Secure = true
30
+ Secure = true ,
28
31
} ;
29
- dataset . Add ( header1 , "name1=n1=v1&n2=v2&n3=v3; expires=Sun, 06 Nov 1994 08:49:37 GMT; max-age=86400; domain=domain1; path=path1; secure; samesite=strict; httponly" ) ;
32
+ header1 . Extensions . Add ( "extension1" ) ;
33
+ header1 . Extensions . Add ( "extension2=value" ) ;
34
+ dataset . Add ( header1 , "name1=n1=v1&n2=v2&n3=v3; expires=Sun, 06 Nov 1994 08:49:37 GMT; max-age=86400; domain=domain1; path=path1; secure; samesite=strict; httponly; extension1; extension2=value" ) ;
30
35
31
36
var header2 = new SetCookieHeaderValue ( "name2" , "" ) ;
32
37
dataset . Add ( header2 , "name2=" ) ;
@@ -59,6 +64,10 @@ public static TheoryData<SetCookieHeaderValue, string> SetCookieHeaderDataSet
59
64
} ;
60
65
dataset . Add ( header7 , "name7=value7; samesite=none" ) ;
61
66
67
+ var header8 = new SetCookieHeaderValue ( "name8" , "value8" ) ;
68
+ header8 . Extensions . Add ( "extension1" ) ;
69
+ header8 . Extensions . Add ( "extension2=value" ) ;
70
+ dataset . Add ( header8 , "name8=value8; extension1; extension2=value" ) ;
62
71
63
72
return dataset ;
64
73
}
@@ -126,7 +135,10 @@ public static TheoryData<string> InvalidCookieValues
126
135
Path = "path1" ,
127
136
Secure = true
128
137
} ;
129
- var string1 = "name1=n1=v1&n2=v2&n3=v3; expires=Sun, 06 Nov 1994 08:49:37 GMT; max-age=86400; domain=domain1; path=path1; secure; samesite=strict; httponly" ;
138
+ header1 . Extensions . Add ( "extension1" ) ;
139
+ header1 . Extensions . Add ( "extension2=value" ) ;
140
+
141
+ var string1 = "name1=n1=v1&n2=v2&n3=v3; expires=Sun, 06 Nov 1994 08:49:37 GMT; max-age=86400; domain=domain1; path=path1; secure; samesite=strict; httponly; extension1; extension2=value" ;
130
142
131
143
var header2 = new SetCookieHeaderValue ( "name2" , "value2" ) ;
132
144
var string2 = "name2=value2" ;
@@ -170,6 +182,12 @@ public static TheoryData<string> InvalidCookieValues
170
182
var string8a = "name8=value8; samesite" ;
171
183
var string8b = "name8=value8; samesite=invalid" ;
172
184
185
+ var header9 = new SetCookieHeaderValue ( "name9" , "value9" ) ;
186
+ header9 . Extensions . Add ( "extension1" ) ;
187
+ header9 . Extensions . Add ( "extension2=value" ) ;
188
+ var string9 = "name9=value9; extension1; extension2=value" ;
189
+
190
+
173
191
dataset . Add ( new [ ] { header1 } . ToList ( ) , new [ ] { string1 } ) ;
174
192
dataset . Add ( new [ ] { header1 , header1 } . ToList ( ) , new [ ] { string1 , string1 } ) ;
175
193
dataset . Add ( new [ ] { header1 , header1 } . ToList ( ) , new [ ] { string1 , null , "" , " " , "," , " , " , string1 } ) ;
@@ -185,6 +203,22 @@ public static TheoryData<string> InvalidCookieValues
185
203
dataset . Add ( new [ ] { header7 } . ToList ( ) , new [ ] { string7 } ) ;
186
204
dataset . Add ( new [ ] { header8 } . ToList ( ) , new [ ] { string8a } ) ;
187
205
dataset . Add ( new [ ] { header8 } . ToList ( ) , new [ ] { string8b } ) ;
206
+ dataset . Add ( new [ ] { header9 } . ToList ( ) , new [ ] { string9 } ) ;
207
+
208
+ foreach ( var item1 in SetCookieHeaderDataSet )
209
+ {
210
+ var pair_cookie1 = ( SetCookieHeaderValue ) item1 [ 0 ] ;
211
+ var pair_string1 = item1 [ 1 ] . ToString ( ) ;
212
+
213
+ foreach ( var item2 in SetCookieHeaderDataSet )
214
+ {
215
+ var pair_cookie2 = ( SetCookieHeaderValue ) item2 [ 0 ] ;
216
+ var pair_string2 = item2 [ 1 ] . ToString ( ) ;
217
+
218
+ dataset . Add ( new [ ] { pair_cookie1 , pair_cookie2 } . ToList ( ) , new [ ] { string . Join ( ", " , pair_string1 , pair_string2 ) } ) ;
219
+
220
+ }
221
+ }
188
222
189
223
return dataset ;
190
224
}
@@ -378,13 +412,18 @@ public void SetCookieHeaderValue_TryParseList_AcceptsValidValues(IList<SetCookie
378
412
}
379
413
380
414
[ Fact ]
381
- public void SetCookieHeaderValue_TryParse_SkipExtensionValues ( )
415
+ public void SetCookieHeaderValue_TryParse_ExtensionOrderDoesntMatter ( )
382
416
{
383
- string cookieHeaderValue = "cookiename=value; extensionname=value;" ;
417
+ string cookieHeaderValue1 = "cookiename=value; extensionname1=value; extensionname2=value;" ;
418
+ string cookieHeaderValue2 = "cookiename=value; extensionname2=value; extensionname1=value;" ;
384
419
420
+ SetCookieHeaderValue setCookieHeaderValue1 ;
421
+ SetCookieHeaderValue setCookieHeaderValue2 ;
385
422
386
- SetCookieHeaderValue . TryParse ( cookieHeaderValue , out var setCookieHeaderValue ) ;
387
- Assert . Equal ( "value" , setCookieHeaderValue ! . Value ) ;
423
+ SetCookieHeaderValue . TryParse ( cookieHeaderValue1 , out setCookieHeaderValue1 ) ;
424
+ SetCookieHeaderValue . TryParse ( cookieHeaderValue2 , out setCookieHeaderValue2 ) ;
425
+
426
+ Assert . Equal ( setCookieHeaderValue1 , setCookieHeaderValue2 ) ;
388
427
}
389
428
390
429
[ Theory ]
@@ -428,7 +467,7 @@ public void SetCookieHeaderValue_TryParseList_ExcludesInvalidValues(IList<SetCoo
428
467
[ MemberData ( nameof ( ListWithInvalidSetCookieHeaderDataSet ) ) ]
429
468
public void SetCookieHeaderValue_ParseStrictList_ThrowsForAnyInvalidValues (
430
469
#pragma warning disable xUnit1026 // Theory methods should use all of their parameters
431
- IList < SetCookieHeaderValue > cookies ,
470
+ IList < SetCookieHeaderValue > cookies ,
432
471
#pragma warning restore xUnit1026 // Theory methods should use all of their parameters
433
472
string [ ] input )
434
473
{
0 commit comments