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