public void CreateOrReplaceDictionary_DisallowsDuplicateKeys() { // Arrange ExtensibleModelBindingContext bindingContext = new ExtensibleModelBindingContext { ModelMetadata = new EmptyModelMetadataProvider().GetMetadataForType(null, typeof(Dictionary <string, int>)) }; // Act CollectionModelBinderUtil.CreateOrReplaceDictionary( bindingContext, new[] { new KeyValuePair <string, int>("forty-two", 40), new KeyValuePair <string, int>("forty-two", 2), new KeyValuePair <string, int>("forty-two", 42) }, () => new Dictionary <string, int>()); // Assert IDictionary <string, int> newModel = bindingContext.Model as IDictionary <string, int>; Assert.Equal(new[] { "forty-two" }, newModel.Keys.ToArray()); Assert.Equal(42, newModel["forty-two"]); }
public void CreateOrReplaceDictionary_OriginalModelNotDictionary_CreatesNewInstance() { // Arrange ExtensibleModelBindingContext bindingContext = new ExtensibleModelBindingContext { ModelMetadata = new EmptyModelMetadataProvider().GetMetadataForType(null, typeof(IDictionary <string, string>)) }; // Act CollectionModelBinderUtil.CreateOrReplaceDictionary( bindingContext, new Dictionary <string, string> { { "horse", "Equidae" }, { "bear", "Ursidae" } }, () => new Dictionary <string, string>()); // Assert IDictionary <string, string> newModel = bindingContext.Model as IDictionary <string, string>; Assert.Equal(new[] { "horse", "bear" }, newModel.Keys.ToArray()); Assert.Equal("Equidae", newModel["horse"]); Assert.Equal("Ursidae", newModel["bear"]); }
public void CreateOrReplaceDictionary_OriginalModelImmutable_CreatesNewInstance() { // Arrange ReadOnlyDictionary <string, string> originalModel = new ReadOnlyDictionary <string, string>(); ExtensibleModelBindingContext bindingContext = new ExtensibleModelBindingContext { ModelMetadata = new EmptyModelMetadataProvider().GetMetadataForType(() => originalModel, typeof(IDictionary <string, string>)) }; // Act CollectionModelBinderUtil.CreateOrReplaceDictionary( bindingContext, new Dictionary <string, string> { { "Hello", "World" } }, () => new Dictionary <string, string>()); // Assert IDictionary <string, string> newModel = bindingContext.Model as IDictionary <string, string>; Assert.NotSame(originalModel, newModel); Assert.Equal(new[] { "Hello" }, newModel.Keys.ToArray()); Assert.Equal("World", newModel["Hello"]); }
public void CreateOrReplaceDictionary_OriginalModelMutable_UpdatesOriginalInstance() { // Arrange Dictionary <string, string> originalInstance = new Dictionary <string, string> { { "dog", "Canidae" }, { "cat", "Felidae" } }; ExtensibleModelBindingContext bindingContext = new ExtensibleModelBindingContext { ModelMetadata = new EmptyModelMetadataProvider().GetMetadataForType(() => originalInstance, typeof(IDictionary <string, string>)) }; // Act CollectionModelBinderUtil.CreateOrReplaceDictionary( bindingContext, new Dictionary <string, string> { { "horse", "Equidae" }, { "bear", "Ursidae" } }, () => new Dictionary <string, string>()); // Assert Assert.Same(originalInstance, bindingContext.Model); Assert.Equal(new[] { "horse", "bear" }, originalInstance.Keys.ToArray()); Assert.Equal("Equidae", originalInstance["horse"]); Assert.Equal("Ursidae", originalInstance["bear"]); }
protected override bool CreateOrReplaceCollection( HttpActionContext actionContext, ModelBindingContext bindingContext, IList <KeyValuePair <TKey, TValue> > newCollection ) { CollectionModelBinderUtil.CreateOrReplaceDictionary( bindingContext, newCollection, () => new Dictionary <TKey, TValue>() ); return(true); }