protected override void OnAssigned(string key, string[] value)
        {
            if (!_DoingInitialCopy)
            {
                switch ((key ?? "").ToLower())
                {
                case "content-length":
                    _Response.ContentLength64 = Parser.ParseInt64(HeadersDictionary.JoinCookedHeaderValues(value)) ?? 0L;
                    break;

                case "keep-alive":
                    _Response.KeepAlive = Parser.ParseBool(HeadersDictionary.JoinCookedHeaderValues(value)) ?? true;
                    break;

                case "transfer-encoding":
                    if (
                        (value ?? new string[0])
                        .Any(r => (r ?? "").Trim().ToLower() == "chunked")
                        )
                    {
                        _Response.SendChunked = true;
                    }
                    break;

                case "www-authenticate":
                    _Response.AddHeader("WWW-Authenticate", HeadersDictionary.JoinCookedHeaderValues(value));
                    break;

                default:
                    _Response.Headers[key] = HeadersDictionary.JoinCookedHeaderValues(value);
                    break;
                }
            }
        }
 /// <summary>
 /// See interface docs.
 /// </summary>
 /// <param name="key"></param>
 /// <returns></returns>
 public virtual string[] this[string key]
 {
     get {
         var headerValue = _Collection[key];
         return(headerValue == null
             ? null
             : HeadersDictionary.SplitRawHeaderValue(headerValue)?.ToArray());
     }
     set {
         if (key == null)
         {
             throw new ArgumentNullException(nameof(key));
         }
         _Collection[key] = HeadersDictionary.JoinCookedHeaderValues(value);
     }
 }
        public void Static_SplitRawHeaderValue_Round_Trips_With_JoinCookedHeaderValues(string [] splitValues, string headerValue)
        {
            var splitHeaderValues = HeadersDictionary.SplitRawHeaderValue(headerValue);

            if (splitValues == null)
            {
                Assert.IsNull(splitHeaderValues);
            }
            else
            {
                Assert.IsTrue(splitValues.SequenceEqual(splitHeaderValues));
            }

            var rejoinedHeader = HeadersDictionary.JoinCookedHeaderValues(splitHeaderValues);

            if (headerValue == null)
            {
                Assert.IsNull(rejoinedHeader);
            }
            else
            {
                Assert.AreEqual(headerValue, rejoinedHeader);
            }
        }
        public void Static_JoinCookedHeaderValues_Ignores_Null_And_Empty_Values(string[] rawStringArray, string expected)
        {
            var actual = HeadersDictionary.JoinCookedHeaderValues(rawStringArray);

            Assert.AreEqual(expected, actual);
        }