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
System.Web.Helpers.Test
System.Web.Http.Integration.Test
System.Web.Http.SelfHost.Test
System.Web.Http.Test
Common
Controllers
Dispatcher
Filters
Hosting
Internal
Metadata
ModelBinding
Binders
CompositeModelBinderTest.cs
DefaultActionValueBinderTest.cs
FormDataCollectionExtensionsTest.cs
HttpBindingBehaviorAttributeTest.cs
ModelBinderAttributeTest.cs
ModelBinderConfigTest.cs
ModelBindingContextTest.cs
ModelBindingUtilTest.cs
Properties
Query
Routing
Services
Tracing
Util
Validation
ValueProviders
AuthorizeAttributeTest.cs
DictionaryExtensionsTest.cs
HttpRequestMessageExtensionsTest.cs
HttpResponseExceptionTest.cs
HttpResponseMessageExtensionsTest.cs
HttpRouteCollectionExtensionsTest.cs
HttpServerTest.cs
QueryableAttributeTest.cs
System.Web.Http.Test.csproj
packages.config
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
helix-binaries
ikdasm
ikvm
illinker-test-assets
linker
llvm
nuget-buildtasks
nunit-lite
roslyn-binaries
rx
xunit-binaries
how-to-bump-roslyn-binaries.md
ikvm-native
libgc
llvm
m4
man
mcs
mk
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
linux-packaging-mono/external/aspnetwebstack/test/System.Web.Http.Test/ModelBinding/ModelBinderAttributeTest.cs
Jo Shields a575963da9 Imported Upstream version 3.6.0
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
2014-08-13 10:39:27 +01:00

123 lines
4.9 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.Web.Http.Controllers;
using System.Web.Http.Dependencies;
using System.Web.Http.ValueProviders;
using Moq;
using Xunit;
using Assert = Microsoft.TestCommon.AssertEx;
namespace System.Web.Http.ModelBinding
{
public class ModelBinderAttributeTest
{
[Fact]
public void Empty_BinderType()
{
HttpConfiguration config = new HttpConfiguration();
config.Services.Replace(typeof(ModelBinderProvider), new CustomModelBinderProvider());
ModelBinderAttribute attr = new ModelBinderAttribute();
ModelBinderProvider provider = attr.GetModelBinderProvider(config);
Assert.IsType<CustomModelBinderProvider>(provider);
}
[Fact]
public void Illegal_BinderType()
{
// Given an illegal type.
// Constructor shouldn't throw. But trying to instantiate the model binder provider will throw.
ModelBinderAttribute attr = new ModelBinderAttribute(typeof(object));
Assert.Equal(typeof(object), attr.BinderType); // can still lookup illegal type
Assert.Throws<InvalidOperationException>(
() => attr.GetModelBinderProvider(new HttpConfiguration())
);
}
[Fact]
public void BinderType_Provided()
{
HttpConfiguration config = new HttpConfiguration();
ModelBinderAttribute attr = new ModelBinderAttribute(typeof(CustomModelBinderProvider));
ModelBinderProvider provider = attr.GetModelBinderProvider(config);
Assert.IsType<CustomModelBinderProvider>(provider);
}
[Fact]
public void BinderType_From_DependencyResolver()
{
// To test dependency resolver, the registered type and actual type should be different.
HttpConfiguration config = new HttpConfiguration();
var mockDependencyResolver = new Mock<IDependencyResolver>();
mockDependencyResolver.Setup(r => r.GetService(typeof(CustomModelBinderProvider)))
.Returns(new SecondCustomModelBinderProvider());
config.DependencyResolver = mockDependencyResolver.Object;
ModelBinderAttribute attr = new ModelBinderAttribute(typeof(CustomModelBinderProvider));
ModelBinderProvider provider = attr.GetModelBinderProvider(config);
Assert.IsType<SecondCustomModelBinderProvider>(provider);
}
[Fact]
public void BinderType_From_DependencyResolver_ReleasedWhenConfigIsDisposed()
{
// Arrange
HttpConfiguration config = new HttpConfiguration();
var mockDependencyResolver = new Mock<IDependencyResolver>();
SecondCustomModelBinderProvider provider = new SecondCustomModelBinderProvider();
mockDependencyResolver.Setup(r => r.GetService(typeof(CustomModelBinderProvider))).Returns(provider);
config.DependencyResolver = mockDependencyResolver.Object;
ModelBinderAttribute attr = new ModelBinderAttribute(typeof(CustomModelBinderProvider));
attr.GetModelBinderProvider(config);
// Act
config.Dispose();
// Assert
mockDependencyResolver.Verify(dr => dr.Dispose(), Times.Once());
}
[Fact]
public void Set_ModelBinder_And_ValueProviders()
{
HttpConfiguration config = new HttpConfiguration();
ModelBinderAttribute attr = new ValueProviderAttribute(typeof(CustomValueProviderFactory)) { BinderType = typeof(CustomModelBinderProvider) };
IEnumerable<ValueProviderFactory> vpfs = attr.GetValueProviderFactories(config);
Assert.IsType<CustomModelBinderProvider>(attr.GetModelBinderProvider(config));
Assert.Equal(1, vpfs.Count());
Assert.IsType<CustomValueProviderFactory>(vpfs.First());
}
private class CustomModelBinderProvider : ModelBinderProvider
{
public override IModelBinder GetBinder(HttpActionContext actionContext, ModelBindingContext bindingContext)
{
throw new NotImplementedException();
}
}
private class SecondCustomModelBinderProvider : ModelBinderProvider
{
public override IModelBinder GetBinder(HttpActionContext actionContext, ModelBindingContext bindingContext)
{
throw new NotImplementedException();
}
}
private class CustomValueProviderFactory : ValueProviderFactory
{
public override IValueProvider GetValueProvider(HttpActionContext actionContext)
{
throw new NotImplementedException();
}
}
}
}