|
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.
|