@@ -31,15 +31,23 @@ public class BsonMemberMapTests
31
31
{
32
32
private class TestClass
33
33
{
34
+ public readonly int ReadOnlyField ;
35
+
34
36
public int Field ;
35
37
36
38
public int Property { get ; set ; }
37
39
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
+ }
39
46
40
47
public TestClass ( )
41
48
{
42
- ReadOnlyProperty = 10 ;
49
+ ReadOnlyField = 13 ;
50
+ PrivateSettableProperty = 10 ;
43
51
}
44
52
}
45
53
@@ -55,6 +63,15 @@ public void TestGettingAField()
55
63
Assert . AreEqual ( 42 , value ) ;
56
64
}
57
65
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
+
58
75
[ Test ]
59
76
public void TestSettingAField ( )
60
77
{
@@ -67,6 +84,50 @@ public void TestSettingAField()
67
84
Assert . AreEqual ( 42 , instance . Field ) ;
68
85
}
69
86
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
+
70
131
[ Test ]
71
132
public void TestGettingAProperty ( )
72
133
{
@@ -79,6 +140,15 @@ public void TestGettingAProperty()
79
140
Assert . AreEqual ( 42 , value ) ;
80
141
}
81
142
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
+
82
152
[ Test ]
83
153
public void TestSettingAProperty ( )
84
154
{
@@ -92,27 +162,81 @@ public void TestSettingAProperty()
92
162
}
93
163
94
164
[ Test ]
95
- public void TestGettingAReadOnlyProperty ( )
165
+ public void TestGettingAPrivateSettableProperty ( )
96
166
{
97
167
var instance = new TestClass ( ) ;
98
168
var classMap = new BsonClassMap < TestClass > ( cm => cm . AutoMap ( ) ) ;
99
- var memberMap = classMap . GetMemberMap ( "ReadOnlyProperty " ) ;
169
+ var memberMap = classMap . GetMemberMap ( "PrivateSettableProperty " ) ;
100
170
101
171
int value = ( int ) memberMap . Getter ( instance ) ;
102
172
103
173
Assert . AreEqual ( 10 , value ) ;
104
174
}
105
175
106
176
[ 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 ( )
108
187
{
109
188
var instance = new TestClass ( ) ;
110
189
var classMap = new BsonClassMap < TestClass > ( cm => cm . AutoMap ( ) ) ;
111
- var memberMap = classMap . GetMemberMap ( "ReadOnlyProperty " ) ;
190
+ var memberMap = classMap . GetMemberMap ( "PrivateSettableProperty " ) ;
112
191
113
192
memberMap . Setter ( instance , 42 ) ;
114
193
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 ) ;
116
240
}
117
241
}
118
242
}
0 commit comments