linux-packaging-mono/external/aspnetwebstack/test/System.Web.Mvc.Test/Test/HttpFileCollectionValueProviderTest.cs
Jo Shields a575963da9 Imported Upstream version 3.6.0
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
2014-08-13 10:39:27 +01:00

150 lines
5.4 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.Globalization;
using System.Linq;
using Moq;
using Xunit;
using Assert = Microsoft.TestCommon.AssertEx;
namespace System.Web.Mvc.Test
{
public class HttpFileCollectionValueProviderTest
{
private static readonly KeyValuePair<string, HttpPostedFileBase>[] _allFiles = new KeyValuePair<string, HttpPostedFileBase>[]
{
new KeyValuePair<string, HttpPostedFileBase>("foo", new MockHttpPostedFile(42, "fooFile1")),
new KeyValuePair<string, HttpPostedFileBase>("foo", null),
new KeyValuePair<string, HttpPostedFileBase>("foo", new MockHttpPostedFile(0, "") /* empty */),
new KeyValuePair<string, HttpPostedFileBase>("foo", new MockHttpPostedFile(100, "fooFile2")),
new KeyValuePair<string, HttpPostedFileBase>("bar.baz", new MockHttpPostedFile(200, "barBazFile"))
};
[Fact]
public void ContainsPrefix()
{
// Arrange
HttpFileCollectionValueProvider valueProvider = GetValueProvider();
// Act
bool result = valueProvider.ContainsPrefix("bar");
// Assert
Assert.True(result);
}
[Fact]
public void ContainsPrefix_DoesNotContainEmptyPrefixIfBackingStoreIsEmpty()
{
// Arrange
HttpFileCollectionValueProvider valueProvider = GetEmptyValueProvider();
// Act
bool result = valueProvider.ContainsPrefix("");
// Assert
Assert.False(result);
}
[Fact]
public void ContainsPrefix_ThrowsIfPrefixIsNull()
{
// Arrange
HttpFileCollectionValueProvider valueProvider = GetValueProvider();
// Act & assert
Assert.ThrowsArgumentNull(
delegate { valueProvider.ContainsPrefix(null); }, "prefix");
}
[Fact]
public void GetValue()
{
// Arrange
HttpFileCollectionValueProvider valueProvider = GetValueProvider();
// Act
ValueProviderResult vpResult = valueProvider.GetValue("foo");
// Assert
Assert.NotNull(vpResult);
HttpPostedFileBase[] expectedRawValues = (from el in _allFiles
where el.Key == "foo"
let file = el.Value
let hasContent = (file != null && file.ContentLength > 0 && !String.IsNullOrEmpty(file.FileName))
select (hasContent) ? file : null).ToArray();
Assert.Equal(expectedRawValues, (HttpPostedFileBase[])vpResult.RawValue);
Assert.Equal("System.Web.HttpPostedFileBase[]", vpResult.AttemptedValue);
Assert.Equal(CultureInfo.InvariantCulture, vpResult.Culture);
}
[Fact]
public void GetValue_ReturnsNullIfKeyNotFound()
{
// Arrange
HttpFileCollectionValueProvider valueProvider = GetValueProvider();
// Act
ValueProviderResult vpResult = valueProvider.GetValue("bar");
// Assert
Assert.Null(vpResult);
}
[Fact]
public void GetValue_ThrowsIfKeyIsNull()
{
// Arrange
HttpFileCollectionValueProvider valueProvider = GetValueProvider();
// Act & assert
Assert.ThrowsArgumentNull(
delegate { valueProvider.GetValue(null); }, "key");
}
private static HttpFileCollectionValueProvider GetEmptyValueProvider()
{
Mock<ControllerContext> mockControllerContext = new Mock<ControllerContext>();
mockControllerContext.Setup(o => o.HttpContext.Request.Files.Count).Returns(0);
return new HttpFileCollectionValueProvider(mockControllerContext.Object);
}
private static HttpFileCollectionValueProvider GetValueProvider()
{
Mock<ControllerContext> mockControllerContext = new Mock<ControllerContext>();
mockControllerContext.Setup(o => o.HttpContext.Request.Files.Count).Returns(_allFiles.Length);
mockControllerContext.Setup(o => o.HttpContext.Request.Files.AllKeys).Returns(_allFiles.Select(f => f.Key).ToArray());
for (int i = 0; i < _allFiles.Length; i++)
{
int j = i;
mockControllerContext.Setup(o => o.HttpContext.Request.Files[j]).Returns(_allFiles[j].Value);
}
return new HttpFileCollectionValueProvider(mockControllerContext.Object);
}
private sealed class MockHttpPostedFile : HttpPostedFileBase
{
private readonly int _contentLength;
private readonly string _fileName;
public MockHttpPostedFile(int contentLength, string fileName)
{
_contentLength = contentLength;
_fileName = fileName;
}
public override int ContentLength
{
get { return _contentLength; }
}
public override string FileName
{
get { return _fileName; }
}
}
}
}