From: <fab...@us...> - 2011-04-10 20:48:44
|
Revision: 5658 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5658&view=rev Author: fabiomaulo Date: 2011-04-10 20:48:38 +0000 (Sun, 10 Apr 2011) Log Message: ----------- SimpleModelInspector with default pattern to discover Arrays properties Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Mapping/ByCode/SimpleModelInspector.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/MappingByCode/MixAutomapping/ArrayCollectionTests.cs Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/SimpleModelInspector.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/ByCode/SimpleModelInspector.cs 2011-04-10 20:43:13 UTC (rev 5657) +++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/SimpleModelInspector.cs 2011-04-10 20:48:38 UTC (rev 5658) @@ -39,7 +39,7 @@ private Func<MemberInfo, bool, bool> isBag; private Func<MemberInfo, bool, bool> isDictionary; private Func<MemberInfo, bool, bool> isIdBag = (m, declared) => declared; - private Func<MemberInfo, bool, bool> isList; + private Func<MemberInfo, bool, bool> isList = (m, declared) => declared; public SimpleModelInspector() { @@ -47,12 +47,17 @@ isComponent = (t, declared) => declared || MatchComponentPattern(t); isPersistentProperty = (m, declared) => declared || MatchNoReadOnlyPropertyPattern(m); isSet = (m, declared) => declared || MatchCollection(m, MatchSetMember); - isArray = (m, declared) => declared; + isArray = (m, declared) => declared || MatchCollection(m, MatchArrayMember); isBag = (m, declared) => declared || MatchCollection(m, MatchBagMember); isDictionary = (m, declared) => declared || MatchCollection(m, MatchDictionaryMember); - isList = (m, declared) => declared; } + protected bool MatchArrayMember(MemberInfo subject) + { + System.Type memberType = subject.GetPropertyOrFieldType(); + return memberType.IsArray && memberType.GetElementType() != typeof(byte); + } + protected bool MatchDictionaryMember(MemberInfo subject) { System.Type memberType = subject.GetPropertyOrFieldType(); Added: trunk/nhibernate/src/NHibernate.Test/MappingByCode/MixAutomapping/ArrayCollectionTests.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/MappingByCode/MixAutomapping/ArrayCollectionTests.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/MixAutomapping/ArrayCollectionTests.cs 2011-04-10 20:48:38 UTC (rev 5658) @@ -0,0 +1,114 @@ +using System.Collections.Generic; +using System.Reflection; +using NHibernate.Mapping.ByCode; +using NUnit.Framework; +using SharpTestsEx; + +namespace NHibernate.Test.MappingByCode.MixAutomapping +{ + public class ArrayCollectionTests + { + private class Entity + { + private ICollection<string> others; + private string[] emails; + public string[] NickNames { get; set; } + public byte[] Photo { get; set; } + + public ICollection<string> Emails + { + get { return emails; } + } + + public ICollection<string> Others + { + get { return others; } + } + public IList<string> NoArray + { + get { return null; } + } + public string Simple { get; set; } + } + + [Test] + public void MatchWithArrayProperty() + { + var mi = typeof(Entity).GetProperty("NickNames"); + var autoinspector = new SimpleModelInspector(); + var inspector = (IModelInspector)autoinspector; + + inspector.IsArray(mi).Should().Be.True(); + } + + [Test] + public void MatchWithArrayField() + { + var mi = typeof(Entity).GetField("emails", BindingFlags.NonPublic | BindingFlags.Instance); + var autoinspector = new SimpleModelInspector(); + var inspector = (IModelInspector)autoinspector; + + inspector.IsArray(mi).Should().Be.True(); + } + + [Test] + public void MatchWithCollectionPropertyAndArrayField() + { + var mi = typeof(Entity).GetProperty("Emails"); + var autoinspector = new SimpleModelInspector(); + var inspector = (IModelInspector)autoinspector; + + inspector.IsArray(mi).Should().Be.True(); + } + + [Test] + public void NotMatchWithCollectionField() + { + var mi = typeof(Entity).GetField("others", BindingFlags.NonPublic | BindingFlags.Instance); + var autoinspector = new SimpleModelInspector(); + var inspector = (IModelInspector)autoinspector; + + inspector.IsArray(mi).Should().Be.False(); + } + + [Test] + public void NotMatchWithCollectionProperty() + { + var mi = typeof(Entity).GetProperty("Others"); + var autoinspector = new SimpleModelInspector(); + var inspector = (IModelInspector)autoinspector; + + inspector.IsArray(mi).Should().Be.False(); + } + + [Test] + public void NotMatchWithNoArrayCollectionProperty() + { + var mi = typeof(Entity).GetProperty("NoArray"); + var autoinspector = new SimpleModelInspector(); + var inspector = (IModelInspector)autoinspector; + + inspector.IsArray(mi).Should().Be.False(); + } + + [Test] + public void NotMatchWithStringProperty() + { + var mi = typeof(Entity).GetProperty("Simple"); + var autoinspector = new SimpleModelInspector(); + var inspector = (IModelInspector)autoinspector; + + inspector.IsArray(mi).Should().Be.False(); + } + + [Test] + public void NotMatchWithByteArrayProperty() + { + var mi = typeof(Entity).GetProperty("Photo"); + var autoinspector = new SimpleModelInspector(); + var inspector = (IModelInspector)autoinspector; + + inspector.IsArray(mi).Should().Be.False(); + } + } +} \ 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-10 20:43:13 UTC (rev 5657) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-04-10 20:48:38 UTC (rev 5658) @@ -541,6 +541,7 @@ <Compile Include="MappingByCode\MappersTests\IdBagMapperTest.cs" /> <Compile Include="MappingByCode\MappersTests\JoinMapperTests.cs" /> <Compile Include="MappingByCode\MappersTests\SubclassMapperWithJoinPropertiesTest.cs" /> + <Compile Include="MappingByCode\MixAutomapping\ArrayCollectionTests.cs" /> <Compile Include="MappingByCode\MixAutomapping\BagCollectionTests.cs" /> <Compile Include="MappingByCode\MixAutomapping\ComponentsTests.cs" /> <Compile Include="MappingByCode\MixAutomapping\DictionaryCollectionTests.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |