Skip to content

Commit 7e49b42

Browse files
committed
fix: fix existing tests
1 parent 77b7cf4 commit 7e49b42

File tree

9 files changed

+74
-52
lines changed

9 files changed

+74
-52
lines changed

json_annotation/lib/src/json_serializable.dart

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -182,20 +182,6 @@ class JsonSerializable {
182182
/// fields annotated with [JsonKey].
183183
final FieldRename? fieldRename;
184184

185-
/// Defines the automatic naming strategy when converting class names
186-
/// to union type names.
187-
///
188-
/// With a value [UnionRename.none] (the default), the name of the class is
189-
/// used without modification.
190-
///
191-
/// See [UnionRename] for details on the other options.
192-
final UnionRename? unionRename;
193-
194-
/// The discriminator key used to identify the union type.
195-
///
196-
/// Defaults to `type`.
197-
final String? unionDiscriminator;
198-
199185
/// When `true` on classes with type parameters (generic types), extra
200186
/// "helper" parameters will be generated for `fromJson` and/or `toJson` to
201187
/// support serializing values of those types.
@@ -258,6 +244,20 @@ class JsonSerializable {
258244
/// `includeIfNull`, that value takes precedent.
259245
final bool? includeIfNull;
260246

247+
/// The discriminator key used to identify the union type.
248+
///
249+
/// Defaults to `type`.
250+
final String? unionDiscriminator;
251+
252+
/// Defines the automatic naming strategy when converting class names
253+
/// to union type names.
254+
///
255+
/// With a value [UnionRename.none] (the default), the name of the class is
256+
/// used without modification.
257+
///
258+
/// See [UnionRename] for details on the other options.
259+
final UnionRename? unionRename;
260+
261261
/// A list of [JsonConverter] to apply to this class.
262262
///
263263
/// Writing:
@@ -305,13 +305,13 @@ class JsonSerializable {
305305
this.disallowUnrecognizedKeys,
306306
this.explicitToJson,
307307
this.fieldRename,
308-
this.unionRename,
309-
this.unionDiscriminator,
310308
this.ignoreUnannotated,
311309
this.includeIfNull,
312310
this.converters,
313311
this.genericArgumentFactories,
314312
this.createPerFieldToJson,
313+
this.unionDiscriminator,
314+
this.unionRename,
315315
});
316316

317317
factory JsonSerializable.fromJson(Map<String, dynamic> json) =>
@@ -329,11 +329,11 @@ class JsonSerializable {
329329
disallowUnrecognizedKeys: false,
330330
explicitToJson: false,
331331
fieldRename: FieldRename.none,
332-
unionRename: UnionRename.none,
333-
unionDiscriminator: 'type',
334332
ignoreUnannotated: false,
335333
includeIfNull: true,
336334
genericArgumentFactories: false,
335+
unionDiscriminator: 'type',
336+
unionRename: UnionRename.none,
337337
);
338338

339339
/// Returns a new [JsonSerializable] instance with fields equal to the
@@ -352,12 +352,12 @@ class JsonSerializable {
352352
disallowUnrecognizedKeys ?? defaults.disallowUnrecognizedKeys,
353353
explicitToJson: explicitToJson ?? defaults.explicitToJson,
354354
fieldRename: fieldRename ?? defaults.fieldRename,
355-
unionRename: unionRename ?? defaults.unionRename,
356-
unionDiscriminator: unionDiscriminator ?? defaults.unionDiscriminator,
357355
ignoreUnannotated: ignoreUnannotated ?? defaults.ignoreUnannotated,
358356
includeIfNull: includeIfNull ?? defaults.includeIfNull,
359357
genericArgumentFactories:
360358
genericArgumentFactories ?? defaults.genericArgumentFactories,
359+
unionDiscriminator: unionDiscriminator ?? defaults.unionDiscriminator,
360+
unionRename: unionRename ?? defaults.unionRename,
361361
);
362362

363363
Map<String, dynamic> toJson() => _$JsonSerializableToJson(this);

json_annotation/lib/src/json_serializable.g.dart

Lines changed: 14 additions & 14 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

json_serializable/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,8 @@ targets:
282282
generic_argument_factories: false
283283
ignore_unannotated: false
284284
include_if_null: true
285+
union_discriminator: type
286+
union_rename: none
285287
```
286288

287289
To exclude generated files from coverage, you can further configure `build.yaml`.

json_serializable/lib/src/type_helpers/config_types.dart

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,13 @@ class ClassConfig {
5454
final bool disallowUnrecognizedKeys;
5555
final bool explicitToJson;
5656
final FieldRename fieldRename;
57-
final UnionRename unionRename;
58-
final String unionDiscriminator;
5957
final bool genericArgumentFactories;
6058
final bool ignoreUnannotated;
6159
final bool includeIfNull;
6260
final Map<String, String> ctorParamDefaults;
6361
final List<DartObject> converters;
62+
final String unionDiscriminator;
63+
final UnionRename unionRename;
6464

6565
const ClassConfig({
6666
required this.anyMap,
@@ -74,11 +74,11 @@ class ClassConfig {
7474
required this.disallowUnrecognizedKeys,
7575
required this.explicitToJson,
7676
required this.fieldRename,
77-
required this.unionRename,
78-
required this.unionDiscriminator,
7977
required this.genericArgumentFactories,
8078
required this.ignoreUnannotated,
8179
required this.includeIfNull,
80+
required this.unionDiscriminator,
81+
required this.unionRename,
8282
this.converters = const [],
8383
this.ctorParamDefaults = const {},
8484
});
@@ -109,13 +109,13 @@ class ClassConfig {
109109
config.genericArgumentFactories ??
110110
ClassConfig.defaults.genericArgumentFactories,
111111
fieldRename: config.fieldRename ?? ClassConfig.defaults.fieldRename,
112-
unionRename: config.unionRename ?? ClassConfig.defaults.unionRename,
113-
unionDiscriminator:
114-
config.unionDiscriminator ??
115-
ClassConfig.defaults.unionDiscriminator,
116112
disallowUnrecognizedKeys:
117113
config.disallowUnrecognizedKeys ??
118114
ClassConfig.defaults.disallowUnrecognizedKeys,
115+
unionDiscriminator:
116+
config.unionDiscriminator ??
117+
ClassConfig.defaults.unionDiscriminator,
118+
unionRename: config.unionRename ?? ClassConfig.defaults.unionRename,
119119
// TODO typeConverters = []
120120
);
121121

@@ -133,11 +133,11 @@ class ClassConfig {
133133
disallowUnrecognizedKeys: false,
134134
explicitToJson: false,
135135
fieldRename: FieldRename.none,
136-
unionRename: UnionRename.none,
137-
unionDiscriminator: 'type',
138136
genericArgumentFactories: false,
139137
ignoreUnannotated: false,
140138
includeIfNull: true,
139+
unionDiscriminator: 'type',
140+
unionRename: UnionRename.none,
141141
);
142142

143143
JsonSerializable toJsonSerializable() => JsonSerializable(
@@ -154,9 +154,9 @@ class ClassConfig {
154154
includeIfNull: includeIfNull,
155155
genericArgumentFactories: genericArgumentFactories,
156156
fieldRename: fieldRename,
157-
unionRename: unionRename,
158-
unionDiscriminator: unionDiscriminator,
159157
disallowUnrecognizedKeys: disallowUnrecognizedKeys,
158+
unionDiscriminator: unionDiscriminator,
159+
unionRename: unionRename,
160160
// TODO typeConverters = []
161161
);
162162
}

json_serializable/lib/src/utils.dart

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,12 @@ JsonSerializable _valueForAnnotation(ConstantReader reader) => JsonSerializable(
6161
reader.read('disallowUnrecognizedKeys').literalValue as bool?,
6262
explicitToJson: reader.read('explicitToJson').literalValue as bool?,
6363
fieldRename: readEnum(reader.read('fieldRename'), FieldRename.values),
64-
unionRename: readEnum(reader.read('unionRename'), UnionRename.values),
65-
unionDiscriminator: reader.read('unionDiscriminator').literalValue as String?,
6664
genericArgumentFactories:
6765
reader.read('genericArgumentFactories').literalValue as bool?,
6866
ignoreUnannotated: reader.read('ignoreUnannotated').literalValue as bool?,
6967
includeIfNull: reader.read('includeIfNull').literalValue as bool?,
68+
unionDiscriminator: reader.read('unionDiscriminator').literalValue as String?,
69+
unionRename: readEnum(reader.read('unionRename'), UnionRename.values),
7070
);
7171

7272
/// Returns a [ClassConfig] with values from the [JsonSerializable]
@@ -116,9 +116,6 @@ ClassConfig mergeConfig(
116116
annotation.disallowUnrecognizedKeys ?? config.disallowUnrecognizedKeys,
117117
explicitToJson: annotation.explicitToJson ?? config.explicitToJson,
118118
fieldRename: annotation.fieldRename ?? config.fieldRename,
119-
unionRename: annotation.unionRename ?? config.unionRename,
120-
unionDiscriminator:
121-
annotation.unionDiscriminator ?? config.unionDiscriminator,
122119
genericArgumentFactories:
123120
annotation.genericArgumentFactories ??
124121
(classElement.typeParameters2.isNotEmpty &&
@@ -127,6 +124,9 @@ ClassConfig mergeConfig(
127124
includeIfNull: annotation.includeIfNull ?? config.includeIfNull,
128125
ctorParamDefaults: paramDefaultValueMap,
129126
converters: converters.isNull ? const [] : converters.listValue,
127+
unionDiscriminator:
128+
annotation.unionDiscriminator ?? config.unionDiscriminator,
129+
unionRename: annotation.unionRename ?? config.unionRename,
130130
);
131131
}
132132

json_serializable/test/config_test.dart

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,12 @@ void main() {
4343
);
4444

4545
for (var entry in generatorConfigDefaultJson.entries) {
46+
expect(
47+
generatorConfigNonDefaultJson[entry.key],
48+
isNotNull,
49+
reason: 'should have explicitly set non default value',
50+
);
51+
4652
expect(
4753
generatorConfigNonDefaultJson,
4854
containsPair(entry.key, isNot(entry.value)),
@@ -91,7 +97,7 @@ void main() {
9197
configMap.keys,
9298
unorderedEquals(generatorConfigDefaultJson.keys),
9399
reason:
94-
'All supported keys are documented. '
100+
'All supported keys are not documented. '
95101
'Did you forget to change README.md?',
96102
);
97103

@@ -133,6 +139,12 @@ void main() {
133139
'field_rename' =>
134140
'`42` is not one of the supported values: none, kebab, snake, '
135141
'pascal, screamingSnake',
142+
'union_rename' =>
143+
'`42` is not one of the supported values: none, kebab, snake, '
144+
'pascal, screamingSnake',
145+
'union_discriminator' =>
146+
"type 'int' is not a subtype of type 'String?' in type "
147+
'cast',
136148
'constructor' =>
137149
"type 'int' is not a subtype of type 'String?' in type "
138150
'cast',
@@ -175,4 +187,6 @@ const _invalidConfig = {
175187
'generic_argument_factories': 42,
176188
'ignore_unannotated': 42,
177189
'include_if_null': 42,
190+
'union_discriminator': 42,
191+
'union_rename': 42,
178192
};

json_serializable/test/shared_config.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,7 @@ final generatorConfigNonDefaultJson = Map<String, dynamic>.unmodifiable(
2828
ignoreUnannotated: true,
2929
includeIfNull: false,
3030
genericArgumentFactories: true,
31+
unionDiscriminator: 'runtimeType',
32+
unionRename: UnionRename.kebab,
3133
).toJson(),
3234
);

json_serializable/test/test_sources/test_sources.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ class ConfigurationImplicitDefaults {
2424
ignoreUnannotated: false,
2525
includeIfNull: true,
2626
genericArgumentFactories: false,
27+
unionDiscriminator: 'type',
28+
unionRename: UnionRename.none,
2729
)
2830
class ConfigurationExplicitDefaults {
2931
int? field;

json_serializable/tool/readme/readme_template.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,8 @@ targets:
150150
generic_argument_factories: false
151151
ignore_unannotated: false
152152
include_if_null: true
153+
union_discriminator: type
154+
union_rename: none
153155
```
154156
155157
To exclude generated files from coverage, you can further configure `build.yaml`.

0 commit comments

Comments
 (0)