Skip to content

Commit

Permalink
CSHARP933: Improve IBsonSerializer design.
Browse files Browse the repository at this point in the history
  • Loading branch information
rstam committed Apr 29, 2014
1 parent a8ae8e0 commit 5d7dcb8
Show file tree
Hide file tree
Showing 358 changed files with 15,689 additions and 13,374 deletions.
7 changes: 3 additions & 4 deletions src/MongoDB.Bson.Tests/BsonExtensionMethodsTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@

using System.Linq;
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Options;
using NUnit.Framework;

namespace MongoDB.Bson.Tests
Expand Down Expand Up @@ -51,7 +50,7 @@ public void TestToBson()
public void TestToBsonIdFirst()
{
var c = new C { N = 1, Id = ObjectId.Empty };
var bson = c.ToBson(DocumentSerializationOptions.SerializeIdFirstInstance);
var bson = c.ToBson(configurator: b => { b.SerializeIdFirst = true; });
var expected = new byte[] { 29, 0, 0, 0, 7, 95, 105, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 78, 0, 1, 0, 0, 0, 0 };
Assert.IsTrue(expected.SequenceEqual(bson));
}
Expand Down Expand Up @@ -82,7 +81,7 @@ public void TestToBsonDocument()
public void TestToBsonDocumentIdFirst()
{
var c = new C { N = 1, Id = ObjectId.Empty };
var document = c.ToBsonDocument(DocumentSerializationOptions.SerializeIdFirstInstance);
var document = c.ToBsonDocument(configurator: b => { b.SerializeIdFirst = true; });
Assert.AreEqual(2, document.ElementCount);
Assert.AreEqual("_id", document.GetElement(0).Name);
Assert.AreEqual("N", document.GetElement(1).Name);
Expand Down Expand Up @@ -114,7 +113,7 @@ public void TestToJson()
public void TestToJsonIdFirst()
{
var c = new C { N = 1, Id = ObjectId.Empty };
var json = c.ToJson(DocumentSerializationOptions.SerializeIdFirstInstance);
var json = c.ToJson(configurator: b => { b.SerializeIdFirst = true; });
var expected = "{ '_id' : ObjectId('000000000000000000000000'), 'N' : 1 }".Replace("'", "\"");
Assert.AreEqual(expected, json);
}
Expand Down
27 changes: 4 additions & 23 deletions src/MongoDB.Bson.Tests/IO/BsonBufferTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
using System.IO;
using System.Text;
using MongoDB.Bson;
using MongoDB.Bson.IO;
using MongoDB.Bson.Serialization;
using NUnit.Framework;

Expand Down Expand Up @@ -83,17 +82,17 @@ public void TestReadStringInvalidLength()
{
var bytes = new byte[] { 13, 0, 0, 0, (byte)BsonType.String, (byte)'s', 0, 0, 0, 0, 0, 0, 0 };
Assert.AreEqual(13, bytes.Length);
var ex = Assert.Throws<FileFormatException>(() => { BsonSerializer.Deserialize<BsonDocument>(bytes); });
Assert.AreEqual("Invalid string length: 0 (the length includes the null terminator so it must be greater than or equal to 1).", ex.Message);
var ex = Assert.Throws<FormatException>(() => { BsonSerializer.Deserialize<BsonDocument>(bytes); });
Assert.AreEqual("Invalid string length: 0.", ex.Message);
}

[Test]
public void TestReadStringMissingNullTerminator()
{
var bytes = new byte[] { 13, 0, 0, 0, (byte)BsonType.String, (byte)'s', 0, 1, 0, 0, 0, 123, 0 };
Assert.AreEqual(13, bytes.Length);
var ex = Assert.Throws<FileFormatException>(() => { BsonSerializer.Deserialize<BsonDocument>(bytes); });
Assert.AreEqual("String is missing null terminator.", ex.Message);
var ex = Assert.Throws<FormatException>(() => { BsonSerializer.Deserialize<BsonDocument>(bytes); });
Assert.AreEqual("String is missing terminating null byte.", ex.Message);
}

[Test]
Expand Down Expand Up @@ -129,23 +128,5 @@ public void TestReadStringTwoCharactersDecoderException()
Assert.AreEqual(15, bytes.Length);
var ex = Assert.Throws<DecoderFallbackException>(() => { BsonSerializer.Deserialize<BsonDocument>(bytes); });
}

[Test]
public void TestWriteCStringThrowsWhenValueContainsNulls()
{
using (var bsonBuffer = new BsonBuffer())
{
Assert.Throws<ArgumentException>(() => { bsonBuffer.WriteCString((UTF8Encoding)Encoding.UTF8, "a\0b"); });
}
}

[Test]
public void TestWriteCStringThrowsWhenValueIsNull()
{
using (var bsonBuffer = new BsonBuffer())
{
Assert.Throws<ArgumentNullException>(() => { bsonBuffer.WriteCString((UTF8Encoding)Encoding.UTF8, null); });
}
}
}
}
35 changes: 21 additions & 14 deletions src/MongoDB.Bson.Tests/IO/BsonDocumentReaderTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
using System;
using MongoDB.Bson;
using MongoDB.Bson.IO;
using MongoDB.Bson.Serialization;
using MongoDB.Bson.Serialization.Serializers;
using NUnit.Framework;

Expand All @@ -30,7 +31,7 @@ public void TestEmptyDocument()
BsonDocument document = new BsonDocument();
using (var bsonReader = BsonReader.Create(document))
{
var rehydrated = (BsonDocument)BsonDocumentSerializer.Instance.Deserialize(bsonReader, typeof(BsonDocument), null);
var rehydrated = DeserializeBsonDocument(bsonReader);
Assert.IsTrue(document.Equals(rehydrated));
}
}
Expand All @@ -41,7 +42,7 @@ public void TestSingleString()
BsonDocument document = new BsonDocument() { { "abc", "xyz" } };
using (var bsonReader = BsonReader.Create(document))
{
var rehydrated = (BsonDocument)BsonDocumentSerializer.Instance.Deserialize(bsonReader, typeof(BsonDocument), null);
var rehydrated = DeserializeBsonDocument(bsonReader);
Assert.IsTrue(document.Equals(rehydrated));
}
}
Expand All @@ -55,7 +56,7 @@ public void TestEmbeddedDocument()
};
using (var bsonReader = BsonReader.Create(document))
{
var rehydrated = (BsonDocument)BsonDocumentSerializer.Instance.Deserialize(bsonReader, typeof(BsonDocument), null);
var rehydrated = DeserializeBsonDocument(bsonReader);
Assert.IsTrue(document.Equals(rehydrated));
}
}
Expand All @@ -69,7 +70,7 @@ public void TestArray()
};
using (var bsonReader = BsonReader.Create(document))
{
var rehydrated = (BsonDocument)BsonDocumentSerializer.Instance.Deserialize(bsonReader, typeof(BsonDocument), null);
var rehydrated = DeserializeBsonDocument(bsonReader);
Assert.IsTrue(document.Equals(rehydrated));
}
}
Expand All @@ -84,7 +85,7 @@ public void TestDateTime()
};
using (var bsonReader = BsonReader.Create(document))
{
var rehydrated = (BsonDocument)BsonDocumentSerializer.Instance.Deserialize(bsonReader, typeof(BsonDocument), null);
var rehydrated = DeserializeBsonDocument(bsonReader);
Assert.IsTrue(document.Equals(rehydrated));
}
}
Expand All @@ -98,7 +99,7 @@ public void TestBinary()
};
using (var bsonReader = BsonReader.Create(document))
{
var rehydrated = (BsonDocument)BsonDocumentSerializer.Instance.Deserialize(bsonReader, typeof(BsonDocument), null);
var rehydrated = DeserializeBsonDocument(bsonReader);
Assert.IsTrue(document.Equals(rehydrated));
}
}
Expand All @@ -112,7 +113,7 @@ public void TestJavaScript()
};
using (var bsonReader = BsonReader.Create(document))
{
var rehydrated = (BsonDocument)BsonDocumentSerializer.Instance.Deserialize(bsonReader, typeof(BsonDocument), null);
var rehydrated = DeserializeBsonDocument(bsonReader);
Assert.IsTrue(document.Equals(rehydrated));
}
}
Expand All @@ -126,7 +127,7 @@ public void TestJavaScriptWithScope()
};
using (var bsonReader = BsonReader.Create(document))
{
var rehydrated = (BsonDocument)BsonDocumentSerializer.Instance.Deserialize(bsonReader, typeof(BsonDocument), null);
var rehydrated = DeserializeBsonDocument(bsonReader);
Assert.IsTrue(document.Equals(rehydrated));
}
}
Expand All @@ -140,7 +141,7 @@ public void TestGuid()
};
using (var bsonReader = BsonReader.Create(document))
{
var rehydrated = (BsonDocument)BsonDocumentSerializer.Instance.Deserialize(bsonReader, typeof(BsonDocument), null);
var rehydrated = DeserializeBsonDocument(bsonReader);
Assert.IsTrue(document.Equals(rehydrated));
}
}
Expand All @@ -154,7 +155,7 @@ public void TestMaxKey()
};
using (var bsonReader = BsonReader.Create(document))
{
var rehydrated = (BsonDocument)BsonDocumentSerializer.Instance.Deserialize(bsonReader, typeof(BsonDocument), null);
var rehydrated = DeserializeBsonDocument(bsonReader);
Assert.IsTrue(document.Equals(rehydrated));
}
}
Expand All @@ -168,7 +169,7 @@ public void TestMinKey()
};
using (var bsonReader = BsonReader.Create(document))
{
var rehydrated = (BsonDocument)BsonDocumentSerializer.Instance.Deserialize(bsonReader, typeof(BsonDocument), null);
var rehydrated = DeserializeBsonDocument(bsonReader);
Assert.IsTrue(document.Equals(rehydrated));
}
}
Expand All @@ -182,7 +183,7 @@ public void TestNull()
};
using (var bsonReader = BsonReader.Create(document))
{
var rehydrated = (BsonDocument)BsonDocumentSerializer.Instance.Deserialize(bsonReader, typeof(BsonDocument), null);
var rehydrated = DeserializeBsonDocument(bsonReader);
Assert.IsTrue(document.Equals(rehydrated));
}
}
Expand All @@ -196,7 +197,7 @@ public void TestSymbol()
};
using (var bsonReader = BsonReader.Create(document))
{
var rehydrated = (BsonDocument)BsonDocumentSerializer.Instance.Deserialize(bsonReader, typeof(BsonDocument), null);
var rehydrated = DeserializeBsonDocument(bsonReader);
Assert.IsTrue(document.Equals(rehydrated));
}
}
Expand All @@ -210,9 +211,15 @@ public void TestTimestamp()
};
using (var bsonReader = BsonReader.Create(document))
{
var rehydrated = (BsonDocument)BsonDocumentSerializer.Instance.Deserialize(bsonReader, typeof(BsonDocument), null);
var rehydrated = DeserializeBsonDocument(bsonReader);
Assert.IsTrue(document.Equals(rehydrated));
}
}

private BsonDocument DeserializeBsonDocument(BsonReader bsonReader)
{
var context = BsonDeserializationContext.CreateRoot<BsonDocument>(bsonReader);
return BsonDocumentSerializer.Instance.Deserialize(context);
}
}
}
7 changes: 5 additions & 2 deletions src/MongoDB.Bson.Tests/IO/BsonWriterTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
*/

using System;
using System.IO;
using MongoDB.Bson.IO;
using NUnit.Framework;

Expand All @@ -25,7 +26,8 @@ public class BsonWriterTests
[Test]
public void TestWriteNameThrowsWhenValueContainsNulls()
{
using (var bsonWriter = BsonWriter.Create(BsonBinaryWriterSettings.Defaults))
using (var stream = new MemoryStream())
using (var bsonWriter = new BsonBinaryWriter(stream, BsonBinaryWriterSettings.Defaults))
{
Assert.Throws<ArgumentException>(() => { bsonWriter.WriteName("a\0b"); });
}
Expand All @@ -34,7 +36,8 @@ public void TestWriteNameThrowsWhenValueContainsNulls()
[Test]
public void TestWriteNameThrowsWhenValueIsNull()
{
using (var bsonWriter = BsonWriter.Create(BsonBinaryWriterSettings.Defaults))
using (var stream = new MemoryStream())
using (var bsonWriter = new BsonBinaryWriter(stream, BsonBinaryWriterSettings.Defaults))
{
Assert.Throws<ArgumentNullException>(() => { bsonWriter.WriteName(null); });
}
Expand Down
71 changes: 22 additions & 49 deletions src/MongoDB.Bson.Tests/IO/ByteArrayBufferTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,34 +23,29 @@ namespace MongoDB.Bson.Tests.IO
public class ByteArrayBufferTests
{
[Test]
public void TestWriteBackingBytes()
public void TestAccessBackingBytes()
{
var backingBytes = new byte[100];
using (var buffer = new ByteArrayBuffer(backingBytes, 0, 0, false))
using (var buffer = new ByteArrayBuffer(backingBytes, 10, 80, false))
{
var segment = buffer.WriteBackingBytes(10);
var segment = buffer.AccessBackingBytes(20);
Assert.AreSame(backingBytes, segment.Array);
Assert.AreEqual(0, segment.Offset);
Assert.AreEqual(10, segment.Count);
buffer.Position += 1;
Assert.AreEqual(1, buffer.Position);
Assert.AreEqual(1, buffer.Length);
Assert.AreEqual(30, segment.Offset);
Assert.AreEqual(60, segment.Count);
}
}

[Test]
public void TestWriteByte()
{
var backingBytes = new byte[100];
using (var buffer = new ByteArrayBuffer(backingBytes, 0, 0, false))
using (var buffer = new ByteArrayBuffer(backingBytes, 10, 80, false))
{
Assert.AreEqual(0, backingBytes[0]);
Assert.AreEqual(0, backingBytes[1]);
buffer.WriteByte(1);
Assert.AreEqual(1, backingBytes[0]);
Assert.AreEqual(0, backingBytes[1]);
Assert.AreEqual(1, buffer.Position);
Assert.AreEqual(1, buffer.Length);
Assert.AreEqual(0, backingBytes[30]);
Assert.AreEqual(0, backingBytes[31]);
buffer.WriteByte(20, 1);
Assert.AreEqual(1, backingBytes[30]);
Assert.AreEqual(0, backingBytes[31]);
}
}

Expand All @@ -60,48 +55,26 @@ public void TestWriteBytes()
var bytes = new[] { (byte)1, (byte)2 };

var backingBytes = new byte[100];
using (var buffer = new ByteArrayBuffer(backingBytes, 0, 0, false))
using (var buffer = new ByteArrayBuffer(backingBytes, 10, 80, false))
{
Assert.AreEqual(0, backingBytes[0]);
Assert.AreEqual(0, backingBytes[1]);
Assert.AreEqual(0, backingBytes[2]);
buffer.WriteBytes(bytes);
Assert.AreEqual(1, backingBytes[0]);
Assert.AreEqual(2, backingBytes[1]);
Assert.AreEqual(0, backingBytes[2]);
Assert.AreEqual(2, buffer.Position);
Assert.AreEqual(2, buffer.Length);
}
}

[Test]
public void TestWriteBytesFromByteBuffer()
{
var bytes = new[] { (byte)1, (byte)2 };
var source = new ByteArrayBuffer(bytes, 0, bytes.Length, true);

var backingBytes = new byte[100];
using (var buffer = new ByteArrayBuffer(backingBytes, 0, 0, false))
{
Assert.AreEqual(0, backingBytes[0]);
Assert.AreEqual(0, backingBytes[1]);
Assert.AreEqual(0, backingBytes[2]);
buffer.WriteBytes(source);
Assert.AreEqual(1, backingBytes[0]);
Assert.AreEqual(2, backingBytes[1]);
Assert.AreEqual(0, backingBytes[2]);
Assert.AreEqual(2, buffer.Position);
Assert.AreEqual(2, buffer.Length);
Assert.AreEqual(0, backingBytes[30]);
Assert.AreEqual(0, backingBytes[31]);
Assert.AreEqual(0, backingBytes[32]);
buffer.WriteBytes(20, bytes, 0, bytes.Length);
Assert.AreEqual(1, backingBytes[30]);
Assert.AreEqual(2, backingBytes[31]);
Assert.AreEqual(0, backingBytes[32]);
}
}

[Test]
public void TestWriteTo()
{
var backingBytes = new byte[100];
using (var buffer = new ByteArrayBuffer(backingBytes, 0, 0, false))
using (var buffer = new ByteArrayBuffer(backingBytes, 10, 80, false))
{
buffer.WriteBytes(new[] { (byte)1, (byte)2 });
buffer.WriteBytes(0, new[] { (byte)1, (byte)2 }, 0, 2);
buffer.Length = 2;

using (var memoryStream = new MemoryStream())
{
Expand Down
10 changes: 4 additions & 6 deletions src/MongoDB.Bson.Tests/IO/MultiChunkBufferTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,9 @@ public class MultiChunkBufferTests
public void TestGetSingleChunkSlice()
{
var chunkSize = BsonChunkPool.Default.ChunkSize;
var capacity = chunkSize * 3;
using (var buffer = ByteBufferFactory.Create(BsonChunkPool.Default, capacity))
var length = chunkSize * 3;
using (var buffer = ByteBufferFactory.Create(BsonChunkPool.Default, length))
{
buffer.Length = capacity;
buffer.MakeReadOnly();
var slice = buffer.GetSlice(chunkSize, 1);
Assert.IsInstanceOf<SingleChunkBuffer>(slice);
Expand All @@ -39,10 +38,9 @@ public void TestGetSingleChunkSlice()
public void TestGetMultipleChunkSlice()
{
var chunkSize = BsonChunkPool.Default.ChunkSize;
var capacity = chunkSize * 3;
using (var buffer = ByteBufferFactory.Create(BsonChunkPool.Default, capacity))
var length = chunkSize * 3;
using (var buffer = ByteBufferFactory.Create(BsonChunkPool.Default, length))
{
buffer.Length = capacity;
buffer.MakeReadOnly();
var slice = buffer.GetSlice(chunkSize, chunkSize + 1);
Assert.IsInstanceOf<MultiChunkBuffer>(slice);
Expand Down
1 change: 1 addition & 0 deletions src/MongoDB.Bson.Tests/Jira/CSharp170Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ public class C
}

[Test]
[SkipOnMono("ObservableCollection in Mono 2.10.8 throws a NotImplementedException in the constructor.")]
public void TestDeserializeDouble()
{
var obj = new C
Expand Down
Loading

0 comments on commit 5d7dcb8

Please sign in to comment.