@@ -427,22 +427,22 @@ await server.HandleRequestAsync(headers: new[]
427427 } ) ;
428428 }
429429
430- private static readonly ( string Name , Encoding ValueEncoding , string [ ] Values ) [ ] s_nonAsciiHeaders = new [ ]
430+ private static readonly ( string Name , Encoding ValueEncoding , string Separator , string [ ] Values ) [ ] s_nonAsciiHeaders = new [ ]
431431 {
432- ( "foo" , Encoding . ASCII , new [ ] { "bar" } ) ,
433- ( "header-0" , Encoding . UTF8 , new [ ] { "\uD83D \uDE03 " , "\uD83D \uDE48 \uD83D \uDE49 \uD83D \uDE4A " } ) ,
434- ( "Cache-Control" , Encoding . UTF8 , new [ ] { "no-cache" } ) ,
435- ( "header-1" , Encoding . UTF8 , new [ ] { "\uD83D \uDE03 " } ) ,
436- ( "Some-Header1" , Encoding . Latin1 , new [ ] { "\uD83D \uDE03 " , "UTF8-best-fit-to-latin1" } ) ,
437- ( "Some-Header2" , Encoding . Latin1 , new [ ] { "\u00FF " , "\u00C4 nd" , "Ascii\u00A9 " } ) ,
438- ( "Some-Header3" , Encoding . ASCII , new [ ] { "\u00FF " , "\u00C4 nd" , "Ascii\u00A9 " , "Latin1-best-fit-to-ascii" } ) ,
439- ( "header-2" , Encoding . UTF8 , new [ ] { "\uD83D \uDE48 \uD83D \uDE49 \uD83D \uDE4A " } ) ,
440- ( "header-3" , Encoding . UTF8 , new [ ] { "\uFFFD " } ) ,
441- ( "header-4" , Encoding . UTF8 , new [ ] { "\uD83D \uDE48 \uD83D \uDE49 \uD83D \uDE4A " , "\uD83D \uDE03 " } ) ,
442- ( "Cookie" , Encoding . UTF8 , new [ ] { "Cookies" , "\uD83C \uDF6A " , "everywhere" } ) ,
443- ( "Set-Cookie" , Encoding . UTF8 , new [ ] { "\uD83C \uDDF8 \uD83C \uDDEE " } ) ,
444- ( "header-5" , Encoding . UTF8 , new [ ] { "\uD83D \uDE48 \uD83D \uDE49 \uD83D \uDE4A " , "foo" , "\uD83D \uDE03 " , "bar" } ) ,
445- ( "bar" , Encoding . UTF8 , new [ ] { "foo" } )
432+ ( "foo" , Encoding . ASCII , ", " , new [ ] { "bar" } ) ,
433+ ( "header-0" , Encoding . UTF8 , ", " , new [ ] { "\uD83D \uDE03 " , "\uD83D \uDE48 \uD83D \uDE49 \uD83D \uDE4A " } ) ,
434+ ( "Cache-Control" , Encoding . UTF8 , ", " , new [ ] { "no-cache" } ) ,
435+ ( "header-1" , Encoding . UTF8 , ", " , new [ ] { "\uD83D \uDE03 " } ) ,
436+ ( "Some-Header1" , Encoding . Latin1 , ", " , new [ ] { "\uD83D \uDE03 " , "UTF8-best-fit-to-latin1" } ) ,
437+ ( "Some-Header2" , Encoding . Latin1 , ", " , new [ ] { "\u00FF " , "\u00C4 nd" , "Ascii\u00A9 " } ) ,
438+ ( "Some-Header3" , Encoding . ASCII , ", " , new [ ] { "\u00FF " , "\u00C4 nd" , "Ascii\u00A9 " , "Latin1-best-fit-to-ascii" } ) ,
439+ ( "header-2" , Encoding . UTF8 , ", " , new [ ] { "\uD83D \uDE48 \uD83D \uDE49 \uD83D \uDE4A " } ) ,
440+ ( "header-3" , Encoding . UTF8 , ", " , new [ ] { "\uFFFD " } ) ,
441+ ( "header-4" , Encoding . UTF8 , ", " , new [ ] { "\uD83D \uDE48 \uD83D \uDE49 \uD83D \uDE4A " , "\uD83D \uDE03 " } ) ,
442+ ( "Cookie" , Encoding . UTF8 , "; " , new [ ] { "Cookies" , "\uD83C \uDF6A " , "everywhere" } ) ,
443+ ( "Set-Cookie" , Encoding . UTF8 , ", " , new [ ] { "\uD83C \uDDF8 \uD83C \uDDEE " } ) ,
444+ ( "header-5" , Encoding . UTF8 , ", " , new [ ] { "\uD83D \uDE48 \uD83D \uDE49 \uD83D \uDE4A " , "foo" , "\uD83D \uDE03 " , "bar" } ) ,
445+ ( "bar" , Encoding . UTF8 , ", " , new [ ] { "foo" } )
446446 } ;
447447
448448 [ Fact ]
@@ -457,7 +457,7 @@ await LoopbackServerFactory.CreateClientAndServerAsync(
457457 Version = UseVersion
458458 } ;
459459
460- foreach ( ( string name , _ , string [ ] values ) in s_nonAsciiHeaders )
460+ foreach ( ( string name , _ , _ , string [ ] values ) in s_nonAsciiHeaders )
461461 {
462462 requestMessage . Headers . Add ( name , values ) ;
463463 }
@@ -479,7 +479,7 @@ await LoopbackServerFactory.CreateClientAndServerAsync(
479479
480480 await client . SendAsync ( TestAsync , requestMessage ) ;
481481
482- foreach ( ( string name , _ , _ ) in s_nonAsciiHeaders )
482+ foreach ( ( string name , _ , _ , _ ) in s_nonAsciiHeaders )
483483 {
484484 Assert . Contains ( name , seenHeaderNames ) ;
485485 }
@@ -491,9 +491,9 @@ await LoopbackServerFactory.CreateClientAndServerAsync(
491491 Assert . All ( requestData . Headers ,
492492 h => Assert . False ( h . HuffmanEncoded , "Expose raw decoded bytes once HuffmanEncoding is supported" ) ) ;
493493
494- foreach ( ( string name , Encoding valueEncoding , string [ ] values ) in s_nonAsciiHeaders )
494+ foreach ( ( string name , Encoding valueEncoding , string separator , string [ ] values ) in s_nonAsciiHeaders )
495495 {
496- byte [ ] valueBytes = valueEncoding . GetBytes ( string . Join ( ", " , values ) ) ;
496+ byte [ ] valueBytes = valueEncoding . GetBytes ( string . Join ( separator , values ) ) ;
497497 Assert . Single ( requestData . Headers ,
498498 h => h . Name . Equals ( name , StringComparison . OrdinalIgnoreCase ) && h . Raw . AsSpan ( ) . IndexOf ( valueBytes ) != - 1 ) ;
499499 }
@@ -536,20 +536,20 @@ await LoopbackServerFactory.CreateClientAndServerAsync(
536536
537537 using HttpResponseMessage response = await client . SendAsync ( TestAsync , requestMessage ) ;
538538
539- foreach ( ( string name , Encoding valueEncoding , string [ ] values ) in s_nonAsciiHeaders )
539+ foreach ( ( string name , Encoding valueEncoding , string separator , string [ ] values ) in s_nonAsciiHeaders )
540540 {
541541 Assert . Contains ( name , seenHeaderNames ) ;
542542 IEnumerable < string > receivedValues = Assert . Single ( response . Headers , h => h . Key . Equals ( name , StringComparison . OrdinalIgnoreCase ) ) . Value ;
543543 string value = Assert . Single ( receivedValues ) ;
544544
545- string expected = valueEncoding . GetString ( valueEncoding . GetBytes ( string . Join ( ", " , values ) ) ) ;
545+ string expected = valueEncoding . GetString ( valueEncoding . GetBytes ( string . Join ( separator , values ) ) ) ;
546546 Assert . Equal ( expected , value , StringComparer . OrdinalIgnoreCase ) ;
547547 }
548548 } ,
549549 async server =>
550550 {
551551 List < HttpHeaderData > headerData = s_nonAsciiHeaders
552- . Select ( h => new HttpHeaderData ( h . Name , string . Join ( ", " , h . Values ) , valueEncoding : h . ValueEncoding ) )
552+ . Select ( h => new HttpHeaderData ( h . Name , string . Join ( h . Separator , h . Values ) , valueEncoding : h . ValueEncoding ) )
553553 . ToList ( ) ;
554554
555555 await server . HandleRequestAsync ( headers : headerData ) ;
0 commit comments