Пример #1
0
        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"]);
        }
Пример #2
0
        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"]);
        }
Пример #3
0
        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"]);
        }
Пример #4
0
        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"]);
        }
Пример #5
0
 protected override bool CreateOrReplaceCollection(
     HttpActionContext actionContext,
     ModelBindingContext bindingContext,
     IList <KeyValuePair <TKey, TValue> > newCollection
     )
 {
     CollectionModelBinderUtil.CreateOrReplaceDictionary(
         bindingContext,
         newCollection,
         () => new Dictionary <TKey, TValue>()
         );
     return(true);
 }