Skip to content

Commit 672bd04

Browse files
author
rstam
committed
CSHARP-1001: Fix certain output formats of JsonWriter.
1 parent 570245c commit 672bd04

File tree

9 files changed

+332
-285
lines changed

9 files changed

+332
-285
lines changed

MongoDB.Bson/IO/JsonOutputMode.cs

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
* limitations under the License.
1414
*/
1515

16+
using System;
17+
1618
namespace MongoDB.Bson.IO
1719
{
1820
/// <summary>
@@ -24,17 +26,22 @@ public enum JsonOutputMode
2426
/// Output strict JSON.
2527
/// </summary>
2628
Strict,
29+
2730
/// <summary>
28-
/// Use JavaScript data types for some values.
31+
/// Use a format that can be pasted in to the MongoDB shell.
2932
/// </summary>
30-
JavaScript,
33+
Shell,
34+
3135
/// <summary>
32-
/// Use JavaScript and MongoDB data types for some values.
36+
/// Use JavaScript data types for some values.
3337
/// </summary>
34-
TenGen,
38+
[Obsolete("Use Shell instead.")]
39+
JavaScript = Shell,
40+
3541
/// <summary>
36-
/// Use a format that can be pasted in to the MongoDB shell.
42+
/// Use JavaScript and MongoDB data types for some values.
3743
/// </summary>
38-
Shell
44+
[Obsolete("Use Shell instead.")]
45+
TenGen = Shell
3946
}
4047
}

MongoDB.Bson/IO/JsonWriter.cs

Lines changed: 254 additions & 187 deletions
Large diffs are not rendered by default.

MongoDB.Bson/IO/JsonWriterSettings.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public class JsonWriterSettings : BsonWriterSettings
3434
private string _indentChars = " ";
3535
private string _newLineChars = "\r\n";
3636
private JsonOutputMode _outputMode = JsonOutputMode.Shell;
37-
private Version _shellVersion = new Version(2, 0, 0);
37+
private Version _shellVersion;
3838

3939
// constructors
4040
/// <summary>

MongoDB.BsonUnitTests/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

MongoDB.BsonUnitTests/IO/JsonReaderTests.cs

Lines changed: 21 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -238,20 +238,6 @@ public void TestDateTimeStrictIso8601()
238238
Assert.AreEqual(expected, BsonSerializer.Deserialize<DateTime>(new StringReader(json)).ToJson(jsonSettings));
239239
}
240240

241-
[Test]
242-
public void TestDateTimeTengen()
243-
{
244-
var json = "new Date(0)";
245-
using (_bsonReader = BsonReader.Create(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>(new StringReader(json)).ToJson(jsonSettings));
253-
}
254-
255241
[Test]
256242
public void TestDocumentEmpty()
257243
{
@@ -402,6 +388,8 @@ public void TestInt32Constructor(string json)
402388
Assert.AreEqual(123, _bsonReader.ReadInt32());
403389
Assert.AreEqual(BsonReaderState.Done, _bsonReader.State);
404390
}
391+
var canonicalJson = "123";
392+
Assert.AreEqual(canonicalJson, BsonSerializer.Deserialize<int>(new StringReader(json)).ToJson());
405393
}
406394

407395
[Test]
@@ -440,6 +428,8 @@ public void TestInt64ExtendedJson()
440428
Assert.AreEqual(123, _bsonReader.ReadInt64());
441429
Assert.AreEqual(BsonReaderState.Done, _bsonReader.State);
442430
}
431+
var canonicalJson = "NumberLong(123)";
432+
Assert.AreEqual(canonicalJson, BsonSerializer.Deserialize<long>(new StringReader(json)).ToJson());
443433
}
444434

445435
[Test]
@@ -483,7 +473,8 @@ public void TestMaxKeyExtendedJson()
483473
_bsonReader.ReadMaxKey();
484474
Assert.AreEqual(BsonReaderState.Done, _bsonReader.State);
485475
}
486-
Assert.AreEqual(json, BsonSerializer.Deserialize<BsonMaxKey>(new StringReader(json)).ToJson());
476+
var canonicalJson = "MaxKey";
477+
Assert.AreEqual(canonicalJson, BsonSerializer.Deserialize<BsonMaxKey>(new StringReader(json)).ToJson());
487478
}
488479

489480
[Test]
@@ -496,6 +487,8 @@ public void TestMaxKeyExtendedJsonWithCapitalK()
496487
_bsonReader.ReadMaxKey();
497488
Assert.AreEqual(BsonReaderState.Done, _bsonReader.State);
498489
}
490+
var canonicalJson = "MaxKey";
491+
Assert.AreEqual(canonicalJson, BsonSerializer.Deserialize<BsonMaxKey>(new StringReader(json)).ToJson());
499492
}
500493

501494
[Test]
@@ -508,6 +501,7 @@ public void TestMaxKeyKeyword()
508501
_bsonReader.ReadMaxKey();
509502
Assert.AreEqual(BsonReaderState.Done, _bsonReader.State);
510503
}
504+
Assert.AreEqual(json, BsonSerializer.Deserialize<BsonMaxKey>(new StringReader(json)).ToJson());
511505
}
512506

513507
[Test]
@@ -520,7 +514,8 @@ public void TestMinKeyExtendedJson()
520514
_bsonReader.ReadMinKey();
521515
Assert.AreEqual(BsonReaderState.Done, _bsonReader.State);
522516
}
523-
Assert.AreEqual(json, BsonSerializer.Deserialize<BsonMinKey>(new StringReader(json)).ToJson());
517+
var canonicalJson = "MinKey";
518+
Assert.AreEqual(canonicalJson, BsonSerializer.Deserialize<BsonMinKey>(new StringReader(json)).ToJson());
524519
}
525520

526521
[Test]
@@ -533,6 +528,8 @@ public void TestMinKeyExtendedJsonWithCapitalK()
533528
_bsonReader.ReadMinKey();
534529
Assert.AreEqual(BsonReaderState.Done, _bsonReader.State);
535530
}
531+
var canonicalJson = "MinKey";
532+
Assert.AreEqual(canonicalJson, BsonSerializer.Deserialize<BsonMinKey>(new StringReader(json)).ToJson());
536533
}
537534

538535
[Test]
@@ -545,6 +542,7 @@ public void TestMinKeyKeyword()
545542
_bsonReader.ReadMinKey();
546543
Assert.AreEqual(BsonReaderState.Done, _bsonReader.State);
547544
}
545+
Assert.AreEqual(json, BsonSerializer.Deserialize<BsonMinKey>(new StringReader(json)).ToJson());
548546
}
549547

550548
[Test]
@@ -631,21 +629,6 @@ public void TestObjectIdStrict()
631629
Assert.AreEqual(json, BsonSerializer.Deserialize<ObjectId>(new StringReader(json)).ToJson(jsonSettings));
632630
}
633631

634-
[Test]
635-
public void TestObjectIdTenGen()
636-
{
637-
var json = "ObjectId(\"4d0ce088e447ad08b4721a37\")";
638-
using (_bsonReader = BsonReader.Create(json))
639-
{
640-
Assert.AreEqual(BsonType.ObjectId, _bsonReader.ReadBsonType());
641-
var objectId = _bsonReader.ReadObjectId();
642-
Assert.AreEqual("4d0ce088e447ad08b4721a37", objectId.ToString());
643-
Assert.AreEqual(BsonReaderState.Done, _bsonReader.State);
644-
}
645-
var settings = new JsonWriterSettings { OutputMode = JsonOutputMode.TenGen };
646-
Assert.AreEqual(json, BsonSerializer.Deserialize<ObjectId>(new StringReader(json)).ToJson(settings));
647-
}
648-
649632
[Test]
650633
public void TestRegularExpressionShell()
651634
{
@@ -726,6 +709,7 @@ public void TestTimestampConstructor()
726709
Assert.AreEqual(new BsonTimestamp(1, 2).Value, _bsonReader.ReadTimestamp());
727710
Assert.AreEqual(BsonReaderState.Done, _bsonReader.State);
728711
}
712+
Assert.AreEqual(json, BsonSerializer.Deserialize<BsonTimestamp>(new StringReader(json)).ToJson());
729713
}
730714

731715
[Test]
@@ -738,6 +722,8 @@ public void TestTimestampExtendedJsonNewRepresentation()
738722
Assert.AreEqual(new BsonTimestamp(1, 2).Value, _bsonReader.ReadTimestamp());
739723
Assert.AreEqual(BsonReaderState.Done, _bsonReader.State);
740724
}
725+
var canonicalJson = "Timestamp(1, 2)";
726+
Assert.AreEqual(canonicalJson, BsonSerializer.Deserialize<BsonTimestamp>(new StringReader(json)).ToJson());
741727
}
742728

743729
[Test]
@@ -750,7 +736,8 @@ public void TestTimestampExtendedJsonOldRepresentation()
750736
Assert.AreEqual(1234L, _bsonReader.ReadTimestamp());
751737
Assert.AreEqual(BsonReaderState.Done, _bsonReader.State);
752738
}
753-
Assert.AreEqual(json, BsonSerializer.Deserialize<BsonTimestamp>(new StringReader(json)).ToJson());
739+
var canonicalJson = "Timestamp(0, 1234)";
740+
Assert.AreEqual(canonicalJson, BsonSerializer.Deserialize<BsonTimestamp>(new StringReader(json)).ToJson());
754741
}
755742

756743
[Test]
@@ -763,6 +750,8 @@ public void TestUndefinedExtendedJson()
763750
_bsonReader.ReadUndefined();
764751
Assert.AreEqual(BsonReaderState.Done, _bsonReader.State);
765752
}
753+
var canonicalJson = "undefined";
754+
Assert.AreEqual(canonicalJson, BsonSerializer.Deserialize<BsonUndefined>(new StringReader(json)).ToJson());
766755
}
767756

768757
[Test]

0 commit comments

Comments
 (0)