156 lines
4.6 KiB
C#
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"]);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|