From cfcb1f2e2fec9d484ca0a32f054d699eb7c8a925 Mon Sep 17 00:00:00 2001 From: Doug Bunting Date: Wed, 22 Oct 2014 23:25:43 -0700 Subject: [PATCH] Add more unit tests of `ViewDataDictionary` copy constructors --- .../ViewDataDictionaryTest.cs | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/test/Microsoft.AspNet.Mvc.Core.Test/ViewDataDictionaryTest.cs b/test/Microsoft.AspNet.Mvc.Core.Test/ViewDataDictionaryTest.cs index 7223b235bd..c7472c4fd1 100644 --- a/test/Microsoft.AspNet.Mvc.Core.Test/ViewDataDictionaryTest.cs +++ b/test/Microsoft.AspNet.Mvc.Core.Test/ViewDataDictionaryTest.cs @@ -159,6 +159,87 @@ namespace Microsoft.AspNet.Mvc.Core Assert.IsType>(viewData.Data); } + [Theory] + [InlineData(typeof(int))] + [InlineData(typeof(string))] + [InlineData(typeof(IEnumerable))] + [InlineData(typeof(List))] + [InlineData(typeof(string[]))] + [InlineData(typeof(Dictionary))] + public void CopyConstructors_CopyModelMetadata(Type type) + { + // Arrange + var metadataProvider = new EmptyModelMetadataProvider(); + var metadata = metadataProvider.GetMetadataForType(() => null, type); + var source = new ViewDataDictionary(metadataProvider) + { + ModelMetadata = metadata, + }; + + // Act + var viewData1 = new ViewDataDictionary(source); + var viewData2 = new ViewDataDictionary(source, model: null); + + // Assert + Assert.Same(metadata, viewData1.ModelMetadata); + Assert.Same(metadata, viewData2.ModelMetadata); + } + + [Fact] + public void CopyConstructors_IgnoreModelMetadata_IfForTypeObject() + { + // Arrange + var metadataProvider = new EmptyModelMetadataProvider(); + var metadata = metadataProvider.GetMetadataForType(() => null, typeof(object)); + var source = new ViewDataDictionary(metadataProvider) + { + ModelMetadata = metadata, + }; + + // Act + var viewData1 = new ViewDataDictionary(source); + var viewData2 = new ViewDataDictionary(source, model: null); + + // Assert + Assert.Null(viewData1.ModelMetadata); + Assert.Null(viewData2.ModelMetadata); + } + + [Theory] + [InlineData(typeof(int), "test string", typeof(string))] + [InlineData(typeof(string), 23, typeof(int))] + [InlineData(typeof(IEnumerable), new[] { "1", "2", "3", }, typeof(object[]))] + [InlineData(typeof(List), new[] { 1, 2, 3, }, typeof(object[]))] + public void CopyConstructors_OverrideSourceMetadata_IfModelNonNull( + Type sourceType, + object instance, + Type expectedType) + { + // Arrange + var metadataProvider = new EmptyModelMetadataProvider(); + var metadata = metadataProvider.GetMetadataForType(() => null, sourceType); + var source = new ViewDataDictionary(metadataProvider) + { + ModelMetadata = metadata, + }; + + // Act + var viewData1 = new ViewDataDictionary(source) + { + Model = instance, + }; + var viewData2 = new ViewDataDictionary(source, model: instance); + + // Assert + Assert.NotNull(viewData1.ModelMetadata); + Assert.Equal(expectedType, viewData1.ModelMetadata.ModelType); + Assert.Equal(expectedType, viewData1.ModelMetadata.RealModelType); + + Assert.NotNull(viewData2.ModelMetadata); + Assert.Equal(expectedType, viewData2.ModelMetadata.ModelType); + Assert.Equal(expectedType, viewData2.ModelMetadata.RealModelType); + } + public static TheoryData Eval_EvaluatesExpressionsData { get