From: <fab...@us...> - 2011-04-06 12:43:48
|
Revision: 5619 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5619&view=rev Author: fabiomaulo Date: 2011-04-06 12:43:42 +0000 (Wed, 06 Apr 2011) Log Message: ----------- CustomizerHolder Merge Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersHolder.cs trunk/nhibernate/src/NHibernate/NHibernate.csproj trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/MappingByCode/CustomizerHolderMergeTest.cs Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersHolder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersHolder.cs 2011-04-05 23:07:24 UTC (rev 5618) +++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersHolder.cs 2011-04-06 12:43:42 UTC (rev 5619) @@ -293,8 +293,48 @@ InvokeCustomizers(mapKeyElementCustomizers, member, mapper); } + public void Merge(CustomizersHolder source) + { + MergeDictionary(rootClassCustomizers, source.rootClassCustomizers); + MergeDictionary(subclassCustomizers, source.subclassCustomizers); + MergeDictionary(joinedClassCustomizers, source.joinedClassCustomizers); + MergeDictionary(unionClassCustomizers, source.unionClassCustomizers); + MergeDictionary(componentClassCustomizers, source.componentClassCustomizers); + MergeDictionary(joinCustomizers, source.joinCustomizers); + MergeDictionary(propertyCustomizers, source.propertyCustomizers); + MergeDictionary(manyToOneCustomizers, source.manyToOneCustomizers); + MergeDictionary(oneToOneCustomizers, source.oneToOneCustomizers); + MergeDictionary(anyCustomizers, source.anyCustomizers); + MergeDictionary(setCustomizers, source.setCustomizers); + MergeDictionary(bagCustomizers, source.bagCustomizers); + MergeDictionary(listCustomizers, source.listCustomizers); + MergeDictionary(mapCustomizers, source.mapCustomizers); + MergeDictionary(idBagCustomizers, source.idBagCustomizers); + MergeDictionary(collectionCustomizers, source.collectionCustomizers); + MergeDictionary(componentPropertyCustomizers, source.componentPropertyCustomizers); + MergeDictionary(collectionRelationManyToManyCustomizers, source.collectionRelationManyToManyCustomizers); + MergeDictionary(collectionRelationElementCustomizers, source.collectionRelationElementCustomizers); + MergeDictionary(collectionRelationOneToManyCustomizers, source.collectionRelationOneToManyCustomizers); + MergeDictionary(mapKeyManyToManyCustomizers, source.mapKeyManyToManyCustomizers); + MergeDictionary(mapKeyElementCustomizers, source.mapKeyElementCustomizers); + } + #endregion + private void MergeDictionary<TSubject, TCustomizable>(Dictionary<TSubject, List<Action<TCustomizable>>> destination,Dictionary<TSubject, List<Action<TCustomizable>>> source) + { + foreach (var element in source) + { + List<Action<TCustomizable>> actions; + if (!destination.TryGetValue(element.Key, out actions)) + { + actions = new List<Action<TCustomizable>>(); + destination[element.Key] = actions; + } + actions.AddRange(element.Value); + } + } + private void AddCustomizer<TSubject, TCustomizable>(IDictionary<TSubject, List<Action<TCustomizable>>> customizers, TSubject member, Action<TCustomizable> customizer) { Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj =================================================================== --- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2011-04-05 23:07:24 UTC (rev 5618) +++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2011-04-06 12:43:42 UTC (rev 5619) @@ -1774,6 +1774,7 @@ <Install>true</Install> </BootstrapperPackage> </ItemGroup> + <ItemGroup /> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <!-- To modify your build process, add your task inside one of the targets below and uncomment it. Other similar extension points exist, see Microsoft.Common.targets. Added: trunk/nhibernate/src/NHibernate.Test/MappingByCode/CustomizerHolderMergeTest.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/MappingByCode/CustomizerHolderMergeTest.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/CustomizerHolderMergeTest.cs 2011-04-06 12:43:42 UTC (rev 5619) @@ -0,0 +1,325 @@ +using NHibernate.Mapping.ByCode; +using NHibernate.Mapping.ByCode.Impl; +using NUnit.Framework; +using SharpTestsEx; + +namespace NHibernate.Test.MappingByCode +{ + public class CustomizerHolderMergeTest + { + private class MyClass + { + public string Bar { get; set; } + } + + private PropertyPath propertyPath = new PropertyPath(null, typeof(MyClass).GetProperty("Bar")); + + [Test] + public void MergeShouldMergeAnyMapper() + { + var emptyHolder = new CustomizersHolder(); + var holder = new CustomizersHolder(); + var called = false; + + holder.AddCustomizer(propertyPath, (IAnyMapper x) => called = true); + emptyHolder.Merge(holder); + emptyHolder.InvokeCustomizers(propertyPath, (IAnyMapper)null); + + called.Should().Be.True(); + } + + [Test] + public void MergeShouldMergeBagPropertiesMapper() + { + var emptyHolder = new CustomizersHolder(); + var holder = new CustomizersHolder(); + var called = false; + + holder.AddCustomizer(propertyPath, (IBagPropertiesMapper x) => called = true); + emptyHolder.Merge(holder); + emptyHolder.InvokeCustomizers(propertyPath, (IBagPropertiesMapper)null); + + called.Should().Be.True(); + } + + [Test] + public void MergeShouldMergeIdBagPropertiesMapper() + { + var emptyHolder = new CustomizersHolder(); + var holder = new CustomizersHolder(); + var called = false; + + holder.AddCustomizer(propertyPath, (IIdBagPropertiesMapper x) => called = true); + emptyHolder.Merge(holder); + emptyHolder.InvokeCustomizers(propertyPath, (IIdBagPropertiesMapper)null); + + called.Should().Be.True(); + } + + [Test] + public void MergeShouldMergeCollectionPropertiesMapper() + { + var emptyHolder = new CustomizersHolder(); + var holder = new CustomizersHolder(); + var called = false; + + holder.AddCustomizer(propertyPath, (ICollectionPropertiesMapper x) => called = true); + emptyHolder.Merge(holder); + emptyHolder.InvokeCustomizers(propertyPath, (IBagPropertiesMapper)null); + + called.Should().Be.True(); + } + + [Test] + public void MergeShouldMergeElementMapper() + { + var emptyHolder = new CustomizersHolder(); + var holder = new CustomizersHolder(); + var called = false; + + holder.AddCustomizer(propertyPath, (IElementMapper x) => called = true); + emptyHolder.Merge(holder); + emptyHolder.InvokeCustomizers(propertyPath, (IElementMapper)null); + + called.Should().Be.True(); + } + + [Test] + public void MergeShouldMergeManyToManyMapper() + { + var emptyHolder = new CustomizersHolder(); + var holder = new CustomizersHolder(); + var called = false; + + holder.AddCustomizer(propertyPath, (IManyToManyMapper x) => called = true); + emptyHolder.Merge(holder); + emptyHolder.InvokeCustomizers(propertyPath, (IManyToManyMapper)null); + + called.Should().Be.True(); + } + + [Test] + public void MergeShouldMergeOneToManyMapper() + { + var emptyHolder = new CustomizersHolder(); + var holder = new CustomizersHolder(); + var called = false; + + holder.AddCustomizer(propertyPath, (IOneToManyMapper x) => called = true); + emptyHolder.Merge(holder); + emptyHolder.InvokeCustomizers(propertyPath, (IOneToManyMapper)null); + + called.Should().Be.True(); + } + + [Test] + public void MergeShouldMergeComponentAttributesMapperOnProperty() + { + var emptyHolder = new CustomizersHolder(); + var holder = new CustomizersHolder(); + var called = false; + + holder.AddCustomizer(propertyPath, (IComponentAttributesMapper x) => called = true); + emptyHolder.Merge(holder); + emptyHolder.InvokeCustomizers(propertyPath, (IComponentAttributesMapper)null); + + called.Should().Be.True(); + } + + [Test] + public void MergeShouldMergeListPropertiesMapper() + { + var emptyHolder = new CustomizersHolder(); + var holder = new CustomizersHolder(); + var called = false; + + holder.AddCustomizer(propertyPath, (IListPropertiesMapper x) => called = true); + emptyHolder.Merge(holder); + emptyHolder.InvokeCustomizers(propertyPath, (IListPropertiesMapper)null); + + called.Should().Be.True(); + } + + [Test] + public void MergeShouldMergeManyToOneMapper() + { + var emptyHolder = new CustomizersHolder(); + var holder = new CustomizersHolder(); + var called = false; + + holder.AddCustomizer(propertyPath, (IManyToOneMapper x) => called = true); + emptyHolder.Merge(holder); + emptyHolder.InvokeCustomizers(propertyPath, (IManyToOneMapper)null); + + called.Should().Be.True(); + } + + [Test] + public void MergeShouldMergeMapPropertiesMapper() + { + var emptyHolder = new CustomizersHolder(); + var holder = new CustomizersHolder(); + var called = false; + + holder.AddCustomizer(propertyPath, (IMapPropertiesMapper x) => called = true); + emptyHolder.Merge(holder); + emptyHolder.InvokeCustomizers(propertyPath, (IMapPropertiesMapper)null); + + called.Should().Be.True(); + } + + [Test] + public void MergeShouldMergeMapKeyMapper() + { + var emptyHolder = new CustomizersHolder(); + var holder = new CustomizersHolder(); + var called = false; + + holder.AddCustomizer(propertyPath, (IMapKeyMapper x) => called = true); + emptyHolder.Merge(holder); + emptyHolder.InvokeCustomizers(propertyPath, (IMapKeyMapper)null); + + called.Should().Be.True(); + } + + [Test] + public void MergeShouldMergeMapKeyManyToManyMapper() + { + var emptyHolder = new CustomizersHolder(); + var holder = new CustomizersHolder(); + var called = false; + + holder.AddCustomizer(propertyPath, (IMapKeyManyToManyMapper x) => called = true); + emptyHolder.Merge(holder); + emptyHolder.InvokeCustomizers(propertyPath, (IMapKeyManyToManyMapper)null); + + called.Should().Be.True(); + } + + [Test] + public void MergeShouldMergeOneToOneMapper() + { + var emptyHolder = new CustomizersHolder(); + var holder = new CustomizersHolder(); + var called = false; + + holder.AddCustomizer(propertyPath, (IOneToOneMapper x) => called = true); + emptyHolder.Merge(holder); + emptyHolder.InvokeCustomizers(propertyPath, (IOneToOneMapper)null); + + called.Should().Be.True(); + } + + [Test] + public void MergeShouldMergePropertyMapper() + { + var emptyHolder = new CustomizersHolder(); + var holder = new CustomizersHolder(); + var called = false; + + holder.AddCustomizer(propertyPath, (IPropertyMapper x) => called = true); + emptyHolder.Merge(holder); + emptyHolder.InvokeCustomizers(propertyPath, (IPropertyMapper)null); + + called.Should().Be.True(); + } + + [Test] + public void MergeShouldMergeSetPropertiesMapper() + { + var emptyHolder = new CustomizersHolder(); + var holder = new CustomizersHolder(); + var called = false; + + holder.AddCustomizer(propertyPath, (ISetPropertiesMapper x) => called = true); + emptyHolder.Merge(holder); + emptyHolder.InvokeCustomizers(propertyPath, (ISetPropertiesMapper)null); + + called.Should().Be.True(); + } + + [Test] + public void MergeShouldMergeJoinedSubclassAttributesMapper() + { + var emptyHolder = new CustomizersHolder(); + var holder = new CustomizersHolder(); + var called = false; + + holder.AddCustomizer(typeof(MyClass), (IJoinedSubclassAttributesMapper x) => called = true); + emptyHolder.Merge(holder); + emptyHolder.InvokeCustomizers(typeof(MyClass), (IJoinedSubclassAttributesMapper)null); + + called.Should().Be.True(); + } + + [Test] + public void MergeShouldMergeClassMapper() + { + var emptyHolder = new CustomizersHolder(); + var holder = new CustomizersHolder(); + var called = false; + + holder.AddCustomizer(typeof(MyClass), (IClassMapper x) => called = true); + emptyHolder.Merge(holder); + emptyHolder.InvokeCustomizers(typeof(MyClass), (IClassMapper)null); + + called.Should().Be.True(); + } + + [Test] + public void MergeShouldMergeSubclassMapper() + { + var emptyHolder = new CustomizersHolder(); + var holder = new CustomizersHolder(); + var called = false; + + holder.AddCustomizer(typeof(MyClass), (ISubclassMapper x) => called = true); + emptyHolder.Merge(holder); + emptyHolder.InvokeCustomizers(typeof(MyClass), (ISubclassMapper)null); + + called.Should().Be.True(); + } + + [Test] + public void MergeShouldMergeJoinAttributesMapper() + { + var emptyHolder = new CustomizersHolder(); + var holder = new CustomizersHolder(); + var called = false; + + holder.AddCustomizer(typeof(MyClass), (IJoinAttributesMapper x) => called = true); + emptyHolder.Merge(holder); + emptyHolder.InvokeCustomizers(typeof(MyClass), (IJoinAttributesMapper)null); + + called.Should().Be.True(); + } + + [Test] + public void MergeShouldMergeUnionSubclassAttributesMapper() + { + var emptyHolder = new CustomizersHolder(); + var holder = new CustomizersHolder(); + var called = false; + + holder.AddCustomizer(typeof(MyClass), (IUnionSubclassAttributesMapper x) => called = true); + emptyHolder.Merge(holder); + emptyHolder.InvokeCustomizers(typeof(MyClass), (IUnionSubclassAttributesMapper)null); + + called.Should().Be.True(); + } + + [Test] + public void MergeShouldMergeComponentAttributesMapper() + { + var emptyHolder = new CustomizersHolder(); + var holder = new CustomizersHolder(); + var called = false; + + holder.AddCustomizer(typeof(MyClass), (IComponentAttributesMapper x) => called = true); + emptyHolder.Merge(holder); + emptyHolder.InvokeCustomizers(typeof(MyClass), (IComponentAttributesMapper)null); + + called.Should().Be.True(); + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-04-05 23:07:24 UTC (rev 5618) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-04-06 12:43:42 UTC (rev 5619) @@ -508,6 +508,7 @@ <Compile Include="Linq\ByMethod\SumTests.cs" /> <Compile Include="Logging\Log4NetLoggerTest.cs" /> <Compile Include="Logging\LoggerProviderTest.cs" /> + <Compile Include="MappingByCode\CustomizerHolderMergeTest.cs" /> <Compile Include="MappingByCode\ExplicitlyDeclaredModelTests\SplitPropertiesRegistrationTests.cs" /> <Compile Include="MappingByCode\ExpliticMappingTests\BasicMappingOfSimpleClass.cs" /> <Compile Include="MappingByCode\ExpliticMappingTests\ColumnsNamingConvetions.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |