-
-
Notifications
You must be signed in to change notification settings - Fork 53
Expand file tree
/
Copy pathAbstractBaseClassDiscriminatorTests.cs
More file actions
93 lines (81 loc) · 3.23 KB
/
AbstractBaseClassDiscriminatorTests.cs
File metadata and controls
93 lines (81 loc) · 3.23 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
using Newtonsoft.Json;
using NUnit.Framework;
namespace JsonSubTypes.Tests
{
[TestFixture]
public class AbstractBaseClassDiscriminatorTests
{
[JsonConverter(typeof(JsonSubtypes), nameof(SubTypeClass.Discriminator))]
public abstract class MainClass
{
}
public class SubTypeClass : MainClass
{
public string Discriminator => "SubTypeClass";
}
[Test]
[Timeout(2000)]
public void DeserializingWithAbstractBaseClassDiscriminatorThrows()
{
var exception = Assert.Throws<JsonSerializationException>(() =>
JsonConvert.DeserializeObject<MainClass>("{\"Discriminator\":\"MainClass\"}"));
Assert.AreEqual(
"Could not create an instance of type JsonSubTypes.Tests.AbstractBaseClassDiscriminatorTests+MainClass. Type is an interface or abstract class and cannot be instantiated. Path 'Discriminator', line 1, position 17.",
exception.Message);
}
[JsonConverter(typeof(JsonSubtypes), "Discriminator")]
[JsonSubtypes.KnownSubType(typeof(B), "D")]
public abstract class A
{
}
[JsonConverter(typeof(JsonSubtypes), "Discriminator")]
[JsonSubtypes.KnownSubType(typeof(C), "D")]
public abstract class B
{
}
[JsonConverter(typeof(JsonSubtypes), "Discriminator")]
[JsonSubtypes.KnownSubType(typeof(A), "D")]
public abstract class C
{
}
[Test]
[Timeout(2000)]
public void DeserializingWithAbstractClassCircleThrows()
{
var exception = Assert.Throws<JsonSerializationException>(() =>
JsonConvert.DeserializeObject<A>("{\"Discriminator\":\"D\"}"));
Assert.AreEqual(
"Could not create an instance of type JsonSubTypes.Tests.AbstractBaseClassDiscriminatorTests+A. Type is an interface or abstract class and cannot be instantiated. Path 'Discriminator', line 1, position 17.",
exception.Message);
}
}
[TestFixture]
public class KnownBaseType_AbstractBaseClassDiscriminatorTests
{
[JsonConverter(typeof(JsonSubtypes), "Discriminator")]
[JsonSubtypes.KnownBaseType(typeof(CC), "D")]
public abstract class AA
{
}
[JsonConverter(typeof(JsonSubtypes), "Discriminator")]
[JsonSubtypes.KnownBaseType(typeof(AA), "D")]
public abstract class BB
{
}
[JsonConverter(typeof(JsonSubtypes), "Discriminator")]
[JsonSubtypes.KnownBaseType(typeof(BB), "D")]
public abstract class CC
{
}
[Test]
[Timeout(2000)]
public void DeserializingWithAbstractClassCircleThrows()
{
var exception = Assert.Throws<JsonSerializationException>(() =>
JsonConvert.DeserializeObject<AA>("{\"Discriminator\":\"D\"}"));
Assert.AreEqual(
"Could not create an instance of type JsonSubTypes.Tests.KnownBaseType_AbstractBaseClassDiscriminatorTests+AA. Type is an interface or abstract class and cannot be instantiated. Path 'Discriminator', line 1, position 17.",
exception.Message);
}
}
}