Jo Shields a575963da9 Imported Upstream version 3.6.0
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
2014-08-13 10:39:27 +01:00

156 lines
4.6 KiB
C#

// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
using System.Collections.Specialized;
using Xunit;
namespace System.Web.Http.ValueProviders.Providers
{
public class QueryStringValueProviderTest
{
[Fact]
public void ParseQueryString_Null()
{
// Act
NameValueCollection result = QueryStringValueProvider.ParseQueryString(null);
// Assert
Assert.Equal(0, result.Count);
}
[Fact]
public void ParseQueryString_SingleNamelessValue()
{
// Arrange
Uri uri = new Uri("http://localhost/?key");
// Act
NameValueCollection result = QueryStringValueProvider.ParseQueryString(uri);
// Assert
string key = Assert.Single(result) as string;
Assert.Equal("key", key);
Assert.Equal("", result[key]);
}
[Fact]
public void ParseQueryString_SingleNamedValue()
{
// Arrange
Uri uri = new Uri("http://localhost/?key1=value1");
// Act
NameValueCollection result = QueryStringValueProvider.ParseQueryString(uri);
// Assert
string key = Assert.Single(result) as string;
Assert.Equal("key1", key);
Assert.Equal("value1", result[key]);
}
[Fact]
public void ParseQueryString_TwoNamedValues()
{
// Arrange
Uri uri = new Uri("http://localhost/?key1=value1&key2=value2");
// Act
NameValueCollection result = QueryStringValueProvider.ParseQueryString(uri);
// Assert
Assert.Equal(2, result.Count);
Assert.Equal("value1", result["key1"]);
Assert.Equal("value2", result["key2"]);
}
[Fact]
public void ParseQueryString_MixedNamedAndUnnamedValues()
{
// Arrange
Uri uri = new Uri("http://localhost/?key1=value1&key2");
// Act
NameValueCollection result = QueryStringValueProvider.ParseQueryString(uri);
// Assert
Assert.Equal(2, result.Count);
Assert.Equal("value1", result["key1"]);
Assert.Equal("", result["key2"]);
Assert.Equal(null, result[""]);
}
[Fact]
public void ParseQueryString_MultipleValuesForSingleName()
{
// Arrange
Uri uri = new Uri("http://localhost/?key1=value1&key1=value2");
// Act
NameValueCollection result = QueryStringValueProvider.ParseQueryString(uri);
// Assert
Assert.Equal("value1,value2", result["key1"]);
Assert.Equal(new[] { "value1", "value2" }, result.GetValues("key1"));
}
[Fact]
public void ParseQueryString_LeadingAmpersand()
{
// Arrange
Uri uri = new Uri("http://localhost/?&key1=value1");
// Act
NameValueCollection result = QueryStringValueProvider.ParseQueryString(uri);
// Assert
Assert.Equal(2, result.Count);
Assert.Equal("value1", result["key1"]);
Assert.Equal("", result[""]);
}
[Fact]
public void ParseQueryString_IntermediateDoubleAmpersand()
{
// Arrange
Uri uri = new Uri("http://localhost/?key1=value1&&key2=value2");
// Act
NameValueCollection result = QueryStringValueProvider.ParseQueryString(uri);
// Assert
Assert.Equal(3, result.Count);
Assert.Equal("value1", result["key1"]);
Assert.Equal("value2", result["key2"]);
Assert.Equal("", result[""]);
}
[Fact]
public void ParseQueryString_TrailingAmpersand()
{
// Arrange
Uri uri = new Uri("http://localhost/?key1=value1&");
// Act
NameValueCollection result = QueryStringValueProvider.ParseQueryString(uri);
// Assert
Assert.Equal(2, result.Count);
Assert.Equal("value1", result["key1"]);
Assert.Equal("", result[""]);
}
[Fact]
public void ParseQueryString_EncodedUrlValues()
{
// Arrange
Uri uri = new Uri("http://localhost/?key%31=value%31");
// Act
NameValueCollection result = QueryStringValueProvider.ParseQueryString(uri);
// Assert
Assert.Single(result);
Assert.Equal("value1", result["key1"]);
}
}
}