Skip to content

Commit 1fc5285

Browse files
committed
fix: fix existing tests
1 parent 61843e3 commit 1fc5285

File tree

9 files changed

+72
-50
lines changed

9 files changed

+72
-50
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: 12 additions & 12 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
@@ -285,6 +285,8 @@ targets:
285285
generic_argument_factories: false
286286
ignore_unannotated: false
287287
include_if_null: true
288+
union_discriminator: type
289+
union_rename: none
288290
```
289291

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

json_serializable/lib/src/type_helpers/config_types.dart

Lines changed: 11 additions & 11 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
});
@@ -107,11 +107,11 @@ class ClassConfig {
107107
genericArgumentFactories: config.genericArgumentFactories ??
108108
ClassConfig.defaults.genericArgumentFactories,
109109
fieldRename: config.fieldRename ?? ClassConfig.defaults.fieldRename,
110-
unionRename: config.unionRename ?? ClassConfig.defaults.unionRename,
111-
unionDiscriminator: config.unionDiscriminator ??
112-
ClassConfig.defaults.unionDiscriminator,
113110
disallowUnrecognizedKeys: config.disallowUnrecognizedKeys ??
114111
ClassConfig.defaults.disallowUnrecognizedKeys,
112+
unionDiscriminator: config.unionDiscriminator ??
113+
ClassConfig.defaults.unionDiscriminator,
114+
unionRename: config.unionRename ?? ClassConfig.defaults.unionRename,
115115
// TODO typeConverters = []
116116
);
117117

@@ -129,11 +129,11 @@ class ClassConfig {
129129
disallowUnrecognizedKeys: false,
130130
explicitToJson: false,
131131
fieldRename: FieldRename.none,
132-
unionRename: UnionRename.none,
133-
unionDiscriminator: 'type',
134132
genericArgumentFactories: false,
135133
ignoreUnannotated: false,
136134
includeIfNull: true,
135+
unionDiscriminator: 'type',
136+
unionRename: UnionRename.none,
137137
);
138138

139139
JsonSerializable toJsonSerializable() => JsonSerializable(
@@ -150,9 +150,9 @@ class ClassConfig {
150150
includeIfNull: includeIfNull,
151151
genericArgumentFactories: genericArgumentFactories,
152152
fieldRename: fieldRename,
153-
unionRename: unionRename,
154-
unionDiscriminator: unionDiscriminator,
155153
disallowUnrecognizedKeys: disallowUnrecognizedKeys,
154+
unionDiscriminator: unionDiscriminator,
155+
unionRename: unionRename,
156156
// TODO typeConverters = []
157157
);
158158
}

json_serializable/lib/src/utils.dart

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,13 @@ JsonSerializable _valueForAnnotation(ConstantReader reader) => JsonSerializable(
6666
reader.read('disallowUnrecognizedKeys').literalValue as bool?,
6767
explicitToJson: reader.read('explicitToJson').literalValue as bool?,
6868
fieldRename: readEnum(reader.read('fieldRename'), FieldRename.values),
69-
unionRename: readEnum(reader.read('unionRename'), UnionRename.values),
70-
unionDiscriminator:
71-
reader.read('unionDiscriminator').literalValue as String?,
7269
genericArgumentFactories:
7370
reader.read('genericArgumentFactories').literalValue as bool?,
7471
ignoreUnannotated: reader.read('ignoreUnannotated').literalValue as bool?,
7572
includeIfNull: reader.read('includeIfNull').literalValue as bool?,
73+
unionDiscriminator:
74+
reader.read('unionDiscriminator').literalValue as String?,
75+
unionRename: readEnum(reader.read('unionRename'), UnionRename.values),
7676
);
7777

7878
/// Returns a [ClassConfig] with values from the [JsonSerializable]
@@ -118,16 +118,16 @@ ClassConfig mergeConfig(
118118
annotation.disallowUnrecognizedKeys ?? config.disallowUnrecognizedKeys,
119119
explicitToJson: annotation.explicitToJson ?? config.explicitToJson,
120120
fieldRename: annotation.fieldRename ?? config.fieldRename,
121-
unionRename: annotation.unionRename ?? config.unionRename,
122-
unionDiscriminator:
123-
annotation.unionDiscriminator ?? config.unionDiscriminator,
124121
genericArgumentFactories: annotation.genericArgumentFactories ??
125122
(classElement.typeParameters.isNotEmpty &&
126123
config.genericArgumentFactories),
127124
ignoreUnannotated: annotation.ignoreUnannotated ?? config.ignoreUnannotated,
128125
includeIfNull: annotation.includeIfNull ?? config.includeIfNull,
129126
ctorParamDefaults: paramDefaultValueMap,
130127
converters: converters.isNull ? const [] : converters.listValue,
128+
unionDiscriminator:
129+
annotation.unionDiscriminator ?? config.unionDiscriminator,
130+
unionRename: annotation.unionRename ?? config.unionRename,
131131
);
132132
}
133133

json_serializable/test/config_test.dart

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,12 @@ void main() {
3838
unorderedEquals(generatorConfigDefaultJson.keys));
3939

4040
for (var entry in generatorConfigDefaultJson.entries) {
41+
expect(
42+
generatorConfigNonDefaultJson[entry.key],
43+
isNotNull,
44+
reason: 'should have explicitly set non default value',
45+
);
46+
4147
expect(generatorConfigNonDefaultJson,
4248
containsPair(entry.key, isNot(entry.value)),
4349
reason: 'should have values that are different than the defaults');
@@ -81,7 +87,7 @@ void main() {
8187
expect(
8288
configMap.keys,
8389
unorderedEquals(generatorConfigDefaultJson.keys),
84-
reason: 'All supported keys are documented. '
90+
reason: 'All supported keys are not documented. '
8591
'Did you forget to change README.md?',
8692
);
8793

@@ -122,6 +128,12 @@ void main() {
122128
'field_rename' =>
123129
'`42` is not one of the supported values: none, kebab, snake, '
124130
'pascal, screamingSnake',
131+
'union_rename' =>
132+
'`42` is not one of the supported values: none, kebab, snake, '
133+
'pascal, screamingSnake',
134+
'union_discriminator' =>
135+
"type 'int' is not a subtype of type 'String?' in type "
136+
'cast',
125137
'constructor' =>
126138
"type 'int' is not a subtype of type 'String?' in type "
127139
'cast',
@@ -162,4 +174,6 @@ const _invalidConfig = {
162174
'generic_argument_factories': 42,
163175
'ignore_unannotated': 42,
164176
'include_if_null': 42,
177+
'union_discriminator': 42,
178+
'union_rename': 42,
165179
};

json_serializable/test/shared_config.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,6 @@ final generatorConfigNonDefaultJson =
2828
ignoreUnannotated: true,
2929
includeIfNull: false,
3030
genericArgumentFactories: true,
31+
unionDiscriminator: 'runtimeType',
32+
unionRename: UnionRename.kebab,
3133
).toJson());

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)