Skip to content

Commit 3879d53

Browse files
author
rstam
committed
CSHARP-1001: Fix certain output formats of JsonWriter.
1 parent 3257053 commit 3879d53

File tree

9 files changed

+332
-286
lines changed

9 files changed

+332
-286
lines changed

src/MongoDB.Bson.Tests/IO/BsonDocumentWriterTests.cs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -869,7 +869,7 @@ public void TestOneMaxKey()
869869
writer.WriteEndDocument();
870870
}
871871
var json = document.ToJson();
872-
var expected = "{ 'a' : { '$maxkey' : 1 } }".Replace("'", "\""); ;
872+
var expected = "{ 'a' : MaxKey }".Replace("'", "\""); ;
873873
Assert.AreEqual(expected, json);
874874
}
875875

@@ -886,7 +886,7 @@ public void TestOneNestedMaxKey()
886886
writer.WriteEndDocument();
887887
}
888888
var json = document.ToJson();
889-
var expected = "{ 'nested' : { 'a' : { '$maxkey' : 1 } } }".Replace("'", "\"");
889+
var expected = "{ 'nested' : { 'a' : MaxKey } }".Replace("'", "\"");
890890
Assert.AreEqual(expected, json);
891891
}
892892

@@ -902,7 +902,7 @@ public void TestTwoMaxKeys()
902902
writer.WriteEndDocument();
903903
}
904904
var json = document.ToJson();
905-
var expected = "{ 'a' : { '$maxkey' : 1 }, 'b' : { '$maxkey' : 1 } }".Replace("'", "\""); ;
905+
var expected = "{ 'a' : MaxKey, 'b' : MaxKey }".Replace("'", "\""); ;
906906
Assert.AreEqual(expected, json);
907907
}
908908

@@ -920,7 +920,7 @@ public void TestTwoNestedMaxKeys()
920920
writer.WriteEndDocument();
921921
}
922922
var json = document.ToJson();
923-
var expected = "{ 'nested' : { 'a' : { '$maxkey' : 1 }, 'b' : { '$maxkey' : 1 } } }".Replace("'", "\"");
923+
var expected = "{ 'nested' : { 'a' : MaxKey, 'b' : MaxKey } }".Replace("'", "\"");
924924
Assert.AreEqual(expected, json);
925925
}
926926

@@ -936,7 +936,7 @@ public void TestOneMinKey()
936936
writer.WriteEndDocument();
937937
}
938938
var json = document.ToJson();
939-
var expected = "{ 'a' : { '$minkey' : 1 } }".Replace("'", "\""); ;
939+
var expected = "{ 'a' : MinKey }".Replace("'", "\""); ;
940940
Assert.AreEqual(expected, json);
941941
}
942942

@@ -953,7 +953,7 @@ public void TestOneNestedMinKey()
953953
writer.WriteEndDocument();
954954
}
955955
var json = document.ToJson();
956-
var expected = "{ 'nested' : { 'a' : { '$minkey' : 1 } } }".Replace("'", "\"");
956+
var expected = "{ 'nested' : { 'a' : MinKey } }".Replace("'", "\"");
957957
Assert.AreEqual(expected, json);
958958
}
959959

@@ -969,7 +969,7 @@ public void TestTwoMinKeys()
969969
writer.WriteEndDocument();
970970
}
971971
var json = document.ToJson();
972-
var expected = "{ 'a' : { '$minkey' : 1 }, 'b' : { '$minkey' : 1 } }".Replace("'", "\""); ;
972+
var expected = "{ 'a' : MinKey, 'b' : MinKey }".Replace("'", "\""); ;
973973
Assert.AreEqual(expected, json);
974974
}
975975

@@ -987,7 +987,7 @@ public void TestTwoNestedMinKeys()
987987
writer.WriteEndDocument();
988988
}
989989
var json = document.ToJson();
990-
var expected = "{ 'nested' : { 'a' : { '$minkey' : 1 }, 'b' : { '$minkey' : 1 } } }".Replace("'", "\"");
990+
var expected = "{ 'nested' : { 'a' : MinKey, 'b' : MinKey } }".Replace("'", "\"");
991991
Assert.AreEqual(expected, json);
992992
}
993993

@@ -1338,7 +1338,7 @@ public void TestOneTimestamp()
13381338
writer.WriteEndDocument();
13391339
}
13401340
var json = document.ToJson();
1341-
var expected = "{ 'a' : { '$timestamp' : NumberLong(1) } }".Replace("'", "\""); ;
1341+
var expected = "{ 'a' : Timestamp(0, 1) }".Replace("'", "\""); ;
13421342
Assert.AreEqual(expected, json);
13431343
}
13441344

@@ -1355,7 +1355,7 @@ public void TestOneNestedTimestamp()
13551355
writer.WriteEndDocument();
13561356
}
13571357
var json = document.ToJson();
1358-
var expected = "{ 'nested' : { 'a' : { '$timestamp' : NumberLong(1) } } }".Replace("'", "\"");
1358+
var expected = "{ 'nested' : { 'a' : Timestamp(0, 1) } }".Replace("'", "\"");
13591359
Assert.AreEqual(expected, json);
13601360
}
13611361

@@ -1371,7 +1371,7 @@ public void TestTwoTimestamps()
13711371
writer.WriteEndDocument();
13721372
}
13731373
var json = document.ToJson();
1374-
var expected = "{ 'a' : { '$timestamp' : NumberLong(1) }, 'b' : { '$timestamp' : NumberLong(2) } }".Replace("'", "\""); ;
1374+
var expected = "{ 'a' : Timestamp(0, 1), 'b' : Timestamp(0, 2) }".Replace("'", "\""); ;
13751375
Assert.AreEqual(expected, json);
13761376
}
13771377

@@ -1389,7 +1389,7 @@ public void TestTwoNestedTimestamps()
13891389
writer.WriteEndDocument();
13901390
}
13911391
var json = document.ToJson();
1392-
var expected = "{ 'nested' : { 'a' : { '$timestamp' : NumberLong(1) }, 'b' : { '$timestamp' : NumberLong(2) } } }".Replace("'", "\"");
1392+
var expected = "{ 'nested' : { 'a' : Timestamp(0, 1), 'b' : Timestamp(0, 2) } }".Replace("'", "\"");
13931393
Assert.AreEqual(expected, json);
13941394
}
13951395

src/MongoDB.Bson.Tests/IO/JsonReaderTests.cs

Lines changed: 21 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
using System.IO;
1818
using System.Linq;
1919
using System.Text;
20-
using MongoDB.Bson;
2120
using MongoDB.Bson.IO;
2221
using MongoDB.Bson.Serialization;
2322
using NUnit.Framework;
@@ -238,20 +237,6 @@ public void TestDateTimeStrictIso8601()
238237
Assert.AreEqual(expected, BsonSerializer.Deserialize<DateTime>(json).ToJson(jsonSettings));
239238
}
240239

241-
[Test]
242-
public void TestDateTimeTengen()
243-
{
244-
var json = "new Date(0)";
245-
using (_bsonReader = new JsonReader(json))
246-
{
247-
Assert.AreEqual(BsonType.DateTime, _bsonReader.ReadBsonType());
248-
Assert.AreEqual(0, _bsonReader.ReadDateTime());
249-
Assert.AreEqual(BsonReaderState.Done, _bsonReader.State);
250-
}
251-
var jsonSettings = new JsonWriterSettings { OutputMode = JsonOutputMode.TenGen };
252-
Assert.AreEqual(json, BsonSerializer.Deserialize<DateTime>(json).ToJson(jsonSettings));
253-
}
254-
255240
[Test]
256241
public void TestDocumentEmpty()
257242
{
@@ -402,6 +387,8 @@ public void TestInt32Constructor(string json)
402387
Assert.AreEqual(123, _bsonReader.ReadInt32());
403388
Assert.AreEqual(BsonReaderState.Done, _bsonReader.State);
404389
}
390+
var canonicalJson = "123";
391+
Assert.AreEqual(canonicalJson, BsonSerializer.Deserialize<int>(new StringReader(json)).ToJson());
405392
}
406393

407394
[Test]
@@ -478,6 +465,8 @@ public void TestInt64ExtendedJson()
478465
Assert.AreEqual(123, _bsonReader.ReadInt64());
479466
Assert.AreEqual(BsonReaderState.Done, _bsonReader.State);
480467
}
468+
var canonicalJson = "NumberLong(123)";
469+
Assert.AreEqual(canonicalJson, BsonSerializer.Deserialize<long>(new StringReader(json)).ToJson());
481470
}
482471

483472
[Test]
@@ -521,7 +510,8 @@ public void TestMaxKeyExtendedJson()
521510
_bsonReader.ReadMaxKey();
522511
Assert.AreEqual(BsonReaderState.Done, _bsonReader.State);
523512
}
524-
Assert.AreEqual(json, BsonSerializer.Deserialize<BsonMaxKey>(json).ToJson());
513+
var canonicalJson = "MaxKey";
514+
Assert.AreEqual(canonicalJson, BsonSerializer.Deserialize<BsonMaxKey>(new StringReader(json)).ToJson());
525515
}
526516

527517
[Test]
@@ -534,6 +524,8 @@ public void TestMaxKeyExtendedJsonWithCapitalK()
534524
_bsonReader.ReadMaxKey();
535525
Assert.AreEqual(BsonReaderState.Done, _bsonReader.State);
536526
}
527+
var canonicalJson = "MaxKey";
528+
Assert.AreEqual(canonicalJson, BsonSerializer.Deserialize<BsonMaxKey>(new StringReader(json)).ToJson());
537529
}
538530

539531
[Test]
@@ -546,6 +538,7 @@ public void TestMaxKeyKeyword()
546538
_bsonReader.ReadMaxKey();
547539
Assert.AreEqual(BsonReaderState.Done, _bsonReader.State);
548540
}
541+
Assert.AreEqual(json, BsonSerializer.Deserialize<BsonMaxKey>(new StringReader(json)).ToJson());
549542
}
550543

551544
[Test]
@@ -558,7 +551,8 @@ public void TestMinKeyExtendedJson()
558551
_bsonReader.ReadMinKey();
559552
Assert.AreEqual(BsonReaderState.Done, _bsonReader.State);
560553
}
561-
Assert.AreEqual(json, BsonSerializer.Deserialize<BsonMinKey>(json).ToJson());
554+
var canonicalJson = "MinKey";
555+
Assert.AreEqual(canonicalJson, BsonSerializer.Deserialize<BsonMinKey>(new StringReader(json)).ToJson());
562556
}
563557

564558
[Test]
@@ -571,6 +565,8 @@ public void TestMinKeyExtendedJsonWithCapitalK()
571565
_bsonReader.ReadMinKey();
572566
Assert.AreEqual(BsonReaderState.Done, _bsonReader.State);
573567
}
568+
var canonicalJson = "MinKey";
569+
Assert.AreEqual(canonicalJson, BsonSerializer.Deserialize<BsonMinKey>(new StringReader(json)).ToJson());
574570
}
575571

576572
[Test]
@@ -583,6 +579,7 @@ public void TestMinKeyKeyword()
583579
_bsonReader.ReadMinKey();
584580
Assert.AreEqual(BsonReaderState.Done, _bsonReader.State);
585581
}
582+
Assert.AreEqual(json, BsonSerializer.Deserialize<BsonMinKey>(new StringReader(json)).ToJson());
586583
}
587584

588585
[Test]
@@ -669,21 +666,6 @@ public void TestObjectIdStrict()
669666
Assert.AreEqual(json, BsonSerializer.Deserialize<ObjectId>(json).ToJson(jsonSettings));
670667
}
671668

672-
[Test]
673-
public void TestObjectIdTenGen()
674-
{
675-
var json = "ObjectId(\"4d0ce088e447ad08b4721a37\")";
676-
using (_bsonReader = new JsonReader(json))
677-
{
678-
Assert.AreEqual(BsonType.ObjectId, _bsonReader.ReadBsonType());
679-
var objectId = _bsonReader.ReadObjectId();
680-
Assert.AreEqual("4d0ce088e447ad08b4721a37", objectId.ToString());
681-
Assert.AreEqual(BsonReaderState.Done, _bsonReader.State);
682-
}
683-
var settings = new JsonWriterSettings { OutputMode = JsonOutputMode.TenGen };
684-
Assert.AreEqual(json, BsonSerializer.Deserialize<ObjectId>(json).ToJson(settings));
685-
}
686-
687669
[Test]
688670
public void TestRegularExpressionShell()
689671
{
@@ -764,6 +746,7 @@ public void TestTimestampConstructor()
764746
Assert.AreEqual(new BsonTimestamp(1, 2).Value, _bsonReader.ReadTimestamp());
765747
Assert.AreEqual(BsonReaderState.Done, _bsonReader.State);
766748
}
749+
Assert.AreEqual(json, BsonSerializer.Deserialize<BsonTimestamp>(new StringReader(json)).ToJson());
767750
}
768751

769752
[Test]
@@ -776,6 +759,8 @@ public void TestTimestampExtendedJsonNewRepresentation()
776759
Assert.AreEqual(new BsonTimestamp(1, 2).Value, _bsonReader.ReadTimestamp());
777760
Assert.AreEqual(BsonReaderState.Done, _bsonReader.State);
778761
}
762+
var canonicalJson = "Timestamp(1, 2)";
763+
Assert.AreEqual(canonicalJson, BsonSerializer.Deserialize<BsonTimestamp>(new StringReader(json)).ToJson());
779764
}
780765

781766
[Test]
@@ -788,7 +773,8 @@ public void TestTimestampExtendedJsonOldRepresentation()
788773
Assert.AreEqual(1234L, _bsonReader.ReadTimestamp());
789774
Assert.AreEqual(BsonReaderState.Done, _bsonReader.State);
790775
}
791-
Assert.AreEqual(json, BsonSerializer.Deserialize<BsonTimestamp>(json).ToJson());
776+
var canonicalJson = "Timestamp(0, 1234)";
777+
Assert.AreEqual(canonicalJson, BsonSerializer.Deserialize<BsonTimestamp>(new StringReader(json)).ToJson());
792778
}
793779

794780
[Test]
@@ -801,6 +787,8 @@ public void TestUndefinedExtendedJson()
801787
_bsonReader.ReadUndefined();
802788
Assert.AreEqual(BsonReaderState.Done, _bsonReader.State);
803789
}
790+
var canonicalJson = "undefined";
791+
Assert.AreEqual(canonicalJson, BsonSerializer.Deserialize<BsonUndefined>(new StringReader(json)).ToJson());
804792
}
805793

806794
[Test]

src/MongoDB.Bson.Tests/IO/JsonWriterTests.cs

Lines changed: 17 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
using System;
1717
using System.IO;
18+
using System.Linq;
1819
using System.Text;
1920
using MongoDB.Bson;
2021
using MongoDB.Bson.IO;
@@ -292,32 +293,6 @@ public void TestDateTimeStrict()
292293
}
293294
}
294295

295-
[Test]
296-
public void TestDateTimeTenGen()
297-
{
298-
var utcNow = DateTime.UtcNow;
299-
var utcNowTruncated = utcNow.AddTicks(-(utcNow.Ticks % 10000));
300-
var ms = BsonUtils.ToMillisecondsSinceEpoch(utcNowTruncated);
301-
var tenGenDate = string.Format("new Date({0})", ms);
302-
var tests = new TestData<BsonDateTime>[]
303-
{
304-
new TestData<BsonDateTime>(new BsonDateTime(long.MinValue), "new Date(-9223372036854775808)"),
305-
new TestData<BsonDateTime>(new BsonDateTime(0), "new Date(0)"),
306-
new TestData<BsonDateTime>(new BsonDateTime(long.MaxValue), "new Date(9223372036854775807)"),
307-
new TestData<BsonDateTime>(new BsonDateTime(DateTime.MinValue), "new Date(-62135596800000)"),
308-
new TestData<BsonDateTime>(new BsonDateTime(BsonConstants.UnixEpoch), "new Date(0)"),
309-
new TestData<BsonDateTime>(new BsonDateTime(utcNowTruncated), tenGenDate),
310-
new TestData<BsonDateTime>(new BsonDateTime(DateTime.MaxValue), "new Date(253402300799999)"),
311-
};
312-
var jsonSettings = new JsonWriterSettings { OutputMode = JsonOutputMode.TenGen };
313-
foreach (var test in tests)
314-
{
315-
var json = test.Value.ToJson(jsonSettings);
316-
Assert.AreEqual(test.Expected, json);
317-
Assert.AreEqual(test.Value, BsonSerializer.Deserialize<BsonDateTime>(json));
318-
}
319-
}
320-
321296
[Test]
322297
public void TestJavaScript()
323298
{
@@ -361,7 +336,7 @@ public void TestMaxKey()
361336
{
362337
{ "maxkey", BsonMaxKey.Value }
363338
};
364-
string expected = "{ \"maxkey\" : { \"$maxkey\" : 1 } }";
339+
string expected = "{ \"maxkey\" : MaxKey }";
365340
string actual = document.ToJson();
366341
Assert.AreEqual(expected, actual);
367342
}
@@ -373,7 +348,7 @@ public void TestMinKey()
373348
{
374349
{ "minkey", BsonMinKey.Value }
375350
};
376-
string expected = "{ \"minkey\" : { \"$minkey\" : 1 } }";
351+
string expected = "{ \"minkey\" : MinKey }";
377352
string actual = document.ToJson();
378353
Assert.AreEqual(expected, actual);
379354
}
@@ -509,9 +484,9 @@ public void TestTimestamp()
509484
{
510485
var document = new BsonDocument
511486
{
512-
{ "timestamp", new BsonTimestamp(1234567890) }
487+
{ "timestamp", new BsonTimestamp(1, 2) }
513488
};
514-
string expected = "{ \"timestamp\" : { \"$timestamp\" : NumberLong(1234567890) } }";
489+
string expected = "{ \"timestamp\" : Timestamp(1, 2) }";
515490
string actual = document.ToJson();
516491
Assert.AreEqual(expected, actual);
517492
}
@@ -543,7 +518,10 @@ public void TestUtf16BigEndian()
543518
}
544519

545520
var bytes = memoryStream.ToArray();
546-
Assert.AreEqual("feff007b00200022007800220020003a002000310020007d", BsonUtils.ToHexString(bytes));
521+
var bom = new byte[] { 0xfe, 0xff };
522+
var expected = bom.Concat(encoding.GetBytes("{ \"x\" : 1 }")).ToArray();
523+
524+
CollectionAssert.AreEqual(expected, bytes);
547525
}
548526
}
549527

@@ -562,7 +540,10 @@ public void TestUtf16LittleEndian()
562540
}
563541

564542
var bytes = memoryStream.ToArray();
565-
Assert.AreEqual("fffe7b00200022007800220020003a002000310020007d00", BsonUtils.ToHexString(bytes));
543+
var bom = new byte[] { 0xff, 0xfe };
544+
var expected = bom.Concat(encoding.GetBytes("{ \"x\" : 1 }")).ToArray();
545+
546+
CollectionAssert.AreEqual(expected, bytes);
566547
}
567548
}
568549

@@ -581,7 +562,10 @@ public void TestUtf8()
581562
}
582563

583564
var bytes = memoryStream.ToArray();
584-
Assert.AreEqual("efbbbf7b20227822203a2031207d", BsonUtils.ToHexString(bytes));
565+
var bom = new byte[] { 0xef, 0xbb, 0xbf };
566+
var expected = bom.Concat(encoding.GetBytes("{ \"x\" : 1 }")).ToArray();
567+
568+
CollectionAssert.AreEqual(expected, bytes);
585569
}
586570
}
587571
}

0 commit comments

Comments
 (0)