public void TryParse_SetOfValidValueStrings_ParsedCorrectly()
        {
            TransferCodingHeaderValue expected = new TransferCodingHeaderValue("custom");
            CheckValidParsedValue("\r\n custom  ", 0, expected, 11);
            CheckValidParsedValue("custom", 0, expected, 6);
            CheckValidParsedValue(",,custom", 0, expected, 8);
            CheckValidParsedValue(" , , custom", 0, expected, 11);
            CheckValidParsedValue("\r\n custom  , chunked", 0, expected, 13);
            CheckValidParsedValue("\r\n custom  , , , chunked", 0, expected, 17);

            CheckValidParsedValue(null, 0, null, 0);
            CheckValidParsedValue(string.Empty, 0, null, 0);
            CheckValidParsedValue("  ", 0, null, 2);
            CheckValidParsedValue("  ,,", 0, null, 4);

            // Note that even if the whole string is invalid, the first transfer-coding value is valid. When the parser
            // gets called again using the result-index (9), then it fails: I.e. we have 1 valid transfer-coding
            // and an invalid one.
            CheckValidParsedValue("custom , 会", 0, expected, 9);

            // We don't have to test all possible input strings, since most of the pieces are handled by other parsers.
            // The purpose of this test is to verify that these other parsers are combined correctly to build a 
            // transfer-coding parser.
            expected.Parameters.Add(new NameValueHeaderValue("name", "value"));
            CheckValidParsedValue("\r\n custom ;  name =   value ", 0, expected, 28);
            CheckValidParsedValue("\r\n , , custom ;  name =   value ", 0, expected, 32);
            CheckValidParsedValue("  custom;name=value", 2, expected, 19);
            CheckValidParsedValue("  custom ; name=value", 2, expected, 21);
        }
Exemple #2
0
        protected TransferCodingHeaderValue(TransferCodingHeaderValue source)
        {
            Debug.Assert(source != null);

            _value      = source._value;
            _parameters = source._parameters.Clone();
        }
		public void Ctor_Invalid ()
		{
			try {
				var tfhv = new TransferCodingHeaderValue ("my value");
				Assert.Fail ("#1");
			} catch (FormatException) {
			}
		}
Exemple #4
0
        protected override int GetParsedValueLength(string value, int startIndex, object?storeValue,
                                                    out object?parsedValue)
        {
            int resultLength = TransferCodingHeaderValue.GetTransferCodingLength(value, startIndex,
                                                                                 _transferCodingCreator, out TransferCodingHeaderValue? temp);

            parsedValue = temp;
            return(resultLength);
        }
		protected TransferCodingHeaderValue (TransferCodingHeaderValue source)
		{
			this.value = source.value;
			if (source.parameters != null) {
				foreach (var p in source.parameters) {
					Parameters.Add (new NameValueHeaderValue (p));
				}
			}
		}
		public static bool TryParse (string input, out TransferCodingHeaderValue parsedValue)
		{
			var lexer = new Lexer (input);
			Token token;
			if (TryParseElement (lexer, out parsedValue, out token) && token == Token.Type.End)
				return true;

			parsedValue = null;
			return false;
		}
        public void Parse_ValidValue_ReturnsTransferCodingHeaderValue()
        {
            // This test verifies that Parse() correctly calls TryParse().
            TransferCodingHeaderParser parser = TransferCodingHeaderParser.MultipleValueParser;
            int index = 2;

            TransferCodingHeaderValue expected = new TransferCodingHeaderValue("custom");
            expected.Parameters.Add(new NameValueHeaderValue("name", "value"));
            Assert.True(expected.Equals(parser.ParseValue("   custom ; name = value ", null, ref index)));
            Assert.Equal(25, index);
        }
Exemple #8
0
        public override bool Equals(object obj)
        {
            TransferCodingHeaderValue other = obj as TransferCodingHeaderValue;

            if (other == null)
            {
                return(false);
            }

            return(string.Equals(_value, other._value, StringComparison.OrdinalIgnoreCase) &&
                   HeaderUtilities.AreEqualCollections(_parameters, other._parameters));
        }
        public void ToString_UseDifferentTransferCodings_AllSerializedCorrectly()
        {
            TransferCodingHeaderValue transferCoding = new TransferCodingHeaderValue("custom");
            Assert.Equal("custom", transferCoding.ToString());

            transferCoding.Parameters.Add(new NameValueHeaderValue("paramName", "\"param value\""));
            Assert.Equal("custom; paramName=\"param value\"", transferCoding.ToString());

            transferCoding.Parameters.Add(new NameValueHeaderValue("paramName2", "\"param value2\""));
            Assert.Equal("custom; paramName=\"param value\"; paramName2=\"param value2\"",
                transferCoding.ToString());
        }
Exemple #10
0
        internal static int GetTransferCodingLength(string input, int startIndex,
                                                    Func <TransferCodingHeaderValue> transferCodingCreator, out TransferCodingHeaderValue parsedValue)
        {
            Contract.Requires(transferCodingCreator != null);
            Contract.Requires(startIndex >= 0);

            parsedValue = null;

            if (string.IsNullOrEmpty(input) || (startIndex >= input.Length))
            {
                return(0);
            }

            // Caller must remove leading whitespaces. If not, we'll return 0.
            int valueLength = HttpRuleParser.GetTokenLength(input, startIndex);

            if (valueLength == 0)
            {
                return(0);
            }

            string value   = input.Substring(startIndex, valueLength);
            int    current = startIndex + valueLength;

            current = current + HttpRuleParser.GetWhitespaceLength(input, current);
            TransferCodingHeaderValue transferCodingHeader = null;

            // If we're not done and we have a parameter delimiter, then we have a list of parameters.
            if ((current < input.Length) && (input[current] == ';'))
            {
                transferCodingHeader        = transferCodingCreator();
                transferCodingHeader._value = value;

                current++; // skip delimiter.
                int parameterLength = NameValueHeaderValue.GetNameValueListLength(input, current, ';',
                                                                                  (ObjectCollection <NameValueHeaderValue>)transferCodingHeader.Parameters);

                if (parameterLength == 0)
                {
                    return(0);
                }

                parsedValue = transferCodingHeader;
                return(current + parameterLength - startIndex);
            }

            // We have a transfer coding without parameters.
            transferCodingHeader        = transferCodingCreator();
            transferCodingHeader._value = value;
            parsedValue = transferCodingHeader;
            return(current - startIndex);
        }
        public static bool TryParse(string input, out TransferCodingHeaderValue parsedValue)
        {
            int index = 0;
            object output;
            parsedValue = null;

            if (TransferCodingHeaderParser.SingleValueParser.TryParseValue(input, null, ref index, out output))
            {
                parsedValue = (TransferCodingHeaderValue)output;
                return true;
            }
            return false;
        }
        internal static int GetTransferCodingLength(string input, int startIndex,
            Func<TransferCodingHeaderValue> transferCodingCreator, out TransferCodingHeaderValue parsedValue)
        {
            Contract.Requires(transferCodingCreator != null);
            Contract.Requires(startIndex >= 0);

            parsedValue = null;

            if (string.IsNullOrEmpty(input) || (startIndex >= input.Length))
            {
                return 0;
            }

            // Caller must remove leading whitespaces. If not, we'll return 0.
            int valueLength = HttpRuleParser.GetTokenLength(input, startIndex);

            if (valueLength == 0)
            {
                return 0;
            }

            string value = input.Substring(startIndex, valueLength);
            int current = startIndex + valueLength;
            current = current + HttpRuleParser.GetWhitespaceLength(input, current);
            TransferCodingHeaderValue transferCodingHeader = null;

            // If we're not done and we have a parameter delimiter, then we have a list of parameters.
            if ((current < input.Length) && (input[current] == ';'))
            {
                transferCodingHeader = transferCodingCreator();
                transferCodingHeader._value = value;

                current++; // skip delimiter.
                int parameterLength = NameValueHeaderValue.GetNameValueListLength(input, current, ';',
                    transferCodingHeader.Parameters);

                if (parameterLength == 0)
                {
                    return 0;
                }

                parsedValue = transferCodingHeader;
                return current + parameterLength - startIndex;
            }

            // We have a transfer coding without parameters.
            transferCodingHeader = transferCodingCreator();
            transferCodingHeader._value = value;
            parsedValue = transferCodingHeader;
            return current - startIndex;
        }
Exemple #13
0
        protected TransferCodingHeaderValue(TransferCodingHeaderValue source)
        {
            Contract.Requires(source != null);

            _value = source._value;

            if (source._parameters != null)
            {
                foreach (var parameter in source._parameters)
                {
                    this.Parameters.Add((NameValueHeaderValue)((ICloneable)parameter).Clone());
                }
            }
        }
Exemple #14
0
        public static bool TryParse(string input, out TransferCodingHeaderValue parsedValue)
        {
            int    index = 0;
            object output;

            parsedValue = null;

            if (TransferCodingHeaderParser.SingleValueParser.TryParseValue(input, null, ref index, out output))
            {
                parsedValue = (TransferCodingHeaderValue)output;
                return(true);
            }
            return(false);
        }
        protected TransferCodingHeaderValue(TransferCodingHeaderValue source)
        {
            Contract.Requires(source != null);

            _value = source._value;

            if (source._parameters != null)
            {
                foreach (var parameter in source._parameters)
                {
                    this.Parameters.Add((NameValueHeaderValue)((ICloneable)parameter).Clone());
                }
            }
        }
		public void Equals ()
		{
			var tfhv = new TransferCodingHeaderValue ("abc");
			Assert.AreEqual (tfhv, new TransferCodingHeaderValue ("abc"), "#1");
			Assert.AreEqual (tfhv, new TransferCodingHeaderValue ("AbC"), "#2");

			tfhv.Parameters.Add (new NameValueHeaderValue ("p", "v"));

			Assert.AreNotEqual (tfhv, new TransferCodingHeaderValue ("abc"), "#3");

			var tfhv2 = new TransferCodingHeaderValue ("abc");
			tfhv2.Parameters.Add (new NameValueHeaderValue ("p", "v"));

			Assert.AreNotEqual (tfhv, tfhv2, "#4");
		}
        public void Equals()
        {
            var tfhv = new TransferCodingWithQualityHeaderValue ("abc");
            Assert.AreEqual (tfhv, new TransferCodingWithQualityHeaderValue ("abc"), "#1");
            Assert.AreEqual (tfhv, new TransferCodingWithQualityHeaderValue ("AbC"), "#2");
            Assert.AreNotEqual (tfhv, new TransferCodingWithQualityHeaderValue ("ab"), "#3");
            Assert.AreNotEqual (tfhv, new TransferCodingWithQualityHeaderValue ("ab", 1), "#3");

            tfhv = new TransferCodingWithQualityHeaderValue ("abc", 0.3);
            Assert.AreEqual (tfhv, new TransferCodingWithQualityHeaderValue ("abc", 0.3), "#4");
            Assert.AreEqual (tfhv, new TransferCodingWithQualityHeaderValue ("AbC", 0.3), "#5");
            Assert.AreNotEqual (tfhv, new TransferCodingWithQualityHeaderValue ("abc"), "#6");

            var custom_param = new TransferCodingHeaderValue ("abc");
            custom_param.Parameters.Add (new NameValueHeaderValue ("q", "0.3"));
            Assert.AreEqual (tfhv, custom_param, "#7");
        }
		static bool TryParseElement (Lexer lexer, out TransferCodingHeaderValue parsedValue, out Token t)
		{
			parsedValue = null;

			t = lexer.Scan ();
			if (t != Token.Type.Token)
				return false;

			var result = new TransferCodingHeaderValue ();
			result.value = lexer.GetStringValue (t);

			t = lexer.Scan ();

			// Parameters parsing
			if (t == Token.Type.SeparatorSemicolon && (!NameValueHeaderValue.TryParseParameters (lexer, out result.parameters, out t) || t != Token.Type.End))
				return false;

			parsedValue = result;
			return true;
		}
        public void GetHashCode_UseTransferCodingWithAndWithoutParameters_SameOrDifferentHashCodes()
        {
            TransferCodingHeaderValue transferCoding1 = new TransferCodingHeaderValue("custom");
            TransferCodingHeaderValue transferCoding2 = new TransferCodingHeaderValue("CUSTOM");
            TransferCodingHeaderValue transferCoding3 = new TransferCodingHeaderValue("custom");
            transferCoding3.Parameters.Add(new NameValueHeaderValue("name", "value"));
            TransferCodingHeaderValue transferCoding4 = new TransferCodingHeaderValue("custom");
            transferCoding4.Parameters.Add(new NameValueHeaderValue("NAME", "VALUE"));
            TransferCodingHeaderValue transferCoding5 = new TransferCodingHeaderValue("custom");
            transferCoding5.Parameters.Add(new NameValueHeaderValue("name", "\"value\""));
            TransferCodingHeaderValue transferCoding6 = new TransferCodingHeaderValue("custom");
            transferCoding6.Parameters.Add(new NameValueHeaderValue("name", "\"VALUE\""));
            TransferCodingHeaderValue transferCoding7 = new TransferCodingHeaderValue("custom");
            transferCoding7.Parameters.Add(new NameValueHeaderValue("name", "\"VALUE\""));
            transferCoding7.Parameters.Clear();

            Assert.Equal(transferCoding1.GetHashCode(), transferCoding2.GetHashCode());
            Assert.NotEqual(transferCoding1.GetHashCode(), transferCoding3.GetHashCode());
            Assert.Equal(transferCoding3.GetHashCode(), transferCoding4.GetHashCode());
            Assert.NotEqual(transferCoding5.GetHashCode(), transferCoding6.GetHashCode());
            Assert.Equal(transferCoding1.GetHashCode(), transferCoding7.GetHashCode());
        }
 private void CheckValidParsedValue(string input, int index, TransferCodingHeaderValue expectedResult,
     int expectedIndex)
 {
     TransferCodingHeaderParser parser = TransferCodingHeaderParser.MultipleValueParser;
     object result = null;
     Assert.True(parser.TryParseValue(input, null, ref index, out result),
         string.Format("TryParse returned false. Input: '{0}', Index: {1}", input, index));
     Assert.Equal(expectedIndex, index);
     Assert.Equal(result, expectedResult);
 }
 public static bool TryParse(string input, out TransferCodingHeaderValue parsedValue)
 {
     return(TryParse(input, out parsedValue, () => new TransferCodingHeaderValue()));
 }
        internal virtual HttpRequestMessage GetRequest(Uri uri)
        {
            Uri requestUri = PrepareUri(uri);
            HttpMethod httpMethod = GetHttpMethod(Method);

            // create the base WebRequest object
            var request = new HttpRequestMessage(httpMethod, requestUri);

            // pull in session data
            if (WebSession.Headers.Count > 0)
            {
                WebSession.ContentHeaders.Clear();
                foreach (var entry in WebSession.Headers)
                {
                    if (HttpKnownHeaderNames.ContentHeaders.Contains(entry.Key))
                    {
                        WebSession.ContentHeaders.Add(entry.Key, entry.Value);
                    }
                    else
                    {
                        request.Headers.Add(entry.Key, entry.Value);
                    }
                }
            }

            // Set 'Transfer-Encoding: chunked' if 'Transfer-Encoding' is specified
            if (WebSession.Headers.ContainsKey(HttpKnownHeaderNames.TransferEncoding))
            {
                request.Headers.TransferEncodingChunked = true;
            }

            // Set 'User-Agent' if WebSession.Headers doesn't already contain it
            string userAgent = null;
            if (WebSession.Headers.TryGetValue(HttpKnownHeaderNames.UserAgent, out userAgent))
            {
                WebSession.UserAgent = userAgent;
            }
            else
            {
                request.Headers.Add(HttpKnownHeaderNames.UserAgent, WebSession.UserAgent);
            }

            // Set 'Keep-Alive' to false. This means set the Connection to 'Close'.
            if (DisableKeepAlive)
            {
                request.Headers.Add(HttpKnownHeaderNames.Connection, "Close");
            }

            // Set 'Transfer-Encoding'
            if (TransferEncoding != null)
            {
                request.Headers.TransferEncodingChunked = true;
                var headerValue = new TransferCodingHeaderValue(TransferEncoding);
                if (!request.Headers.TransferEncoding.Contains(headerValue))
                {
                    request.Headers.TransferEncoding.Add(headerValue);
                }
            }

            // Some web sites (e.g. Twitter) will return exception on POST when Expect100 is sent
            // Default behaviour is continue to send body content anyway after a short period
            // Here it send the two part as a whole. 
            request.Headers.ExpectContinue = false;

            return (request);
        }
 protected TransferCodingHeaderValue(TransferCodingHeaderValue source)
 {
 }
 internal static int GetTransferCodingLength(string input, int startIndex, Func <TransferCodingHeaderValue> transferCodingCreator, out TransferCodingHeaderValue parsedValue)
 {
 }
 private void CheckValidParse(string input, TransferCodingHeaderValue expectedResult)
 {
     TransferCodingHeaderValue result = TransferCodingHeaderValue.Parse(input);
     Assert.Equal(expectedResult, result);
 }
        public void Equals_UseTransferCodingWithAndWithoutParameters_EqualOrNotEqualNoExceptions()
        {
            TransferCodingHeaderValue transferCoding1 = new TransferCodingHeaderValue("custom");
            TransferCodingHeaderValue transferCoding2 = new TransferCodingHeaderValue("CUSTOM");
            TransferCodingHeaderValue transferCoding3 = new TransferCodingHeaderValue("custom");
            transferCoding3.Parameters.Add(new NameValueHeaderValue("name", "value"));
            TransferCodingHeaderValue transferCoding4 = new TransferCodingHeaderValue("custom");
            transferCoding4.Parameters.Add(new NameValueHeaderValue("NAME", "VALUE"));
            TransferCodingHeaderValue transferCoding5 = new TransferCodingHeaderValue("custom");
            transferCoding5.Parameters.Add(new NameValueHeaderValue("name", "\"value\""));
            TransferCodingHeaderValue transferCoding6 = new TransferCodingHeaderValue("custom");
            transferCoding6.Parameters.Add(new NameValueHeaderValue("name", "\"VALUE\""));
            TransferCodingHeaderValue transferCoding7 = new TransferCodingHeaderValue("custom");
            transferCoding7.Parameters.Add(new NameValueHeaderValue("name", "\"VALUE\""));
            transferCoding7.Parameters.Clear();

            Assert.False(transferCoding1.Equals(null), "Compare to <null>.");
            Assert.True(transferCoding1.Equals(transferCoding2), "Different casing.");
            Assert.False(transferCoding1.Equals(transferCoding3), "No params vs. custom param.");
            Assert.True(transferCoding3.Equals(transferCoding4), "Params have different casing.");
            Assert.False(transferCoding5.Equals(transferCoding6),
                "Param value are quoted strings with different casing.");
            Assert.True(transferCoding1.Equals(transferCoding7), "no vs. empty parameters collection.");
        }
        public void Clone_Call_CloneFieldsMatchSourceFields()
        {
            TransferCodingHeaderValue source = new TransferCodingHeaderValue("custom");
            TransferCodingHeaderValue clone = (TransferCodingHeaderValue)((ICloneable)source).Clone();
            Assert.Equal(source.Value, clone.Value);
            Assert.Equal(0, clone.Parameters.Count);

            source.Parameters.Add(new NameValueHeaderValue("custom", "customValue"));
            clone = (TransferCodingHeaderValue)((ICloneable)source).Clone();
            Assert.Equal(source.Value, clone.Value);
            Assert.Equal(1, clone.Parameters.Count);
            Assert.Equal("custom", clone.Parameters.ElementAt(0).Name);
            Assert.Equal("customValue", clone.Parameters.ElementAt(0).Value);
        }
 public void Parameters_AddNull_Throw()
 {
     TransferCodingHeaderValue transferCoding = new TransferCodingHeaderValue("custom");
     
     Assert.Throws<ArgumentNullException>(() => { transferCoding.Parameters.Add(null); });
 }
 public void Ctor_TransferCodingValidFormat_SuccessfullyCreated()
 {
     TransferCodingHeaderValue transferCoding = new TransferCodingHeaderValue("custom");
     Assert.Equal("custom", transferCoding.Value);
     Assert.Equal(0, transferCoding.Parameters.Count);
 }
 private void CheckValidTryParse(string input, TransferCodingHeaderValue expectedResult)
 {
     TransferCodingHeaderValue result = null;
     Assert.True(TransferCodingHeaderValue.TryParse(input, out result));
     Assert.Equal(expectedResult, result);
 }
 public void Value()
 {
     var tfhv = new TransferCodingHeaderValue ("value");
     Assert.AreEqual ("value", tfhv.Value, "#1");
     Assert.IsNotNull (tfhv.Parameters, "#2");
 }
 public static bool TryParse(string input, out TransferCodingHeaderValue parsedValue)
 {
 }
        public void TryParse_SetOfValidValueStrings_ParsedCorrectly()
        {
            TransferCodingHeaderValue expected = new TransferCodingHeaderValue("custom");
            CheckValidTryParse("\r\n custom  ", expected);
            CheckValidTryParse("custom", expected);

            // We don't have to test all possible input strings, since most of the pieces are handled by other parsers.
            // The purpose of this test is to verify that these other parsers are combined correctly to build a 
            // transfer-coding parser.
            expected.Parameters.Add(new NameValueHeaderValue("name", "value"));
            CheckValidTryParse("\r\n custom ;  name =   value ", expected);
            CheckValidTryParse("  custom;name=value", expected);
            CheckValidTryParse("  custom ; name=value", expected);
        }
		public static bool TryParse (string input, out TransferCodingHeaderValue parsedValue)
		{
			throw new NotImplementedException ();
		}