Files
acceptance-tests
data
debian
docs
external
Newtonsoft.Json
api-doc-tools
api-snapshot
aspnetwebstack
packages
src
test
Microsoft.TestCommon
Microsoft.Web.Helpers.Test
Microsoft.Web.Http.Data.Test
Microsoft.Web.Mvc.Test
Microsoft.Web.WebPages.OAuth.Test
SPA.Test
System.Json.Test.Integration
System.Json.Test.Unit
System.Net.Http.Formatting.Test.Integration
System.Net.Http.Formatting.Test.Unit
DataSets
Formatting
Parsers
BufferedMediaTypeFormatterTests.cs
ContentNegotiationResultTest.cs
DataContractJsonMediaTypeFormatterTests.cs
DefaultContentNegotiatorTests.cs
FormDataCollectionTests.cs
FormUrlEncodedJsonTests.cs
FormUrlEncodedMediaTypeFormatterTests.cs
JsonMediaTypeFormatterTests.cs
MediaRangeMappingTests.cs
MediaTypeConstantsTests.cs
MediaTypeFormatterCollectionTests.cs
MediaTypeFormatterExtensionsTests.cs
MediaTypeFormatterTestBase.cs
MediaTypeFormatterTests.cs
MediaTypeHeaderValueExtensionsTests.cs
MediaTypeWithQualityHeaderValueComparerTests.cs
ParsedMediaTypeHeaderValueTests.cs
QueryStringMappingTests.cs
RequestHeaderMappingTests.cs
SerializerConsistencyTests.cs
StringWithQualityHeaderValueComparerTests.cs
XmlMediaTypeFormatterTests.cs
XmlSerializerMediaTypeFormatterTests.cs
Headers
Internal
Mocks
Properties
FormattingUtilitiesTests.cs
HttpClientExtensionsTest.cs
HttpContentCollectionExtensionsTests.cs
HttpContentExtensionsTest.cs
HttpContentMessageExtensionsTests.cs
HttpContentMultipartExtensionsTests.cs
HttpMessageContentTests.cs
HttpRequestHeadersExtensionsTest.cs
HttpRequestMessageCommonExtensionsTest.cs
HttpResponseHeadersExtensionsTest.cs
MultipartFileStreamProviderTests.cs
MultipartFormDataStreamProviderTests.cs
MultipartMemoryStreamProviderTests.cs
ObjectContentOfTTests.cs
ObjectContentTests.cs
ParserData.cs
System.Net.Http.Formatting.Test.Unit.csproj
UriExtensionsTests.cs
UriQueryDataSet.cs
UriQueryUtilityTests.cs
packages.config
System.Web.Helpers.Test
System.Web.Http.Integration.Test
System.Web.Http.SelfHost.Test
System.Web.Http.Test
System.Web.Http.WebHost.Test
System.Web.Mvc.Test
System.Web.Razor.Test
System.Web.WebPages.Administration.Test
System.Web.WebPages.Deployment.Test
System.Web.WebPages.Razor.Test
System.Web.WebPages.Test
WebMatrix.Data.Test
WebMatrix.WebData.Test
Settings.StyleCop
tools
.gitattributes
.gitignore
License.txt
README.md
Runtime.msbuild
Runtime.sln
Runtime.xunit
Settings.StyleCop
build.cmd
binary-reference-assemblies
bockbuild
boringssl
cecil
cecil-legacy
corefx
corert
ikdasm
ikvm
linker
nuget-buildtasks
nunit-lite
roslyn-binaries
rx
xunit-binaries
ikvm-native
libgc
llvm
m4
man
mcs
mono
msvc
po
runtime
samples
scripts
support
tools
COPYING.LIB
LICENSE
Makefile.am
Makefile.in
NEWS
README.md
acinclude.m4
aclocal.m4
autogen.sh
code_of_conduct.md
compile
config.guess
config.h.in
config.rpath
config.sub
configure.REMOVED.git-id
configure.ac.REMOVED.git-id
depcomp
install-sh
ltmain.sh.REMOVED.git-id
missing
mkinstalldirs
mono-uninstalled.pc.in
test-driver
winconfig.h

205 lines
12 KiB
C#
Raw Normal View History

// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
using System.Collections.Generic;
using System.Linq;
using System.Net.Http.Formatting.DataSets;
using System.Net.Http.Headers;
using Microsoft.TestCommon;
using Xunit;
using Xunit.Extensions;
using Assert = Microsoft.TestCommon.AssertEx;
namespace System.Net.Http.Formatting
{
public class QueryStringMappingTests
{
public static IEnumerable<string> UriStringsWithoutQuery
{
get
{
return HttpUnitTestDataSets.UriStrings.Where((s) => !s.Contains('?'));
}
}
[Fact]
[Trait("Description", "QueryStringMapping is public, and concrete.")]
public void TypeIsCorrect()
{
Assert.Type.HasProperties(
typeof(QueryStringMapping),
TypeAssert.TypeProperties.IsPublicVisibleClass,
typeof(MediaTypeMapping));
}
[Theory]
[TestDataSet(
typeof(HttpUnitTestDataSets), "LegalQueryStringParameterNames",
typeof(HttpUnitTestDataSets), "LegalQueryStringParameterValues",
typeof(HttpUnitTestDataSets), "LegalMediaTypeHeaderValues")]
[Trait("Description", "QueryStringMapping(string, string, MediaTypeHeaderValue) sets properties.")]
public void Constructor(string queryStringParameterName, string queryStringParameterValue, MediaTypeHeaderValue mediaType)
{
QueryStringMapping mapping = new QueryStringMapping(queryStringParameterName, queryStringParameterValue, mediaType);
Assert.Equal(queryStringParameterName, mapping.QueryStringParameterName);
Assert.Equal(queryStringParameterValue, mapping.QueryStringParameterValue);
Assert.MediaType.AreEqual(mediaType, mapping.MediaType, "MediaType failed to set.");
}
[Theory]
[TestDataSet(
typeof(HttpUnitTestDataSets), "LegalMediaTypeHeaderValues",
typeof(CommonUnitTestDataSets), "EmptyStrings")]
[Trait("Description", "QueryStringMapping(string, string, MediaTypeHeaderValue) throws with empty QueryStringParameterName.")]
public void ConstructorThrowsWithEmptyQueryParameterName(MediaTypeHeaderValue mediaType, string queryStringParameterName)
{
Assert.ThrowsArgumentNull(() => new QueryStringMapping(queryStringParameterName, "json", mediaType), "queryStringParameterName");
}
[Theory]
[TestDataSet(
typeof(HttpUnitTestDataSets), "LegalMediaTypeHeaderValues",
typeof(CommonUnitTestDataSets), "EmptyStrings")]
[Trait("Description", "QueryStringMapping(string, string, MediaTypeHeaderValue) throws with empty QueryStringParameterValue.")]
public void ConstructorThrowsWithEmptyQueryParameterValue(MediaTypeHeaderValue mediaType, string queryStringParameterValue)
{
Assert.ThrowsArgumentNull(() => new QueryStringMapping("query", queryStringParameterValue, mediaType), "queryStringParameterValue");
}
[Theory]
[TestDataSet(
typeof(HttpUnitTestDataSets), "LegalQueryStringParameterNames",
typeof(HttpUnitTestDataSets), "LegalQueryStringParameterValues")]
[Trait("Description", "QueryStringMapping(string, string, MediaTypeHeaderValue) throws with null MediaTypeHeaderValue.")]
public void ConstructorThrowsWithNullMediaTypeHeaderValue(string queryStringParameterName, string queryStringParameterValue)
{
Assert.ThrowsArgumentNull(() => new QueryStringMapping(queryStringParameterName, queryStringParameterValue, (MediaTypeHeaderValue)null), "mediaType");
}
[Theory]
[TestDataSet(
typeof(HttpUnitTestDataSets), "LegalQueryStringParameterNames",
typeof(HttpUnitTestDataSets), "LegalQueryStringParameterValues",
typeof(HttpUnitTestDataSets), "LegalMediaTypeStrings")]
[Trait("Description", "QueryStringMapping(string, string, string) sets properties.")]
public void Constructor1(string queryStringParameterName, string queryStringParameterValue, string mediaType)
{
QueryStringMapping mapping = new QueryStringMapping(queryStringParameterName, queryStringParameterValue, mediaType);
Assert.Equal(queryStringParameterName, mapping.QueryStringParameterName);
Assert.Equal(queryStringParameterValue, mapping.QueryStringParameterValue);
Assert.MediaType.AreEqual(mediaType, mapping.MediaType, "MediaType failed to set.");
}
[Theory]
[TestDataSet(
typeof(HttpUnitTestDataSets), "LegalMediaTypeStrings",
typeof(CommonUnitTestDataSets), "EmptyStrings")]
[Trait("Description", "QueryStringMapping(string, string, string) throws with empty QueryStringParameterName.")]
public void Constructor1ThrowsWithEmptyQueryParameterName(string mediaType, string queryStringParameterName)
{
Assert.ThrowsArgumentNull(() => new QueryStringMapping(queryStringParameterName, "json", mediaType), "queryStringParameterName");
}
[Theory]
[TestDataSet(
typeof(HttpUnitTestDataSets), "LegalMediaTypeStrings",
typeof(CommonUnitTestDataSets), "EmptyStrings")]
[Trait("Description", "QueryStringMapping(string, string, string) throws with empty QueryStringParameterValue.")]
public void Constructor1ThrowsWithEmptyQueryParameterValue(string mediaType, string queryStringParameterValue)
{
Assert.ThrowsArgumentNull(() => new QueryStringMapping("query", queryStringParameterValue, mediaType), "queryStringParameterValue");
}
[Theory]
[TestDataSet(
typeof(HttpUnitTestDataSets), "LegalQueryStringParameterNames",
typeof(HttpUnitTestDataSets), "LegalQueryStringParameterValues",
typeof(CommonUnitTestDataSets), "EmptyStrings")]
[Trait("Description", "QueryStringMapping(string, string, string) throws with empty MediaType.")]
public void Constructor1ThrowsWithEmptyMediaType(string queryStringParameterName, string queryStringParameterValue, string mediaType)
{
Assert.ThrowsArgumentNull(() => new QueryStringMapping(queryStringParameterName, queryStringParameterValue, (MediaTypeHeaderValue)null), "mediaType");
}
[Theory]
[TestDataSet(
typeof(HttpUnitTestDataSets), "LegalQueryStringParameterNames",
typeof(HttpUnitTestDataSets), "LegalQueryStringParameterValues",
typeof(HttpUnitTestDataSets), "LegalMediaTypeStrings",
typeof(QueryStringMappingTests), "UriStringsWithoutQuery")]
[Trait("Description", "TryMatchMediaType(HttpRequestMessage) returns match when the QueryStringParameterName and QueryStringParameterValue are in the Uri.")]
public void TryMatchMediaTypeReturnsMatchWithQueryStringParameterNameAndValueInUri(string queryStringParameterName, string queryStringParameterValue, string mediaType, string uriBase)
{
QueryStringMapping mapping = new QueryStringMapping(queryStringParameterName, queryStringParameterValue, mediaType);
string uri = uriBase + "?" + queryStringParameterName + "=" + queryStringParameterValue;
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, uri);
Assert.Equal(1.0, mapping.TryMatchMediaType(request));
}
[Theory]
[TestDataSet(
typeof(HttpUnitTestDataSets), "LegalQueryStringParameterNames",
typeof(HttpUnitTestDataSets), "LegalQueryStringParameterValues",
typeof(HttpUnitTestDataSets), "LegalMediaTypeStrings",
typeof(QueryStringMappingTests), "UriStringsWithoutQuery")]
[Trait("Description", "TryMatchMediaType(HttpRequestMessage) returns 0.0 when the QueryStringParameterName is not in the Uri.")]
public void TryMatchMediaTypeReturnsZeroWithQueryStringParameterNameNotInUri(string queryStringParameterName, string queryStringParameterValue, string mediaType, string uriBase)
{
QueryStringMapping mapping = new QueryStringMapping(queryStringParameterName, queryStringParameterValue, mediaType);
string uri = uriBase + "?" + "not" + queryStringParameterName + "=" + queryStringParameterValue;
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, uri);
Assert.Equal(0.0, mapping.TryMatchMediaType(request));
}
[Theory]
[TestDataSet(
typeof(HttpUnitTestDataSets), "LegalQueryStringParameterNames",
typeof(HttpUnitTestDataSets), "LegalQueryStringParameterValues",
typeof(HttpUnitTestDataSets), "LegalMediaTypeStrings",
typeof(QueryStringMappingTests), "UriStringsWithoutQuery")]
[Trait("Description", "TryMatchMediaType(HttpRequestMessage) returns 0.0 when the QueryStringParameterValue is not in the Uri.")]
public void TryMatchMediaTypeReturnsZeroWithQueryStringParameterValueNotInUri(string queryStringParameterName, string queryStringParameterValue, string mediaType, string uriBase)
{
QueryStringMapping mapping = new QueryStringMapping(queryStringParameterName, queryStringParameterValue, mediaType);
string uri = uriBase + "?" + queryStringParameterName + "=" + "not" + queryStringParameterValue;
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, uri);
Assert.Equal(0.0, mapping.TryMatchMediaType(request));
}
[Theory]
[TestDataSet(
typeof(HttpUnitTestDataSets), "LegalQueryStringParameterNames",
typeof(HttpUnitTestDataSets), "LegalQueryStringParameterValues",
typeof(HttpUnitTestDataSets), "LegalMediaTypeStrings")]
[Trait("Description", "TryMatchMediaType(HttpRequestMessage) throws with a null HttpRequestMessage.")]
public void TryMatchMediaTypeThrowsWithNullHttpRequestMessage(string queryStringParameterName, string queryStringParameterValue, string mediaType)
{
QueryStringMapping mapping = new QueryStringMapping(queryStringParameterName, queryStringParameterValue, mediaType);
Assert.ThrowsArgumentNull(() => mapping.TryMatchMediaType(request: null), "request");
}
[Theory]
[TestDataSet(
typeof(HttpUnitTestDataSets), "LegalQueryStringParameterNames",
typeof(HttpUnitTestDataSets), "LegalQueryStringParameterValues",
typeof(HttpUnitTestDataSets), "LegalMediaTypeStrings")]
[Trait("Description", "TryMatchMediaType(HttpRequestMessage) throws with a null Uri in HttpRequestMessage.")]
public void TryMatchMediaTypeThrowsWithNullUriInHttpRequestMessage(string queryStringParameterName, string queryStringParameterValue, string mediaType)
{
QueryStringMapping mapping = new QueryStringMapping(queryStringParameterName, queryStringParameterValue, mediaType);
string errorMessage = RS.Format(Properties.Resources.NonNullUriRequiredForMediaTypeMapping, typeof(QueryStringMapping).Name);
Assert.Throws<InvalidOperationException>(() => mapping.TryMatchMediaType(new HttpRequestMessage()), errorMessage);
}
[Theory]
[InlineData("nAmE", "VaLuE", "name=value")]
[InlineData("Format", "Xml", "format=xml")]
public void TryMatchMediaTypeIsCaseInsensitive(string name, string value, string query)
{
QueryStringMapping mapping = new QueryStringMapping(name, value, "application/json");
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "http://localhost/?" + query);
Assert.Equal(1.0, mapping.TryMatchMediaType(request));
}
}
}