forked from scriptcs/scriptcs
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathObjectSerializerTests.cs
More file actions
120 lines (102 loc) · 2.78 KB
/
ObjectSerializerTests.cs
File metadata and controls
120 lines (102 loc) · 2.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
using System;
using Should;
using Xunit;
namespace ScriptCs.Hosting.Tests
{
public class ObjectSerializerTests
{
public class TheSerializeMethod
{
private readonly ObjectSerializer _serializer;
public TheSerializeMethod()
{
_serializer = new ObjectSerializer();
}
[Fact]
public void ShouldSerialize()
{
// arrange
var obj = new Foo
{
Bar = new Bar
{
Baz = true,
Bazz = 123.4,
Bazzz = "hello",
},
};
// act
var result = _serializer.Serialize(obj);
// assert
result.ShouldEqual(
@"{
""Bar"": {
""Baz"": true,
""Bazz"": 123.4,
""Bazzz"": ""hello""
}
}");
}
[Fact]
public void ShouldSerializeTypeMethods()
{
// arrange
var obj = typeof(Type).GetMethods();
// act
var exception = Record.Exception(() => _serializer.Serialize(obj));
// assert
exception.ShouldBeNull();
}
[Fact]
public void ShouldSerializeDelegates()
{
// arrange
var obj = new FuncAndAction
{
Action = () => { },
Func = () => "Hello World",
};
// act
var exception = Record.Exception(() => _serializer.Serialize(obj));
// assert
exception.ShouldBeNull();
}
[Fact]
public void ShouldSerializeWithCircularReferences()
{
// arrange
var obj = new Circular();
obj.Parent = obj;
// act
var result = _serializer.Serialize(obj);
// assert
result.ShouldEqual(
@"{
""$id"": ""1"",
""Parent"": {
""$ref"": ""1""
}
}");
}
private class Foo
{
public Bar Bar { get; set; }
}
private class Bar
{
public bool Baz { get; set; }
public double Bazz { get; set; }
public string Bazzz { get; set; }
}
private class FuncAndAction
{
public Action Action { get; set; }
public Func<string> Func { get; set; }
}
private class Circular
{
public Circular Parent { get; set; }
}
}
}
}