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); }
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) { } }
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); }
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()); }
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; }
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 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 (); }