@@ -25,13 +25,18 @@ void testModels() {
25
25
testSingleModel <ModelF >(ModelF .variant0, ModelF .variant1);
26
26
testSingleModel <ModelG >(ModelG .variant0, ModelG .variant1);
27
27
testSingleModel <Note >(Note .variant0, Note .variant1);
28
- testSingleModel <DeepPolymorphic >(DeepPolymorphic .variant0, DeepPolymorphic .variant1);
29
- testSingleModel <CustomBaseImpl >(CustomBaseImpl .variant0, CustomBaseImpl .variant1);
30
- testSingleModel <InitializersModel >(InitializersModel .variant0, InitializersModel .variant1);
31
- testSingleModel <ConstructorBodyModel >(ConstructorBodyModel .variant0, ConstructorBodyModel .variant1);
28
+ testSingleModel <DeepPolymorphic >(
29
+ DeepPolymorphic .variant0, DeepPolymorphic .variant1);
30
+ testSingleModel <CustomBaseImpl >(
31
+ CustomBaseImpl .variant0, CustomBaseImpl .variant1);
32
+ testSingleModel <InitializersModel >(
33
+ InitializersModel .variant0, InitializersModel .variant1);
34
+ testSingleModel <ConstructorBodyModel >(
35
+ ConstructorBodyModel .variant0, ConstructorBodyModel .variant1);
32
36
testSingleModel <GetterModel >(GetterModel .variant0, GetterModel .variant1);
33
- testSingleModel <DefaultValueModel >(DefaultValueModel .variant0, DefaultValueModel .variant1);
34
-
37
+ testSingleModel <DefaultValueModel >(
38
+ DefaultValueModel .variant0, DefaultValueModel .variant1);
39
+
35
40
test ("Default Values" , () {
36
41
var defaultValues = DefaultValueModel .variant0 ();
37
42
var defaultMap = dogs.toNative (defaultValues) as Map ;
@@ -46,61 +51,55 @@ void testModels() {
46
51
}
47
52
48
53
void testSingleModel <T >(T Function () a, T Function () b) => group ("$T " , () {
54
+ var va0 = a ();
55
+ var va1 = a ();
56
+ var vb0 = b ();
57
+ var vb1 = b ();
49
58
50
- SchemaPass .run ((pass) {
51
- print (dogs.findAssociatedConverter (T )! .describeOutput (dogs, SchemaConfig ()).toJson ());
52
- });
53
-
54
- var va0 = a ();
55
- var va1 = a ();
56
- var vb0 = b ();
57
- var vb1 = b ();
59
+ test ("Base" , () {
60
+ var ea = dogs.toJson <T >(va0);
61
+ var eb = dogs.toJson <T >(vb0);
62
+ var da = dogs.fromJson <T >(ea);
63
+ var db = dogs.fromJson <T >(eb);
64
+ expect (va1, da, reason: "Non-pure serialization" );
65
+ expect (va0, da, reason: "Non-pure serialization" );
66
+ expect (vb1, db, reason: "Non-pure serialization" );
67
+ expect (vb0, db, reason: "Non-pure serialization" );
68
+ expect (ea, isNot (eb), reason: "Wrong equality" );
69
+ });
58
70
59
- test ("Base" , () {
60
- var ea = dogs.toJson <T >(va0);
61
- var eb = dogs.toJson <T >(vb0);
62
- var da = dogs.fromJson <T >(ea);
63
- var db = dogs.fromJson <T >(eb);
64
- expect (va1, da, reason: "Non-pure serialization" );
65
- expect (va0, da, reason: "Non-pure serialization" );
66
- expect (vb1, db, reason: "Non-pure serialization" );
67
- expect (vb0, db, reason: "Non-pure serialization" );
68
- expect (ea, isNot (eb), reason: "Wrong equality" );
69
- });
71
+ // Test Iterable kind based serialization
72
+ group ("Kind" , () {
73
+ test ("List" , () => _testListKind <T >(va0, va1, vb0, vb1));
74
+ test ("Set" , () => _testSetKind <T >(va0, va1, vb0, vb1));
75
+ });
70
76
71
- // Test Iterable kind based serialization
72
- group ( "Kind " , () {
73
- test ("List " , () => _testListKind <T >(va0, va1, vb0, vb1 ));
74
- test ("Set " , () => _testSetKind <T >(va0, va1, vb0, vb1 ));
75
- } );
76
-
77
- group ( "Type Tree" , () {
78
- test ( "Map " , () => _testMap <T >(va0, va1 ));
79
- test ( "Optional A" , () => _testOptional < T >(va0));
80
- test ( "Optional B" , () => _testOptional <T >(va1));
81
- });
82
- });
77
+ group ( "Type Tree" , () {
78
+ test ( "Map " , () => _testMap < T >(va0, va1));
79
+ test ("Optional A " , () => _testOptional <T >(va0));
80
+ test ("Optional B " , () => _testOptional <T >(va1));
81
+ test ( "Runtime Type Tree A" , () => _testRuntimeTypeTree < T >(va0) );
82
+ test ( "Runtime Type Tree B" , () => _testRuntimeTypeTree < T >(va1));
83
+ test (
84
+ "Deep Runtime Type Tree A " , () => _testDeepRuntimeTypeTree <T >(va0));
85
+ test (
86
+ "Deep Runtime Type Tree B" , () => _testDeepRuntimeTypeTree <T >(va1));
87
+ });
88
+ });
83
89
84
90
void _testListKind <T >(T va0, T va1, T vb0, T vb1) {
85
91
var list = [va0, va1, vb0, vb1];
86
- var encodedList = dogs.toJson (list,
87
- type: T , kind: IterableKind .list
88
- );
89
- var decodedList = dogs.fromJson (encodedList,
90
- type: T , kind: IterableKind .list
91
- );
92
+ var encodedList = dogs.toJson (list, type: T , kind: IterableKind .list);
93
+ var decodedList =
94
+ dogs.fromJson (encodedList, type: T , kind: IterableKind .list);
92
95
expect (decodedList, orderedEquals (list));
93
96
}
94
97
95
98
void _testSetKind <T >(T va0, T va1, T vb0, T vb1) {
96
99
var list = {va0, va1, vb0, vb1};
97
100
expect (list, hasLength (2 ));
98
- var encodedList = dogs.toJson (list,
99
- type: T , kind: IterableKind .set
100
- );
101
- var decodedList = dogs.fromJson (encodedList,
102
- type: T , kind: IterableKind .set
103
- );
101
+ var encodedList = dogs.toJson (list, type: T , kind: IterableKind .set );
102
+ var decodedList = dogs.fromJson (encodedList, type: T , kind: IterableKind .set );
104
103
expect (decodedList, orderedEquals (list));
105
104
}
106
105
@@ -121,8 +120,44 @@ void _testOptional<T>(T val) {
121
120
var tree = QualifiedTypeTree .arg1 <Optional <T >, Optional , T >();
122
121
var ea = dogs.toJson (Optional (va0), tree: tree);
123
122
var eb = dogs.toJson (Optional (va1), tree: tree);
123
+ var p0 = jsonDecode (ea);
124
+ var p1 = jsonDecode (eb);
124
125
var da = dogs.fromJson <Optional <T >>(ea, tree: tree);
125
126
var db = dogs.fromJson <Optional <T >>(eb, tree: tree);
126
127
expect (va0, da.value, reason: "Non-pure serialization" );
127
128
expect (va1, db.value, reason: "Non-pure serialization" );
128
- }
129
+ expect (p0, isA <Map >());
130
+ expect (p1, isNull);
131
+ }
132
+
133
+ void _testRuntimeTypeTree <T >(T val) {
134
+ var va0 = val;
135
+ final tree = TypeTreeN <Map >([
136
+ TypeTree .$string,
137
+ TypeTreeN <List >([UnsafeRuntimeTypeCapture (T )])
138
+ ]);
139
+ var ea = dogs.toJson ({
140
+ "a" : [va0]
141
+ }, tree: tree);
142
+ var payload = jsonDecode (ea);
143
+ var da = dogs.fromJson (ea, tree: tree);
144
+ expect (va0, da["a" ][0 ], reason: "Non-pure serialization" );
145
+ expect ((payload["a" ][0 ] as Map ).containsKey ("_type" ), false ,
146
+ reason: "Polymorphic serialization where not required" );
147
+ }
148
+
149
+ void _testDeepRuntimeTypeTree <T >(T val) {
150
+ var va0 = val;
151
+ final tree = UnsafeRuntimeTypeCapture (Map , arguments: [
152
+ UnsafeRuntimeTypeCapture (String ),
153
+ UnsafeRuntimeTypeCapture (List , arguments: [UnsafeRuntimeTypeCapture (T )])
154
+ ]);
155
+ var ea = dogs.toJson ({
156
+ "a" : [va0]
157
+ }, tree: tree);
158
+ var payload = jsonDecode (ea);
159
+ var da = dogs.fromJson (ea, tree: tree);
160
+ expect (va0, da["a" ][0 ], reason: "Non-pure serialization" );
161
+ expect ((payload["a" ][0 ] as Map ).containsKey ("_type" ), false ,
162
+ reason: "Polymorphic serialization where not required" );
163
+ }
0 commit comments