a575963da9
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
338 lines
16 KiB
C#
338 lines
16 KiB
C#
// 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.Headers;
|
|
using System.Text;
|
|
using Microsoft.TestCommon;
|
|
using Xunit;
|
|
using Assert = Microsoft.TestCommon.AssertEx;
|
|
|
|
namespace System.Net.Http
|
|
{
|
|
public class HttpContentCollectionExtensionsTests
|
|
{
|
|
private const string contentID = "content-id";
|
|
private const string matchContentID = "matchID";
|
|
private const string matchContentType = "text/plain";
|
|
private const string matchDispositionName = "N1";
|
|
private const string quotedMatchDispositionName = "\"" + matchDispositionName + "\"";
|
|
private const string matchDispositionType = "form-data";
|
|
private const string quotedMatchDispositionType = "\"" + matchDispositionType + "\"";
|
|
|
|
private const string noMatchContentID = "nomatchID";
|
|
private const string noMatchContentType = "text/nomatch";
|
|
private const string noMatchDispositionName = "nomatchName";
|
|
private const string noMatchDispositionType = "nomatchType";
|
|
|
|
[Fact]
|
|
[Trait("Description", "IEnumerableHttpContentExtensionMethods is a public static class.")]
|
|
public void TypeIsCorrect()
|
|
{
|
|
Assert.Type.HasProperties(
|
|
typeof(HttpContentCollectionExtensions),
|
|
TypeAssert.TypeProperties.IsPublicVisibleClass |
|
|
TypeAssert.TypeProperties.IsStatic);
|
|
}
|
|
|
|
|
|
private static IEnumerable<HttpContent> CreateContent()
|
|
{
|
|
MultipartFormDataContent multipart = new MultipartFormDataContent();
|
|
|
|
multipart.Add(new StringContent("A", UTF8Encoding.UTF8, matchContentType), matchDispositionName);
|
|
multipart.Add(new StringContent("B", UTF8Encoding.UTF8, matchContentType), "N2");
|
|
multipart.Add(new StringContent("C", UTF8Encoding.UTF8, matchContentType), "N3");
|
|
|
|
multipart.Add(new ByteArrayContent(new byte[] { 0x65 }), "N4");
|
|
multipart.Add(new ByteArrayContent(new byte[] { 0x65 }), "N5");
|
|
multipart.Add(new ByteArrayContent(new byte[] { 0x65 }), "N6");
|
|
|
|
HttpContent cidContent = new StringContent("<html>A</html>", UTF8Encoding.UTF8, "text/html");
|
|
cidContent.Headers.Add(contentID, matchContentID);
|
|
multipart.Add(cidContent);
|
|
|
|
return multipart;
|
|
}
|
|
|
|
private static void ClearHeaders(IEnumerable<HttpContent> contents)
|
|
{
|
|
foreach (var c in contents)
|
|
{
|
|
c.Headers.Clear();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
[Fact]
|
|
[Trait("Description", "FindAllContentType(IEnumerable<HttpContent>, string) throws on null.")]
|
|
public void FindAllContentTypeString()
|
|
{
|
|
Assert.ThrowsArgumentNull(() => { HttpContentCollectionExtensions.FindAllContentType(null, "text/plain"); }, "contents");
|
|
|
|
IEnumerable<HttpContent> content = HttpContentCollectionExtensionsTests.CreateContent();
|
|
Assert.ThrowsArgumentNull(() => { HttpContentCollectionExtensions.FindAllContentType(content, (string)null); }, "contentType");
|
|
foreach (string empty in TestData.EmptyStrings)
|
|
{
|
|
Assert.ThrowsArgumentNull(() => { HttpContentCollectionExtensions.FindAllContentType(content, empty); }, "contentType");
|
|
}
|
|
}
|
|
|
|
[Fact]
|
|
[Trait("Description", "FindAllContentType(IEnumerable<HttpContent>, string) no match.")]
|
|
public void FindAllContentTypeStringNoMatch()
|
|
{
|
|
IEnumerable<HttpContent> content = HttpContentCollectionExtensionsTests.CreateContent();
|
|
IEnumerable<HttpContent> result = null;
|
|
result = content.FindAllContentType(noMatchContentType);
|
|
Assert.Equal(0, result.Count());
|
|
|
|
ClearHeaders(content);
|
|
result = content.FindAllContentType(noMatchContentType);
|
|
Assert.Equal(0, result.Count());
|
|
}
|
|
|
|
[Fact]
|
|
[Trait("Description", "FindAllContentType(IEnumerable<HttpContent>, string) match.")]
|
|
public void FindAllContentTypeStringMatch()
|
|
{
|
|
IEnumerable<HttpContent> content = HttpContentCollectionExtensionsTests.CreateContent();
|
|
IEnumerable<HttpContent> result = content.FindAllContentType(matchContentType);
|
|
Assert.Equal(3, result.Count());
|
|
}
|
|
|
|
[Fact]
|
|
[Trait("Description", "FindAllContentType(IEnumerable<HttpContent>, MediaTypeHeaderValue) throws on null.")]
|
|
public void FindAllContentTypeMediaTypeThrows()
|
|
{
|
|
Assert.ThrowsArgumentNull(() => { HttpContentCollectionExtensions.FindAllContentType(null, new MediaTypeHeaderValue("text/plain")); }, "contents");
|
|
|
|
IEnumerable<HttpContent> content = HttpContentCollectionExtensionsTests.CreateContent();
|
|
Assert.ThrowsArgumentNull(() => { HttpContentCollectionExtensions.FindAllContentType(content, (MediaTypeHeaderValue)null); }, "contentType");
|
|
}
|
|
|
|
[Fact]
|
|
[Trait("Description", "FindAllContentType(IEnumerable<HttpContent>, MediaTypeHeaderValue) no match.")]
|
|
public void FindAllContentTypeMediaTypeNoMatch()
|
|
{
|
|
IEnumerable<HttpContent> content = HttpContentCollectionExtensionsTests.CreateContent();
|
|
IEnumerable<HttpContent> result = null;
|
|
|
|
result = content.FindAllContentType(new MediaTypeHeaderValue(noMatchContentType));
|
|
Assert.Equal(0, result.Count());
|
|
|
|
ClearHeaders(content);
|
|
result = content.FindAllContentType(new MediaTypeHeaderValue(noMatchContentType));
|
|
Assert.Equal(0, result.Count());
|
|
}
|
|
|
|
[Fact]
|
|
[Trait("Description", "FindAllContentType(IEnumerable<HttpContent>, string) match.")]
|
|
public void FindAllContentTypeMediaTypeMatch()
|
|
{
|
|
IEnumerable<HttpContent> content = HttpContentCollectionExtensionsTests.CreateContent();
|
|
IEnumerable<HttpContent> result = content.FindAllContentType(new MediaTypeHeaderValue(matchContentType));
|
|
Assert.Equal(3, result.Count());
|
|
}
|
|
|
|
[Fact]
|
|
[Trait("Description", "FirstDispositionName(IEnumerable<HttpContent>, string) throws on null.")]
|
|
public void FirstDispositionNameThrows()
|
|
{
|
|
Assert.ThrowsArgumentNull(() => { HttpContentCollectionExtensions.FirstDispositionName(null, "A"); }, "contents");
|
|
|
|
IEnumerable<HttpContent> content = HttpContentCollectionExtensionsTests.CreateContent();
|
|
Assert.ThrowsArgumentNull(() => { HttpContentCollectionExtensions.FirstDispositionName(content, null); }, "dispositionName");
|
|
foreach (string empty in TestData.EmptyStrings)
|
|
{
|
|
Assert.ThrowsArgumentNull(() => { HttpContentCollectionExtensions.FirstDispositionName(content, empty); }, "dispositionName");
|
|
}
|
|
}
|
|
|
|
[Fact]
|
|
[Trait("Description", "FirstDispositionName(IEnumerable<HttpContent>, string) no match.")]
|
|
public void FirstDispositionNameNoMatch()
|
|
{
|
|
IEnumerable<HttpContent> content = HttpContentCollectionExtensionsTests.CreateContent();
|
|
Assert.Null(content.FirstDispositionNameOrDefault(noMatchDispositionName));
|
|
|
|
ClearHeaders(content);
|
|
Assert.Throws<InvalidOperationException>(() => content.FirstDispositionName(noMatchDispositionName));
|
|
}
|
|
|
|
[Fact]
|
|
[Trait("Description", "FirstDispositionName(IEnumerable<HttpContent>, string) match.")]
|
|
public void FirstDispositionNameMatch()
|
|
{
|
|
IEnumerable<HttpContent> content = HttpContentCollectionExtensionsTests.CreateContent();
|
|
Assert.NotNull(content.FirstDispositionName(matchDispositionName));
|
|
Assert.NotNull(content.FirstDispositionName(quotedMatchDispositionName));
|
|
}
|
|
|
|
[Fact]
|
|
[Trait("Description", "FirstDispositionNameOrDefault(IEnumerable<HttpContent>, string) throws on null.")]
|
|
public void FirstDispositionNameOrDefaultThrows()
|
|
{
|
|
Assert.ThrowsArgumentNull(() => { HttpContentCollectionExtensions.FirstDispositionNameOrDefault(null, "A"); }, "contents");
|
|
|
|
IEnumerable<HttpContent> content = HttpContentCollectionExtensionsTests.CreateContent();
|
|
Assert.ThrowsArgumentNull(() => { HttpContentCollectionExtensions.FirstDispositionNameOrDefault(content, null); }, "dispositionName");
|
|
foreach (string empty in TestData.EmptyStrings)
|
|
{
|
|
Assert.ThrowsArgumentNull(() => { HttpContentCollectionExtensions.FirstDispositionNameOrDefault(content, empty); }, "dispositionName");
|
|
}
|
|
}
|
|
|
|
[Fact]
|
|
[Trait("Description", "FirstDispositionName(IEnumerable<HttpContent>, string) no match.")]
|
|
public void FirstDispositionNameOrDefaultNoMatch()
|
|
{
|
|
IEnumerable<HttpContent> content = HttpContentCollectionExtensionsTests.CreateContent();
|
|
Assert.Null(content.FirstDispositionNameOrDefault(noMatchDispositionName));
|
|
|
|
ClearHeaders(content);
|
|
Assert.Null(content.FirstDispositionNameOrDefault(noMatchDispositionName));
|
|
}
|
|
|
|
[Fact]
|
|
[Trait("Description", "FirstDispositionName(IEnumerable<HttpContent>, string) match.")]
|
|
public void FirstDispositionNameOrDefaultMatch()
|
|
{
|
|
IEnumerable<HttpContent> content = HttpContentCollectionExtensionsTests.CreateContent();
|
|
Assert.NotNull(content.FirstDispositionNameOrDefault(matchDispositionName));
|
|
Assert.NotNull(content.FirstDispositionNameOrDefault(quotedMatchDispositionName));
|
|
}
|
|
|
|
[Fact]
|
|
[Trait("Description", "FirstDispositionType(IEnumerable<HttpContent>, string) throws on null.")]
|
|
public void FirstDispositionTypeThrows()
|
|
{
|
|
Assert.ThrowsArgumentNull(() => { HttpContentCollectionExtensions.FirstDispositionType(null, "A"); }, "contents");
|
|
|
|
IEnumerable<HttpContent> content = HttpContentCollectionExtensionsTests.CreateContent();
|
|
Assert.ThrowsArgumentNull(() => { HttpContentCollectionExtensions.FirstDispositionType(content, null); }, "dispositionType");
|
|
foreach (string empty in TestData.EmptyStrings)
|
|
{
|
|
Assert.ThrowsArgumentNull(() => { HttpContentCollectionExtensions.FirstDispositionType(content, empty); }, "dispositionType");
|
|
}
|
|
}
|
|
|
|
[Fact]
|
|
[Trait("Description", "FirstDispositionType(IEnumerable<HttpContent>, string) no match.")]
|
|
public void FirstDispositionTypeNoMatch()
|
|
{
|
|
IEnumerable<HttpContent> content = HttpContentCollectionExtensionsTests.CreateContent();
|
|
Assert.Throws<InvalidOperationException>(() => content.FirstDispositionType(noMatchDispositionType));
|
|
|
|
Assert.Null(content.FirstDispositionTypeOrDefault(noMatchDispositionType));
|
|
|
|
ClearHeaders(content);
|
|
Assert.Throws<InvalidOperationException>(() => content.FirstDispositionType(noMatchDispositionType));
|
|
}
|
|
|
|
[Fact]
|
|
[Trait("Description", "FirstDispositionType(IEnumerable<HttpContent>, string) match.")]
|
|
public void FirstDispositionTypeMatch()
|
|
{
|
|
IEnumerable<HttpContent> content = HttpContentCollectionExtensionsTests.CreateContent();
|
|
Assert.NotNull(content.FirstDispositionType(matchDispositionType));
|
|
Assert.NotNull(content.FirstDispositionType(quotedMatchDispositionType));
|
|
}
|
|
|
|
[Fact]
|
|
[Trait("Description", "FirstDispositionTypeOrDefault(IEnumerable<HttpContent>, string) throws on null.")]
|
|
public void FirstDispositionTypeOrDefaultThrows()
|
|
{
|
|
Assert.ThrowsArgumentNull(() => { HttpContentCollectionExtensions.FirstDispositionTypeOrDefault(null, "A"); }, "contents");
|
|
|
|
IEnumerable<HttpContent> content = HttpContentCollectionExtensionsTests.CreateContent();
|
|
Assert.ThrowsArgumentNull(() => { HttpContentCollectionExtensions.FirstDispositionTypeOrDefault(content, null); }, "dispositionType");
|
|
foreach (string empty in TestData.EmptyStrings)
|
|
{
|
|
Assert.ThrowsArgumentNull(() => { HttpContentCollectionExtensions.FirstDispositionTypeOrDefault(content, empty); }, "dispositionType");
|
|
}
|
|
}
|
|
|
|
[Fact]
|
|
[Trait("Description", "FirstDispositionTypeOrDefault(IEnumerable<HttpContent>, string) no match.")]
|
|
public void FirstDispositionTypeOrDefaultNoMatch()
|
|
{
|
|
IEnumerable<HttpContent> content = HttpContentCollectionExtensionsTests.CreateContent();
|
|
Assert.Null(content.FirstDispositionTypeOrDefault(noMatchDispositionType));
|
|
|
|
ClearHeaders(content);
|
|
Assert.Null(content.FirstDispositionTypeOrDefault(noMatchDispositionType));
|
|
}
|
|
|
|
[Fact]
|
|
[Trait("Description", "FirstDispositionTypeOrDefault(IEnumerable<HttpContent>, string) match.")]
|
|
public void FirstDispositionTypeOrDefaultMatch()
|
|
{
|
|
IEnumerable<HttpContent> content = HttpContentCollectionExtensionsTests.CreateContent();
|
|
Assert.NotNull(content.FirstDispositionTypeOrDefault(matchDispositionType));
|
|
Assert.NotNull(content.FirstDispositionTypeOrDefault(quotedMatchDispositionType));
|
|
}
|
|
|
|
[Fact]
|
|
[Trait("Description", "FirstStart(IEnumerable<HttpContent>, string) throws on null.")]
|
|
public void FirstStartThrows()
|
|
{
|
|
Assert.ThrowsArgumentNull(() => { HttpContentCollectionExtensions.FirstStart(null, "A"); }, "contents");
|
|
|
|
IEnumerable<HttpContent> content = HttpContentCollectionExtensionsTests.CreateContent();
|
|
Assert.ThrowsArgumentNull(() => { HttpContentCollectionExtensions.FirstStart(content, null); }, "start");
|
|
foreach (string empty in TestData.EmptyStrings)
|
|
{
|
|
Assert.ThrowsArgumentNull(() => { HttpContentCollectionExtensions.FirstStart(content, empty); }, "start");
|
|
}
|
|
}
|
|
|
|
[Fact]
|
|
[Trait("Description", "FirstStart(IEnumerable<HttpContent>, string) no match.")]
|
|
public void FirstStartNoMatch()
|
|
{
|
|
IEnumerable<HttpContent> content = HttpContentCollectionExtensionsTests.CreateContent();
|
|
Assert.Throws<InvalidOperationException>(() => content.FirstStart(noMatchContentID));
|
|
}
|
|
|
|
[Fact]
|
|
[Trait("Description", "FirstStart(IEnumerable<HttpContent>, string) match.")]
|
|
public void FirstStartMatch()
|
|
{
|
|
IEnumerable<HttpContent> content = HttpContentCollectionExtensionsTests.CreateContent();
|
|
Assert.NotNull(content.FirstStart(matchContentID));
|
|
}
|
|
|
|
[Fact]
|
|
[Trait("Description", "FirstStartOrDefault(IEnumerable<HttpContent>, string) throws on null.")]
|
|
public void FirstStartOrDefaultThrows()
|
|
{
|
|
Assert.ThrowsArgumentNull(() => { HttpContentCollectionExtensions.FirstStartOrDefault(null, "A"); }, "contents");
|
|
|
|
IEnumerable<HttpContent> content = HttpContentCollectionExtensionsTests.CreateContent();
|
|
Assert.ThrowsArgumentNull(() => { HttpContentCollectionExtensions.FirstStartOrDefault(content, null); }, "start");
|
|
foreach (string empty in TestData.EmptyStrings)
|
|
{
|
|
Assert.ThrowsArgumentNull(() => { HttpContentCollectionExtensions.FirstStartOrDefault(content, empty); }, "start");
|
|
}
|
|
}
|
|
|
|
[Fact]
|
|
[Trait("Description", "FirstStartOrDefault(IEnumerable<HttpContent>, string) no match.")]
|
|
public void FirstStartOrDefaultNoMatch()
|
|
{
|
|
IEnumerable<HttpContent> content = HttpContentCollectionExtensionsTests.CreateContent();
|
|
Assert.Null(content.FirstStartOrDefault(noMatchContentID));
|
|
}
|
|
|
|
[Fact]
|
|
[Trait("Description", "FirstStartOrDefault(IEnumerable<HttpContent>, string) match.")]
|
|
public void FirstStartOrDefaultMatch()
|
|
{
|
|
IEnumerable<HttpContent> content = HttpContentCollectionExtensionsTests.CreateContent();
|
|
Assert.NotNull(content.FirstStartOrDefault(matchContentID));
|
|
}
|
|
}
|
|
} |