@@ -137,6 +137,21 @@ public void TestClone()
137
137
var clone = ( BsonDocument ) document . Clone ( ) ;
138
138
Assert . Equal ( clone , document ) ;
139
139
Assert . Same ( clone [ "d" ] , document [ "d" ] ) ;
140
+ Assert . False ( clone . AllowDuplicateNames ) ;
141
+ }
142
+
143
+ [ Fact ]
144
+ public void TestClone_with_duplicate_elements ( )
145
+ {
146
+ var document = new BsonDocument ( allowDuplicateNames : true )
147
+ {
148
+ { "d" , new BsonDocument ( "x" , 1 ) } ,
149
+ { "d" , new BsonDocument ( "x" , 2 ) } ,
150
+ } ;
151
+
152
+ var clone = ( BsonDocument ) document . Clone ( ) ;
153
+ clone . Should ( ) . Be ( document ) ;
154
+ clone . AllowDuplicateNames . Should ( ) . BeTrue ( ) ;
140
155
}
141
156
142
157
[ Fact ]
@@ -153,6 +168,7 @@ public void TestConstructorElement()
153
168
{
154
169
var element = new BsonElement ( "x" , 1 ) ;
155
170
var document = new BsonDocument ( element ) ;
171
+ Assert . False ( document . AllowDuplicateNames ) ;
156
172
Assert . Equal ( 1 , document . ElementCount ) ;
157
173
Assert . Equal ( 1 , document [ "x" ] . AsInt32 ) ;
158
174
Assert . Equal ( true , document . Contains ( "x" ) ) ;
@@ -168,6 +184,7 @@ public void TestConstructorElements()
168
184
new BsonElement ( "y" , 2 )
169
185
} ;
170
186
var document = new BsonDocument ( ( IEnumerable < BsonElement > ) elements ) ;
187
+ Assert . False ( document . AllowDuplicateNames ) ;
171
188
Assert . Equal ( 2 , document . ElementCount ) ;
172
189
Assert . Equal ( 1 , document [ "x" ] . AsInt32 ) ;
173
190
Assert . Equal ( 2 , document [ "y" ] . AsInt32 ) ;
@@ -184,6 +201,7 @@ public void TestConstructorElementsDocument()
184
201
{
185
202
var originalDocument = new BsonDocument { { "x" , 1 } , { "y" , 2 } } ;
186
203
var document = new BsonDocument ( originalDocument ) ;
204
+ Assert . False ( document . AllowDuplicateNames ) ;
187
205
Assert . Equal ( 2 , document . ElementCount ) ;
188
206
Assert . Equal ( 1 , document [ "x" ] . AsInt32 ) ;
189
207
Assert . Equal ( 2 , document [ "y" ] . AsInt32 ) ;
@@ -195,6 +213,20 @@ public void TestConstructorElementsDocument()
195
213
Assert . Same ( originalDocument . GetElement ( "y" ) . Value , document . GetElement ( "y" ) . Value ) ;
196
214
}
197
215
216
+ [ Fact ]
217
+ public void TestConstructorElementsDocumentDuplicateNames ( )
218
+ {
219
+ var documentA = new BsonDocument ( allowDuplicateNames : true )
220
+ {
221
+ { "x" , 1 } ,
222
+ { "x" , 2 } ,
223
+ } ;
224
+ var documentB = new BsonDocument ( documentA ) ;
225
+
226
+ documentB . AllowDuplicateNames . Should ( ) . BeTrue ( ) ;
227
+ documentB . Elements . ShouldAllBeEquivalentTo ( documentA . Elements ) ;
228
+ }
229
+
198
230
[ Fact ]
199
231
public void TestConstructorElementsParams ( )
200
232
{
@@ -203,6 +235,8 @@ public void TestConstructorElementsParams()
203
235
#pragma warning disable 618
204
236
var document = new BsonDocument ( element1 , element2 ) ;
205
237
#pragma warning restore
238
+ Assert . False ( document . AllowDuplicateNames ) ;
239
+ Assert . Equal ( 2 , document . ElementCount ) ;
206
240
Assert . Equal ( 2 , document . ElementCount ) ;
207
241
Assert . Equal ( 1 , document [ "x" ] . AsInt32 ) ;
208
242
Assert . Equal ( 2 , document [ "y" ] . AsInt32 ) ;
@@ -219,6 +253,7 @@ public void TestConstructorDictionaryGeneric()
219
253
{
220
254
var dictionary = new Dictionary < string , object > { { "x" , 1 } } ;
221
255
var document = new BsonDocument ( dictionary ) ;
256
+ Assert . False ( document . AllowDuplicateNames ) ;
222
257
Assert . Equal ( 1 , document . ElementCount ) ;
223
258
Assert . Equal ( 1 , document [ "x" ] . AsInt32 ) ;
224
259
Assert . Equal ( true , document . Contains ( "x" ) ) ;
@@ -233,6 +268,7 @@ public void TestConstructorDictionaryGenericWithKeys()
233
268
#pragma warning disable 618
234
269
var document = new BsonDocument ( dictionary , keys ) ;
235
270
#pragma warning restore
271
+ Assert . False ( document . AllowDuplicateNames ) ;
236
272
Assert . Equal ( 1 , document . ElementCount ) ;
237
273
Assert . Equal ( 1 , document [ "x" ] . AsInt32 ) ;
238
274
Assert . Equal ( true , document . Contains ( "x" ) ) ;
@@ -244,6 +280,7 @@ public void TestConstructorIDictionary()
244
280
{
245
281
var hashtable = ( IDictionary ) new Hashtable { { "x" , 1 } } ;
246
282
var document = new BsonDocument ( hashtable ) ;
283
+ Assert . False ( document . AllowDuplicateNames ) ;
247
284
Assert . Equal ( 1 , document . ElementCount ) ;
248
285
Assert . Equal ( 1 , document [ "x" ] . AsInt32 ) ;
249
286
Assert . Equal ( true , document . Contains ( "x" ) ) ;
@@ -255,6 +292,7 @@ public void TestConstructorIDictionaryGeneric()
255
292
{
256
293
var dictionary = ( IDictionary < string , object > ) new Dictionary < string , object > { { "x" , 1 } } ;
257
294
var document = new BsonDocument ( dictionary ) ;
295
+ Assert . False ( document . AllowDuplicateNames ) ;
258
296
Assert . Equal ( 1 , document . ElementCount ) ;
259
297
Assert . Equal ( 1 , document [ "x" ] . AsInt32 ) ;
260
298
Assert . Equal ( true , document . Contains ( "x" ) ) ;
@@ -269,6 +307,7 @@ public void TestConstructorIDictionaryGenericWithKeys()
269
307
#pragma warning disable 618
270
308
var document = new BsonDocument ( dictionary , keys ) ;
271
309
#pragma warning restore
310
+ Assert . False ( document . AllowDuplicateNames ) ;
272
311
Assert . Equal ( 1 , document . ElementCount ) ;
273
312
Assert . Equal ( 1 , document [ "x" ] . AsInt32 ) ;
274
313
Assert . Equal ( true , document . Contains ( "x" ) ) ;
@@ -283,6 +322,7 @@ public void TestConstructorIDictionaryWithKeys()
283
322
#pragma warning disable 618
284
323
var document = new BsonDocument ( hashtable , keys ) ;
285
324
#pragma warning restore
325
+ Assert . False ( document . AllowDuplicateNames ) ;
286
326
Assert . Equal ( 1 , document . ElementCount ) ;
287
327
Assert . Equal ( 1 , document [ "x" ] . AsInt32 ) ;
288
328
Assert . Equal ( true , document . Contains ( "x" ) ) ;
@@ -293,6 +333,7 @@ public void TestConstructorIDictionaryWithKeys()
293
333
public void TestConstructorNameValue ( )
294
334
{
295
335
var document = new BsonDocument ( "x" , 1 ) ;
336
+ Assert . False ( document . AllowDuplicateNames ) ;
296
337
Assert . Equal ( 1 , document . ElementCount ) ;
297
338
Assert . Equal ( 1 , document [ "x" ] . AsInt32 ) ;
298
339
Assert . Equal ( true , document . Contains ( "x" ) ) ;
@@ -374,6 +415,25 @@ public void TestDeepClone()
374
415
var clone = ( BsonDocument ) document . DeepClone ( ) ;
375
416
Assert . Equal ( clone , document ) ;
376
417
Assert . NotSame ( clone [ "d" ] , document [ "d" ] ) ;
418
+ Assert . False ( ( ( BsonDocument ) document [ "d" ] ) . AllowDuplicateNames ) ;
419
+ }
420
+
421
+ [ Fact ]
422
+ public void TestDeepClone_with_duplicate_elements ( )
423
+ {
424
+ var documentWithDuplicateElements = new BsonDocument ( allowDuplicateNames : true )
425
+ {
426
+ { "x" , 1 } ,
427
+ { "x" , 2 }
428
+ } ;
429
+
430
+ var document = new BsonDocument ( "d" , documentWithDuplicateElements ) ;
431
+ var clone = ( BsonDocument ) document . DeepClone ( ) ;
432
+ var clonedNestedDocument = ( BsonDocument ) clone [ "d" ] ;
433
+
434
+ clonedNestedDocument . Should ( ) . NotBeSameAs ( ( BsonDocument ) document [ "d" ] ) ;
435
+ clonedNestedDocument . Elements . ShouldAllBeEquivalentTo ( documentWithDuplicateElements . Elements ) ;
436
+ clonedNestedDocument . AllowDuplicateNames . Should ( ) . BeTrue ( ) ;
377
437
}
378
438
379
439
[ Fact ]
0 commit comments