|
From: <fab...@us...> - 2008-10-09 16:41:58
|
Revision: 3817
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=3817&view=rev
Author: fabiomaulo
Date: 2008-10-09 16:41:52 +0000 (Thu, 09 Oct 2008)
Log Message:
-----------
Fix NH-1493
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/NHibernate.csproj
trunk/nhibernate/src/NHibernate/Properties/PropertyAccessorFactory.cs
trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate/Properties/BackFieldStrategy.cs
trunk/nhibernate/src/NHibernate.Test/PropertyTest/BackFieldAccessorFixture.cs
Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2008-10-08 15:16:52 UTC (rev 3816)
+++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2008-10-09 16:41:52 UTC (rev 3817)
@@ -450,6 +450,7 @@
<Compile Include="AdoNet\ResultSetWrapper.cs" />
<Compile Include="AdoNet\SqlClientBatchingBatcherFactory.cs" />
<Compile Include="AdoNet\TooManyRowsAffectedException.cs" />
+ <Compile Include="Properties\BackFieldStrategy.cs" />
<Compile Include="Bytecode\CodeDom\BytecodeProviderImpl.cs" />
<Compile Include="Bytecode\DefaultProxyFactoryFactory.cs" />
<Compile Include="Bytecode\IAccessOptimizer.cs" />
Added: trunk/nhibernate/src/NHibernate/Properties/BackFieldStrategy.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Properties/BackFieldStrategy.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Properties/BackFieldStrategy.cs 2008-10-09 16:41:52 UTC (rev 3817)
@@ -0,0 +1,14 @@
+namespace NHibernate.Properties
+{
+ public class BackFieldStrategy : IFieldNamingStrategy
+ {
+ #region Implementation of IFieldNamingStrategy
+
+ public string GetFieldName(string propertyName)
+ {
+ return string.Concat("<",propertyName.Trim(),">k__BackingField");
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
Property changes on: trunk/nhibernate/src/NHibernate/Properties/BackFieldStrategy.cs
___________________________________________________________________
Added: svn:mergeinfo
+
Modified: trunk/nhibernate/src/NHibernate/Properties/PropertyAccessorFactory.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Properties/PropertyAccessorFactory.cs 2008-10-08 15:16:52 UTC (rev 3816)
+++ trunk/nhibernate/src/NHibernate/Properties/PropertyAccessorFactory.cs 2008-10-09 16:41:52 UTC (rev 3817)
@@ -20,6 +20,7 @@
accessors = new Dictionary<string, IPropertyAccessor>(19);
accessors["property"] = new BasicPropertyAccessor();
accessors["field"] = new FieldAccessor();
+ accessors["backfield"] = new FieldAccessor(new BackFieldStrategy());
accessors["field.camelcase"] = new FieldAccessor(new CamelCaseStrategy());
accessors["field.camelcase-underscore"] = new FieldAccessor(new CamelCaseUnderscoreStrategy());
accessors["field.lowercase"] = new FieldAccessor(new LowerCaseStrategy());
Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2008-10-08 15:16:52 UTC (rev 3816)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2008-10-09 16:41:52 UTC (rev 3817)
@@ -747,6 +747,7 @@
<Compile Include="PropertyRef\A.cs" />
<Compile Include="PropertyRef\B.cs" />
<Compile Include="PropertyRef\KeyPropertyRefFixture.cs" />
+ <Compile Include="PropertyTest\BackFieldAccessorFixture.cs" />
<Compile Include="PropertyTest\BasicSetterExceptionFixture.cs" />
<Compile Include="PropertyTest\FieldAccessorFixture.cs" />
<Compile Include="PropertyTest\FieldCamelCaseFixture.cs" />
Added: trunk/nhibernate/src/NHibernate.Test/PropertyTest/BackFieldAccessorFixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/PropertyTest/BackFieldAccessorFixture.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/PropertyTest/BackFieldAccessorFixture.cs 2008-10-09 16:41:52 UTC (rev 3817)
@@ -0,0 +1,57 @@
+using NHibernate.Properties;
+using NUnit.Framework;
+using NUnit.Framework.SyntaxHelpers;
+
+namespace NHibernate.Test.PropertyTest
+{
+ [TestFixture]
+ public class BackFieldAccessorFixture
+ {
+ [Test]
+ public void GetValue()
+ {
+ var accessor = PropertyAccessorFactory.GetPropertyAccessor("backfield");
+ var getter = accessor.GetGetter(typeof(MyAutoProp), "AutoProp");
+ var rogetter = accessor.GetGetter(typeof(MyAutoProp), "ReadOnlyAutoProp");
+
+ Assert.That(getter.Get(new MyAutoProp { AutoProp = -1 }), Is.EqualTo(-1));
+ Assert.That(getter.Get(new MyAutoProp { AutoProp = 1 }), Is.EqualTo(1));
+
+ Assert.That(rogetter.Get(new MyAutoProp()), Is.EqualTo(0));
+ Assert.That(rogetter.Get(new MyAutoProp(5)), Is.EqualTo(5));
+ }
+
+ [Test]
+ public void SetValue()
+ {
+ var accessor = PropertyAccessorFactory.GetPropertyAccessor("backfield");
+ var getter = accessor.GetGetter(typeof(MyAutoProp), "AutoProp");
+ var setter = accessor.GetSetter(typeof(MyAutoProp), "AutoProp");
+
+ var rogetter = accessor.GetGetter(typeof(MyAutoProp), "ReadOnlyAutoProp");
+ var rosetter = accessor.GetSetter(typeof(MyAutoProp), "ReadOnlyAutoProp");
+
+ var i = new MyAutoProp { AutoProp = -1 };
+ Assert.That(getter.Get(i), Is.EqualTo(-1));
+ setter.Set(i, 5);
+ Assert.That(getter.Get(i), Is.EqualTo(5));
+
+ Assert.That(rogetter.Get(new MyAutoProp()), Is.EqualTo(0));
+ rosetter.Set(i, 123);
+ Assert.That(rogetter.Get(i), Is.EqualTo(123));
+ }
+ }
+
+ public class MyAutoProp
+ {
+ public MyAutoProp() {}
+
+ public MyAutoProp(int readOnlyAutoProp)
+ {
+ ReadOnlyAutoProp = readOnlyAutoProp;
+ }
+
+ public int AutoProp { get; set; }
+ public int ReadOnlyAutoProp { get; private set; }
+ }
+}
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|