@@ -31,15 +31,23 @@ public class BsonMemberMapTests
3131 {
3232 private class TestClass
3333 {
34+ public readonly int ReadOnlyField ;
35+
3436 public int Field ;
3537
3638 public int Property { get ; set ; }
3739
38- public int ReadOnlyProperty { get ; private set ; }
40+ public int PrivateSettableProperty { get ; private set ; }
41+
42+ public int ReadOnlyProperty
43+ {
44+ get { return Property + 1 ; }
45+ }
3946
4047 public TestClass ( )
4148 {
42- ReadOnlyProperty = 10 ;
49+ ReadOnlyField = 13 ;
50+ PrivateSettableProperty = 10 ;
4351 }
4452 }
4553
@@ -55,6 +63,15 @@ public void TestGettingAField()
5563 Assert . AreEqual ( 42 , value ) ;
5664 }
5765
66+ [ Test ]
67+ public void TestIsReadOnlyPropertyOfAField ( )
68+ {
69+ var classMap = new BsonClassMap < TestClass > ( cm => cm . AutoMap ( ) ) ;
70+ var memberMap = classMap . GetMemberMap ( "Field" ) ;
71+
72+ Assert . IsFalse ( memberMap . IsReadOnly ) ;
73+ }
74+
5875 [ Test ]
5976 public void TestSettingAField ( )
6077 {
@@ -67,6 +84,50 @@ public void TestSettingAField()
6784 Assert . AreEqual ( 42 , instance . Field ) ;
6885 }
6986
87+ [ Test ]
88+ public void TestGettingAReadOnlyField ( )
89+ {
90+ var instance = new TestClass ( ) ;
91+ var classMap = new BsonClassMap < TestClass > ( cm =>
92+ {
93+ cm . AutoMap ( ) ;
94+ cm . MapMember ( c => c . ReadOnlyField ) ;
95+ } ) ;
96+ var memberMap = classMap . GetMemberMap ( "ReadOnlyField" ) ;
97+
98+ int value = ( int ) memberMap . Getter ( instance ) ;
99+
100+ Assert . AreEqual ( 13 , value ) ;
101+ }
102+
103+ [ Test ]
104+ public void TestIsReadOnlyPropertyOfAReadOnlyField ( )
105+ {
106+ var classMap = new BsonClassMap < TestClass > ( cm =>
107+ {
108+ cm . AutoMap ( ) ;
109+ cm . MapMember ( c => c . ReadOnlyField ) ;
110+ } ) ;
111+ var memberMap = classMap . GetMemberMap ( "ReadOnlyField" ) ;
112+
113+ Assert . IsTrue ( memberMap . IsReadOnly ) ;
114+ }
115+
116+ [ Test ]
117+ [ ExpectedException ( typeof ( BsonSerializationException ) , ExpectedMessage = "The field 'System.Int32 ReadOnlyField' of class 'MongoDB.BsonUnitTests.Serialization.BsonMemberMapTests+TestClass' is readonly. To avoid this exception, call IsReadOnly to ensure that setting a value is allowed." ) ]
118+ public void TestSettingAReadOnlyField ( )
119+ {
120+ var instance = new TestClass ( ) ;
121+ var classMap = new BsonClassMap < TestClass > ( cm =>
122+ {
123+ cm . AutoMap ( ) ;
124+ cm . MapMember ( c => c . ReadOnlyField ) ;
125+ } ) ;
126+ var memberMap = classMap . GetMemberMap ( "ReadOnlyField" ) ;
127+
128+ memberMap . Setter ( instance , 12 ) ;
129+ }
130+
70131 [ Test ]
71132 public void TestGettingAProperty ( )
72133 {
@@ -79,6 +140,15 @@ public void TestGettingAProperty()
79140 Assert . AreEqual ( 42 , value ) ;
80141 }
81142
143+ [ Test ]
144+ public void TestIsReadOnlyPropertyOfAProperty ( )
145+ {
146+ var classMap = new BsonClassMap < TestClass > ( cm => cm . AutoMap ( ) ) ;
147+ var memberMap = classMap . GetMemberMap ( "Property" ) ;
148+
149+ Assert . IsFalse ( memberMap . IsReadOnly ) ;
150+ }
151+
82152 [ Test ]
83153 public void TestSettingAProperty ( )
84154 {
@@ -92,27 +162,81 @@ public void TestSettingAProperty()
92162 }
93163
94164 [ Test ]
95- public void TestGettingAReadOnlyProperty ( )
165+ public void TestGettingAPrivateSettableProperty ( )
96166 {
97167 var instance = new TestClass ( ) ;
98168 var classMap = new BsonClassMap < TestClass > ( cm => cm . AutoMap ( ) ) ;
99- var memberMap = classMap . GetMemberMap ( "ReadOnlyProperty " ) ;
169+ var memberMap = classMap . GetMemberMap ( "PrivateSettableProperty " ) ;
100170
101171 int value = ( int ) memberMap . Getter ( instance ) ;
102172
103173 Assert . AreEqual ( 10 , value ) ;
104174 }
105175
106176 [ Test ]
107- public void TestSettingAReadOnlyProperty ( )
177+ public void TestIsReadOnlyPropertyOfAPrivateSettableProperty ( )
178+ {
179+ var classMap = new BsonClassMap < TestClass > ( cm => cm . AutoMap ( ) ) ;
180+ var memberMap = classMap . GetMemberMap ( "PrivateSettableProperty" ) ;
181+
182+ Assert . IsFalse ( memberMap . IsReadOnly ) ;
183+ }
184+
185+ [ Test ]
186+ public void TestSettingAPrivateSettableProperty ( )
108187 {
109188 var instance = new TestClass ( ) ;
110189 var classMap = new BsonClassMap < TestClass > ( cm => cm . AutoMap ( ) ) ;
111- var memberMap = classMap . GetMemberMap ( "ReadOnlyProperty " ) ;
190+ var memberMap = classMap . GetMemberMap ( "PrivateSettableProperty " ) ;
112191
113192 memberMap . Setter ( instance , 42 ) ;
114193
115- Assert . AreEqual ( 42 , instance . ReadOnlyProperty ) ;
194+ Assert . AreEqual ( 42 , instance . PrivateSettableProperty ) ;
195+ }
196+
197+ [ Test ]
198+ public void TestGettingAReadOnlyProperty ( )
199+ {
200+ var instance = new TestClass { Property = 10 } ;
201+ var classMap = new BsonClassMap < TestClass > ( cm =>
202+ {
203+ cm . AutoMap ( ) ;
204+ cm . MapMember ( c => c . ReadOnlyProperty ) ;
205+ } ) ;
206+
207+ var memberMap = classMap . GetMemberMap ( "ReadOnlyProperty" ) ;
208+
209+ int value = ( int ) memberMap . Getter ( instance ) ;
210+
211+ Assert . AreEqual ( 11 , value ) ;
212+ }
213+
214+ [ Test ]
215+ public void TestIsReadOnlyPropertyOfAReadOnlyProperty ( )
216+ {
217+ var classMap = new BsonClassMap < TestClass > ( cm =>
218+ {
219+ cm . AutoMap ( ) ;
220+ cm . MapMember ( c => c . ReadOnlyProperty ) ;
221+ } ) ;
222+ var memberMap = classMap . GetMemberMap ( "ReadOnlyProperty" ) ;
223+
224+ Assert . IsTrue ( memberMap . IsReadOnly ) ;
225+ }
226+
227+ [ Test ]
228+ [ ExpectedException ( typeof ( BsonSerializationException ) , ExpectedMessage = "The property 'System.Int32 ReadOnlyProperty' of class 'MongoDB.BsonUnitTests.Serialization.BsonMemberMapTests+TestClass' has no 'set' accessor. To avoid this exception, call IsReadOnly to ensure that setting a value is allowed." ) ]
229+ public void TestSettingAReadOnlyProperty ( )
230+ {
231+ var instance = new TestClass { Property = 10 } ;
232+ var classMap = new BsonClassMap < TestClass > ( cm =>
233+ {
234+ cm . AutoMap ( ) ;
235+ cm . MapMember ( c => c . ReadOnlyProperty ) ;
236+ } ) ;
237+ var memberMap = classMap . GetMemberMap ( "ReadOnlyProperty" ) ;
238+
239+ memberMap . Setter ( instance , 12 ) ;
116240 }
117241 }
118242}
0 commit comments