From 46f6e873338232f091d96530962df44f5106b607 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Thu, 17 Sep 2015 11:54:41 +0100 Subject: [PATCH] Fixes DittoConversionHandlerRegistry cache type-cast The value type for `DittoConversionHandlerRegistry`'s internal `Cache` was being cast as an array, rather than a `List`. This lead to a `NotSupportedException` ("Collection was of a fixed size.") when registering multiple conversion-handlers. --- .../DittoConversionHandlerRegistry.cs | 2 +- .../MultipleConversionHandlerTests.cs | 44 +++++++++++++++++++ .../Our.Umbraco.Ditto.Tests.csproj | 1 + 3 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 tests/Our.Umbraco.Ditto.Tests/MultipleConversionHandlerTests.cs diff --git a/src/Our.Umbraco.Ditto/ComponentModel/ConversionHandlers/DittoConversionHandlerRegistry.cs b/src/Our.Umbraco.Ditto/ComponentModel/ConversionHandlers/DittoConversionHandlerRegistry.cs index eecd1f2..77c1eb4 100644 --- a/src/Our.Umbraco.Ditto/ComponentModel/ConversionHandlers/DittoConversionHandlerRegistry.cs +++ b/src/Our.Umbraco.Ditto/ComponentModel/ConversionHandlers/DittoConversionHandlerRegistry.cs @@ -67,7 +67,7 @@ public void RegisterHandler() } else { - Cache.Add(objType, new[] { handlerType }); + Cache.Add(objType, new List { handlerType }); } } } diff --git a/tests/Our.Umbraco.Ditto.Tests/MultipleConversionHandlerTests.cs b/tests/Our.Umbraco.Ditto.Tests/MultipleConversionHandlerTests.cs new file mode 100644 index 0000000..4054d88 --- /dev/null +++ b/tests/Our.Umbraco.Ditto.Tests/MultipleConversionHandlerTests.cs @@ -0,0 +1,44 @@ +namespace Our.Umbraco.Ditto.Tests +{ + using NUnit.Framework; + using Our.Umbraco.Ditto.Tests.Mocks; + + [TestFixture] + public class MultipleConversionHandlerTests + { + public class MyModel + { + public string Name { get; set; } + } + + public class MyModelConversionHandler : DittoConversionHandler + { + public override void OnConverted() + { + Model.Name = "foo"; + } + } + + public class MyModelConversionHandler2 : DittoConversionHandler + { + public override void OnConverted() + { + Model.Name += " bar"; + } + } + + [Test] + public void Multiple_Conversion_Handlers_Registered_Same_Type() + { + Ditto.RegisterConversionHandler(); + Ditto.RegisterConversionHandler(); + + var content = new PublishedContentMock(); + + var model = content.As(); + + Assert.That(model, Is.Not.Null); + Assert.That(model.Name, Is.EqualTo("foo bar")); + } + } +} \ No newline at end of file diff --git a/tests/Our.Umbraco.Ditto.Tests/Our.Umbraco.Ditto.Tests.csproj b/tests/Our.Umbraco.Ditto.Tests/Our.Umbraco.Ditto.Tests.csproj index 9258dc9..bef0429 100644 --- a/tests/Our.Umbraco.Ditto.Tests/Our.Umbraco.Ditto.Tests.csproj +++ b/tests/Our.Umbraco.Ditto.Tests/Our.Umbraco.Ditto.Tests.csproj @@ -219,6 +219,7 @@ +