Skip to content

Commit a02db24

Browse files
author
Michael Catanzariti
committed
fix serialization
* fix CborSerializer.Serialize * added CborSerializer tests * hide internal classes
1 parent fe73bd1 commit a02db24

File tree

7 files changed

+145
-14
lines changed

7 files changed

+145
-14
lines changed

src/Dahomey.Cbor.Tests/CborReaderValueTest.cs renamed to src/Dahomey.Cbor.Tests/CborReaderValueTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
namespace Dahomey.Cbor.Tests
99
{
1010
[TestClass]
11-
public class CborReaderValueTest
11+
public class CborReaderValueTests
1212
{
1313
[DataTestMethod]
1414
[DataRow("F5", true, null)]
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
using Dahomey.Cbor.Util;
2+
using Microsoft.VisualStudio.TestTools.UnitTesting;
3+
using System;
4+
using System.IO;
5+
6+
namespace Dahomey.Cbor.Tests
7+
{
8+
[TestClass]
9+
public class CborSerializerTests
10+
{
11+
private const string SimpleObjectHexBuffer = "AE67426F6F6C65616EF56553427974650D64427974650C65496E7431360E6655496E7431360F65496E743332106655496E7433321165496E743634126655496E7436341366537472696E6766737472696E676653696E676C65FA41A1AE1466446F75626C65FB40363AE147AE147B684461746554696D6574323031342D30322D32315431393A30303A30305A64456E756D6656616C756531";
12+
13+
private readonly static SimpleObject SimpleObject = new SimpleObject
14+
{
15+
Boolean = true,
16+
Byte = 12,
17+
SByte = 13,
18+
Int16 = 14,
19+
UInt16 = 15,
20+
Int32 = 16,
21+
UInt32 = 17u,
22+
Int64 = 18,
23+
UInt64 = 19ul,
24+
Single = 20.21f,
25+
Double = 22.23,
26+
String = "string",
27+
DateTime = new DateTime(2014, 02, 21, 19, 0, 0, DateTimeKind.Utc),
28+
Enum = EnumTest.Value1
29+
};
30+
31+
private readonly static CborSerializationSettings Settings = new CborSerializationSettings
32+
{
33+
EnumFormat = ValueFormat.WriteToString
34+
};
35+
36+
[TestMethod]
37+
public void DeserializeFromMemoryStream()
38+
{
39+
MemoryStream stream = new MemoryStream(SimpleObjectHexBuffer.HexToBytes());
40+
SimpleObject obj = CborSerializer.Deserialize<SimpleObject>(stream);
41+
TestSimpleObject(obj);
42+
}
43+
44+
[TestMethod]
45+
public void SerializeToMemoryStream()
46+
{
47+
MemoryStream stream = new MemoryStream();
48+
CborSerializer.Serialize(SimpleObject, stream, Settings);
49+
TestBuffer(stream.ToArray());
50+
}
51+
52+
[TestMethod]
53+
public void DeserializeFromFileStream()
54+
{
55+
string tempFileName = Path.GetTempFileName();
56+
File.WriteAllBytes(tempFileName, SimpleObjectHexBuffer.HexToBytes());
57+
58+
try
59+
{
60+
using (FileStream stream = File.OpenRead(tempFileName))
61+
{
62+
SimpleObject obj = CborSerializer.Deserialize<SimpleObject>(stream);
63+
TestSimpleObject(obj);
64+
}
65+
}
66+
finally
67+
{
68+
File.Delete(tempFileName);
69+
}
70+
}
71+
72+
[TestMethod]
73+
public void SerializeToFileStream()
74+
{
75+
string tempFileName = Path.GetTempFileName();
76+
77+
try
78+
{
79+
using (FileStream stream = File.OpenWrite(tempFileName))
80+
{
81+
CborSerializer.Serialize(SimpleObject, stream, Settings);
82+
}
83+
84+
byte[] actualBuffer = File.ReadAllBytes(tempFileName);
85+
TestBuffer(actualBuffer);
86+
}
87+
finally
88+
{
89+
File.Delete(tempFileName);
90+
}
91+
}
92+
93+
[TestMethod]
94+
public void DeserializeFromSpan()
95+
{
96+
Span<byte> buffer = SimpleObjectHexBuffer.HexToBytes();
97+
SimpleObject obj = CborSerializer.Deserialize<SimpleObject>(buffer);
98+
TestSimpleObject(obj);
99+
}
100+
101+
[TestMethod]
102+
public void SerializerToBufferWriter()
103+
{
104+
ByteBufferWriter bufferWriter = new ByteBufferWriter();
105+
CborSerializer.Serialize(SimpleObject, bufferWriter, Settings);
106+
TestBuffer(bufferWriter.WrittenSpan.ToArray());
107+
}
108+
109+
private void TestBuffer(byte[] actualBuffer)
110+
{
111+
string actualHexBuffer = BitConverter.ToString(actualBuffer).Replace("-", "");
112+
Assert.AreEqual(SimpleObjectHexBuffer, actualHexBuffer);
113+
}
114+
115+
private void TestSimpleObject(SimpleObject obj)
116+
{
117+
Assert.IsNotNull(obj);
118+
Assert.IsTrue(obj.Boolean);
119+
Assert.AreEqual(12, obj.Byte);
120+
Assert.AreEqual(13, obj.SByte);
121+
Assert.AreEqual(14, obj.Int16);
122+
Assert.AreEqual(15, obj.UInt16);
123+
Assert.AreEqual(16, obj.Int32);
124+
Assert.AreEqual(17u, obj.UInt32);
125+
Assert.AreEqual(18, obj.Int64);
126+
Assert.AreEqual(19ul, obj.UInt64);
127+
Assert.AreEqual(20.21f, obj.Single);
128+
Assert.AreEqual(22.23, obj.Double);
129+
Assert.AreEqual("string", obj.String);
130+
Assert.AreEqual(new DateTime(2014, 02, 21, 19, 0, 0, DateTimeKind.Utc), obj.DateTime);
131+
Assert.AreEqual(EnumTest.Value1, obj.Enum);
132+
}
133+
}
134+
}

src/Dahomey.Cbor/CborSerializer.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
namespace Dahomey.Cbor
1010
{
11-
public class CborSerializer
11+
public static class CborSerializer
1212
{
1313
[MethodImpl(MethodImplOptions.AggressiveInlining)]
1414
public static T Deserialize<T>(
@@ -49,6 +49,8 @@ public static void Serialize<T>(
4949
{
5050
ByteBufferWriter bufferWriter = new ByteBufferWriter();
5151
CborWriter writer = new CborWriter(bufferWriter, settings);
52+
ICborConverter<T> converter = CborConverter.Lookup<T>();
53+
converter.Write(ref writer, input);
5254
ReadOnlySpan<byte> span = bufferWriter.WrittenSpan;
5355
stream.Write(span);
5456
}

src/Dahomey.Cbor/Dahomey.Cbor.csproj

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,9 @@
33
<PropertyGroup>
44
<TargetFramework>netstandard2.0</TargetFramework>
55
<LangVersion>7.3</LangVersion>
6-
<PackageReleaseNotes>* Serialization/Deserialization from/to Streams, byte buffer
7-
* Object Model
8-
* Mapping to any .Net class
9-
* Extensible Polymorphism support based on discriminator conventions
10-
* Extensible Naming conventions
11-
* Custom converters for not supported types
12-
* .Net standard 2.0 support</PackageReleaseNotes>
6+
<PackageReleaseNotes>* fix CborSerializer.Serialize
7+
* added CborSerializer tests
8+
* hide internal classes</PackageReleaseNotes>
139
<Authors>Michaël Catanzariti</Authors>
1410
<Company>Dahomey Technologies</Company>
1511
<Description>High-performance CBOR serialization framework for .Net</Description>
@@ -20,6 +16,7 @@
2016
<RepositoryType>Git</RepositoryType>
2117
<PackageIconUrl>https://avatars3.githubusercontent.com/u/29336625?s=200&amp;v=4</PackageIconUrl>
2218
<Copyright>Copyright © Dahomey Technologies 2019</Copyright>
19+
<Version>1.0.1</Version>
2320
</PropertyGroup>
2421

2522
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

src/Dahomey.Cbor/Util/ListExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
namespace System.Collections.Generic
22
{
3-
public static class ListExtensions
3+
internal static class ListExtensions
44
{
55
public static int BinarySearch<T>(this List<T> list, Func<T, int> comparer)
66
{

src/Dahomey.Cbor/Util/MathUtil.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
namespace Dahomey.Cbor.Util
66
{
7-
public static class MathUtil
7+
internal static class MathUtil
88
{
99
/// <summary>
1010
/// Multiplies a floating point value x by the number 2 raised to the exp power.

src/Dahomey.Cbor/Util/StreamExtensions.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
using System;
22
using System.Buffers;
3-
using System.Collections.Generic;
43
using System.IO;
5-
using System.Text;
64

75
namespace Dahomey.Cbor.Util
86
{
9-
public static class StreamExtensions
7+
internal static class StreamExtensions
108
{
119
public static int Read(this Stream stream, Span<byte> buffer)
1210
{

0 commit comments

Comments
 (0)