diff --git a/bin/model_generator.dart b/bin/model_generator.dart index 8ec3857..df0a25d 100644 --- a/bin/model_generator.dart +++ b/bin/model_generator.dart @@ -4,13 +4,11 @@ import 'dart:io'; import 'package:args/args.dart'; import 'package:model_generator/config/pubspec_config.dart'; import 'package:model_generator/config/yml_generator_config.dart'; -import 'package:model_generator/model/field.dart'; import 'package:model_generator/model/model/custom_model.dart'; import 'package:model_generator/model/model/enum_model.dart'; import 'package:model_generator/model/model/json_converter_model.dart'; import 'package:model_generator/model/model/object_model.dart'; import 'package:model_generator/run_process/run_process.dart'; -import 'package:model_generator/util/list_extensions.dart'; import 'package:model_generator/writer/enum_model_writer.dart'; import 'package:model_generator/writer/object_model_writer.dart'; import 'package:path/path.dart'; @@ -100,20 +98,9 @@ void writeToFiles( } String? content; if (model is ObjectModel) { - final extendsModelfields = []; - var extendsModelextends = model.extendsModel; - while (extendsModelextends != null) { - final extendsModelextendsModel = modelGeneratorConfig.models - .firstWhereOrNull( - (element) => element.name == extendsModelextends) - as ObjectModel?; // ignore: avoid_as - extendsModelfields.addAll(extendsModelextendsModel?.fields ?? []); - extendsModelextends = extendsModelextendsModel?.extendsModel; - } content = ObjectModelWriter( pubspecConfig, model, - extendsModelfields, modelGeneratorConfig, ).write(); } else if (model is EnumModel) { diff --git a/lib/writer/object_model_writer.dart b/lib/writer/object_model_writer.dart index aef0514..41748e3 100644 --- a/lib/writer/object_model_writer.dart +++ b/lib/writer/object_model_writer.dart @@ -1,6 +1,7 @@ import 'package:model_generator/model/field.dart'; import 'package:model_generator/model/item_type/map_type.dart'; import 'package:model_generator/util/generic_type.dart'; +import 'package:model_generator/util/list_extensions.dart'; import '../config/pubspec_config.dart'; import '../config/yml_generator_config.dart'; @@ -15,17 +16,16 @@ class ObjectModelWriter { '// GENERATED CODE - DO NOT MODIFY BY HAND'; final PubspecConfig pubspecConfig; final ObjectModel jsonModel; - final List extendsFields; final YmlGeneratorConfig yamlConfig; const ObjectModelWriter( this.pubspecConfig, this.jsonModel, - this.extendsFields, this.yamlConfig, ); String write() { + final extendsFields = _getExtendedFields(jsonModel, yamlConfig); final sb = StringBuffer() ..writeln(autoGeneratedWarning) ..writeln(); @@ -351,4 +351,18 @@ class ObjectModelWriter { 'List> serialize${jsonModel.name}List(List<${jsonModel.name}> objects)') ..writeln(' => objects.map((object) => object.toJson()).toList();'); } + + List _getExtendedFields( + ObjectModel model, YmlGeneratorConfig ymlConfig) { + final extendsModelfields = []; + var extendsModelextends = model.extendsModel; + while (extendsModelextends != null) { + final extendsModelextendsModel = ymlConfig.models.firstWhereOrNull( + (element) => element.name == extendsModelextends) + as ObjectModel?; // ignore: avoid_as + extendsModelfields.addAll(extendsModelextendsModel?.fields ?? []); + extendsModelextends = extendsModelextendsModel?.extendsModel; + } + return extendsModelfields; + } } diff --git a/test/writer/object_model_writer/array/output.txt b/test/writer/object_model_writer/array/output.txt index 2b9ef7f..604ce9c 100644 --- a/test/writer/object_model_writer/array/output.txt +++ b/test/writer/object_model_writer/array/output.txt @@ -6,7 +6,7 @@ part 'person.g.dart'; @JsonSerializable(explicitToJson: true) class Person { - @JsonKey(name: 'info', required: true) + @JsonKey(name: 'info', required: true, includeIfNull: false) final List info; const Person({ diff --git a/test/writer/object_model_writer/converter/config.txt b/test/writer/object_model_writer/converter/config.txt index 1563a6c..9b37a0d 100644 --- a/test/writer/object_model_writer/converter/config.txt +++ b/test/writer/object_model_writer/converter/config.txt @@ -5,7 +5,7 @@ Person: - DateTimeConverter properties: birthDay: - type: DateTime + type: DateTime? DateTimeConverter: path: user/person/ type: json_converter \ No newline at end of file diff --git a/test/writer/object_model_writer/converter/output.txt b/test/writer/object_model_writer/converter/output.txt index fc6952d..c8a9077 100644 --- a/test/writer/object_model_writer/converter/output.txt +++ b/test/writer/object_model_writer/converter/output.txt @@ -8,11 +8,11 @@ part 'person.g.dart'; @JsonSerializable(explicitToJson: true) @DateTimeConverter() class Person { - @JsonKey(name: 'birthday') - final DateTime? birthday; + @JsonKey(name: 'birthDay', includeIfNull: false) + final DateTime? birthDay; const Person({ - this.birthday, + this.birthDay, }); factory Person.fromJson(Map json) => _$PersonFromJson(json); diff --git a/test/writer/object_model_writer/custom-from-to/config.txt b/test/writer/object_model_writer/custom-from-to/config.txt index b65e8cb..5ebeb58 100644 --- a/test/writer/object_model_writer/custom-from-to/config.txt +++ b/test/writer/object_model_writer/custom-from-to/config.txt @@ -2,7 +2,7 @@ Person: path: user/person/ type: object properties: - time: Time + time: Time? Time: path: user/person/ type: custom_from_to_json \ No newline at end of file diff --git a/test/writer/object_model_writer/custom-from-to/output.txt b/test/writer/object_model_writer/custom-from-to/output.txt index 2b927f7..cfed304 100644 --- a/test/writer/object_model_writer/custom-from-to/output.txt +++ b/test/writer/object_model_writer/custom-from-to/output.txt @@ -8,9 +8,9 @@ part 'person.g.dart'; @JsonSerializable(explicitToJson: true) class Person { @JsonKey(name: 'time', fromJson: handleTimeFromJson, toJson: handleTimeToJson) - Time? time; + final Time? time; - Person({ + const Person({ this.time, }); diff --git a/test/writer/object_model_writer/default-field-required-null-disallowed/config.txt b/test/writer/object_model_writer/default-field-required-null-disallowed/config.txt index 7deeac3..735c02e 100644 --- a/test/writer/object_model_writer/default-field-required-null-disallowed/config.txt +++ b/test/writer/object_model_writer/default-field-required-null-disallowed/config.txt @@ -5,5 +5,5 @@ Person: firstName: description: A good description type: String - default_field: "'test'" + default_value: "'test'" disallow_null: true \ No newline at end of file diff --git a/test/writer/object_model_writer/default-field-required-null-disallowed/output.txt b/test/writer/object_model_writer/default-field-required-null-disallowed/output.txt index ab50d35..e4ba12c 100644 --- a/test/writer/object_model_writer/default-field-required-null-disallowed/output.txt +++ b/test/writer/object_model_writer/default-field-required-null-disallowed/output.txt @@ -7,7 +7,7 @@ part 'person.g.dart'; @JsonSerializable(explicitToJson: true) class Person { ///A good description - @JsonKey(name: 'firstName', required: false, disallowNullValue: true) + @JsonKey(name: 'firstName', required: false, disallowNullValue: true, includeIfNull: false) final String firstName; const Person({ diff --git a/test/writer/object_model_writer/default-field-required/config.txt b/test/writer/object_model_writer/default-field-required/config.txt index 47a38f4..e45014f 100644 --- a/test/writer/object_model_writer/default-field-required/config.txt +++ b/test/writer/object_model_writer/default-field-required/config.txt @@ -5,4 +5,4 @@ Person: firstName: description: A good description type: String - default_field: "'test'" \ No newline at end of file + default_value: "'test'" \ No newline at end of file diff --git a/test/writer/object_model_writer/default-field-required/output.txt b/test/writer/object_model_writer/default-field-required/output.txt index bfd7965..c3c1300 100644 --- a/test/writer/object_model_writer/default-field-required/output.txt +++ b/test/writer/object_model_writer/default-field-required/output.txt @@ -7,7 +7,7 @@ part 'person.g.dart'; @JsonSerializable(explicitToJson: true) class Person { ///A good description - @JsonKey(name: 'firstName', required: false, disallowNullValue: false) + @JsonKey(name: 'firstName', required: false, disallowNullValue: false, includeIfNull: false) final String firstName; const Person({ diff --git a/test/writer/object_model_writer/default-field/config.txt b/test/writer/object_model_writer/default-field/config.txt index e2e606e..69f51c3 100644 --- a/test/writer/object_model_writer/default-field/config.txt +++ b/test/writer/object_model_writer/default-field/config.txt @@ -4,5 +4,5 @@ Person: properties: firstName: description: A good description - type: string - default_field: "'test'" \ No newline at end of file + type: String? + default_value: "'test'" \ No newline at end of file diff --git a/test/writer/object_model_writer/default-field/output.txt b/test/writer/object_model_writer/default-field/output.txt index 92a6488..0f7e772 100644 --- a/test/writer/object_model_writer/default-field/output.txt +++ b/test/writer/object_model_writer/default-field/output.txt @@ -7,7 +7,7 @@ part 'person.g.dart'; @JsonSerializable(explicitToJson: true) class Person { ///A good description - @JsonKey(name: 'firstName') + @JsonKey(name: 'firstName', includeIfNull: false) final String? firstName; const Person({ diff --git a/test/writer/object_model_writer/extend-fields-twice/config.txt b/test/writer/object_model_writer/extend-fields-twice/config.txt index a0b56f6..8bf8fc0 100644 --- a/test/writer/object_model_writer/extend-fields-twice/config.txt +++ b/test/writer/object_model_writer/extend-fields-twice/config.txt @@ -3,7 +3,7 @@ Admin: type: object extends: User properties: - permission: String? + permission: String User: path: user/person/ diff --git a/test/writer/object_model_writer/extend-fields-twice/output.txt b/test/writer/object_model_writer/extend-fields-twice/output.txt index 3f2878a..6c53aba 100644 --- a/test/writer/object_model_writer/extend-fields-twice/output.txt +++ b/test/writer/object_model_writer/extend-fields-twice/output.txt @@ -12,11 +12,11 @@ class Admin extends User { const Admin({ required this.permission, - required String name, - required String email, + String? email, + String? name, }) : super( - name: name, email: email, + name: name, ); factory Admin.fromJson(Map json) => _$AdminFromJson(json); diff --git a/test/writer/object_model_writer/extend-fields-with-non-dart-type/config.txt b/test/writer/object_model_writer/extend-fields-with-non-dart-type/config.txt index 964998e..c31ca0e 100644 --- a/test/writer/object_model_writer/extend-fields-with-non-dart-type/config.txt +++ b/test/writer/object_model_writer/extend-fields-with-non-dart-type/config.txt @@ -3,7 +3,7 @@ User: type: object extends: Person properties: - email: String? + email: String Person: path: user/person/ diff --git a/test/writer/object_model_writer/extend-fields/config.txt b/test/writer/object_model_writer/extend-fields/config.txt index a06ae85..af1ea19 100644 --- a/test/writer/object_model_writer/extend-fields/config.txt +++ b/test/writer/object_model_writer/extend-fields/config.txt @@ -1,12 +1,10 @@ User: path: user/person/ - type: object extends: Person properties: - email: String? + email: String Person: path: user/person/ - type: object properties: - name: String? \ No newline at end of file + name: String \ No newline at end of file diff --git a/test/writer/object_model_writer/ignore/output.txt b/test/writer/object_model_writer/ignore/output.txt index 5f894a3..6a4ba78 100644 --- a/test/writer/object_model_writer/ignore/output.txt +++ b/test/writer/object_model_writer/ignore/output.txt @@ -6,10 +6,10 @@ part 'person.g.dart'; @JsonSerializable(explicitToJson: true) class Person { - @JsonKey(name: 'firstName', includeFromJson: false, includeToJson: false) - final String? firstName; + @JsonKey(name: 'firstName', includeIfNull: false, includeFromJson: false, includeToJson: false) + String? firstName; - const Person({ + Person({ this.firstName, }); diff --git a/test/writer/object_model_writer/import_sorting/config.txt b/test/writer/object_model_writer/import_sorting/config.txt index 5249c58..7557339 100644 --- a/test/writer/object_model_writer/import_sorting/config.txt +++ b/test/writer/object_model_writer/import_sorting/config.txt @@ -2,7 +2,7 @@ BModel: path: user/b_model/ type: object properties: - firstName: AModel? + aModel: AModel? AModel: path: user/a_model/ type: object diff --git a/test/writer/object_model_writer/include-if-null/config.txt b/test/writer/object_model_writer/include-if-null-false/config.txt similarity index 100% rename from test/writer/object_model_writer/include-if-null/config.txt rename to test/writer/object_model_writer/include-if-null-false/config.txt diff --git a/test/writer/object_model_writer/include-if-null/output.txt b/test/writer/object_model_writer/include-if-null-false/output.txt similarity index 100% rename from test/writer/object_model_writer/include-if-null/output.txt rename to test/writer/object_model_writer/include-if-null-false/output.txt diff --git a/test/writer/object_model_writer/include-if-null/pubspec.txt b/test/writer/object_model_writer/include-if-null-false/pubspec.txt similarity index 100% rename from test/writer/object_model_writer/include-if-null/pubspec.txt rename to test/writer/object_model_writer/include-if-null-false/pubspec.txt diff --git a/test/writer/object_model_writer/include-if-null-true/config.txt b/test/writer/object_model_writer/include-if-null-true/config.txt new file mode 100644 index 0000000..7a62821 --- /dev/null +++ b/test/writer/object_model_writer/include-if-null-true/config.txt @@ -0,0 +1,7 @@ +Person: + path: user/person/ + type: object + properties: + firstName: + include_if_null: true + type: String? \ No newline at end of file diff --git a/test/writer/object_model_writer/include-if-null-true/output.txt b/test/writer/object_model_writer/include-if-null-true/output.txt new file mode 100644 index 0000000..ea530fc --- /dev/null +++ b/test/writer/object_model_writer/include-if-null-true/output.txt @@ -0,0 +1,20 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +import 'package:json_annotation/json_annotation.dart'; + +part 'person.g.dart'; + +@JsonSerializable(explicitToJson: true) +class Person { + @JsonKey(name: 'firstName') + final String? firstName; + + const Person({ + this.firstName, + }); + + factory Person.fromJson(Map json) => _$PersonFromJson(json); + + Map toJson() => _$PersonToJson(this); + +} diff --git a/test/writer/object_model_writer/include-if-null-true/pubspec.txt b/test/writer/object_model_writer/include-if-null-true/pubspec.txt new file mode 100644 index 0000000..95f3114 --- /dev/null +++ b/test/writer/object_model_writer/include-if-null-true/pubspec.txt @@ -0,0 +1,4 @@ +name: model_generator_example + +model_generator: + config_path: model_generator/config.yaml diff --git a/test/writer/object_model_writer/includeFromJson/output.txt b/test/writer/object_model_writer/includeFromJson/output.txt index 56eef5c..dac5e0e 100644 --- a/test/writer/object_model_writer/includeFromJson/output.txt +++ b/test/writer/object_model_writer/includeFromJson/output.txt @@ -6,7 +6,7 @@ part 'person.g.dart'; @JsonSerializable(explicitToJson: true) class Person { - @JsonKey(name: 'firstName', includeFromJson: false) + @JsonKey(name: 'firstName', includeIfNull: false, includeFromJson: false) final String? firstName; const Person({ diff --git a/test/writer/object_model_writer/includeToJson-includeFromJson/config.txt b/test/writer/object_model_writer/includeToJson-includeFromJson/config.txt index 5cb3cbb..03ce50d 100644 --- a/test/writer/object_model_writer/includeToJson-includeFromJson/config.txt +++ b/test/writer/object_model_writer/includeToJson-includeFromJson/config.txt @@ -5,4 +5,5 @@ Person: firstName: includeFromJson: false includeToJson: false + include_if_null: false type: String? \ No newline at end of file diff --git a/test/writer/object_model_writer/includeToJson-includeFromJson/output.txt b/test/writer/object_model_writer/includeToJson-includeFromJson/output.txt index 5f894a3..136b971 100644 --- a/test/writer/object_model_writer/includeToJson-includeFromJson/output.txt +++ b/test/writer/object_model_writer/includeToJson-includeFromJson/output.txt @@ -6,7 +6,7 @@ part 'person.g.dart'; @JsonSerializable(explicitToJson: true) class Person { - @JsonKey(name: 'firstName', includeFromJson: false, includeToJson: false) + @JsonKey(name: 'firstName', includeIfNull: false, includeFromJson: false, includeToJson: false) final String? firstName; const Person({ diff --git a/test/writer/object_model_writer/includeToJson/output.txt b/test/writer/object_model_writer/includeToJson/output.txt index 58167c6..9c0b5d4 100644 --- a/test/writer/object_model_writer/includeToJson/output.txt +++ b/test/writer/object_model_writer/includeToJson/output.txt @@ -6,7 +6,7 @@ part 'person.g.dart'; @JsonSerializable(explicitToJson: true) class Person { - @JsonKey(name: 'firstName', includeToJson: false) + @JsonKey(name: 'firstName', includeIfNull: false, includeToJson: false) final String? firstName; const Person({ diff --git a/test/writer/object_model_writer/map-reference/output.txt b/test/writer/object_model_writer/map-reference/output.txt index 73955fc..db179db 100644 --- a/test/writer/object_model_writer/map-reference/output.txt +++ b/test/writer/object_model_writer/map-reference/output.txt @@ -7,7 +7,7 @@ part 'person.g.dart'; @JsonSerializable(explicitToJson: true) class Person { - @JsonKey(name: 'info') + @JsonKey(name: 'info', includeIfNull: false) final Map? info; const Person({ diff --git a/test/writer/object_model_writer/non-final/output.txt b/test/writer/object_model_writer/non-final/output.txt index f317a32..d795a93 100644 --- a/test/writer/object_model_writer/non-final/output.txt +++ b/test/writer/object_model_writer/non-final/output.txt @@ -6,7 +6,7 @@ part 'person.g.dart'; @JsonSerializable(explicitToJson: true) class Person { - @JsonKey(name: 'gender') + @JsonKey(name: 'gender', includeIfNull: false) String? gender; Person({ diff --git a/test/writer/object_model_writer/normal-equals-hashcode-empty/output.txt b/test/writer/object_model_writer/normal-equals-hashcode-empty/output.txt index d591e65..ad98792 100644 --- a/test/writer/object_model_writer/normal-equals-hashcode-empty/output.txt +++ b/test/writer/object_model_writer/normal-equals-hashcode-empty/output.txt @@ -6,7 +6,7 @@ part 'person.g.dart'; @JsonSerializable(explicitToJson: true) class Person { - @JsonKey(name: 'firstName') + @JsonKey(name: 'firstName', includeIfNull: false) final String? firstName; const Person({ diff --git a/test/writer/object_model_writer/normal-equals-hashcode-some-ignored/output.txt b/test/writer/object_model_writer/normal-equals-hashcode-some-ignored/output.txt index 632ca03..270cc47 100644 --- a/test/writer/object_model_writer/normal-equals-hashcode-some-ignored/output.txt +++ b/test/writer/object_model_writer/normal-equals-hashcode-some-ignored/output.txt @@ -6,7 +6,7 @@ part 'person.g.dart'; @JsonSerializable(explicitToJson: true) class Person { - @JsonKey(name: 'firstName') + @JsonKey(name: 'firstName', includeIfNull: false) final String? firstName; @JsonKey(name: 'lastName') final String? lastName; diff --git a/test/writer/object_model_writer/normal-equals-hashcode/output.txt b/test/writer/object_model_writer/normal-equals-hashcode/output.txt index d1976a1..8e7bce8 100644 --- a/test/writer/object_model_writer/normal-equals-hashcode/output.txt +++ b/test/writer/object_model_writer/normal-equals-hashcode/output.txt @@ -6,7 +6,7 @@ part 'person.g.dart'; @JsonSerializable(explicitToJson: true) class Person { - @JsonKey(name: 'firstName') + @JsonKey(name: 'firstName', includeIfNull: false) final String? firstName; const Person({ diff --git a/test/writer/object_model_writer/normal-retrofit-compute/output.txt b/test/writer/object_model_writer/normal-retrofit-compute/output.txt index 865fb58..a4d0b14 100644 --- a/test/writer/object_model_writer/normal-retrofit-compute/output.txt +++ b/test/writer/object_model_writer/normal-retrofit-compute/output.txt @@ -7,7 +7,7 @@ part 'person.g.dart'; @JsonSerializable(explicitToJson: true) class Person { ///A good description - @JsonKey(name: 'firstName') + @JsonKey(name: 'firstName', includeIfNull: false) final String? firstName; const Person({ diff --git a/test/writer/object_model_writer/normal-static-create/output.txt b/test/writer/object_model_writer/normal-static-create/output.txt index 8b1822f..73f0613 100644 --- a/test/writer/object_model_writer/normal-static-create/output.txt +++ b/test/writer/object_model_writer/normal-static-create/output.txt @@ -7,7 +7,7 @@ part 'person.g.dart'; @JsonSerializable(explicitToJson: true) class Person { ///A good description - @JsonKey(name: 'firstName') + @JsonKey(name: 'firstName', includeIfNull: false) final String? firstName; const Person({ diff --git a/test/writer/object_model_writer/normal-with-description/config.txt b/test/writer/object_model_writer/normal-with-description/config.txt index 6dae534..94137df 100644 --- a/test/writer/object_model_writer/normal-with-description/config.txt +++ b/test/writer/object_model_writer/normal-with-description/config.txt @@ -6,4 +6,4 @@ Person: firstName: description: A good description type: String? - default_field: "'test'" \ No newline at end of file + default_value: "'test'" \ No newline at end of file diff --git a/test/writer/object_model_writer/normal-with-description/output.txt b/test/writer/object_model_writer/normal-with-description/output.txt index b5ad5aa..cd687e8 100644 --- a/test/writer/object_model_writer/normal-with-description/output.txt +++ b/test/writer/object_model_writer/normal-with-description/output.txt @@ -8,7 +8,7 @@ part 'person.g.dart'; @JsonSerializable(explicitToJson: true) class Person { ///A good description - @JsonKey(name: 'firstName') + @JsonKey(name: 'firstName', includeIfNull: false) final String? firstName; const Person({ diff --git a/test/writer/object_model_writer/normal/output.txt b/test/writer/object_model_writer/normal/output.txt index 3f459a4..030561d 100644 --- a/test/writer/object_model_writer/normal/output.txt +++ b/test/writer/object_model_writer/normal/output.txt @@ -7,7 +7,7 @@ part 'person.g.dart'; @JsonSerializable(explicitToJson: true) class Person { ///A good description - @JsonKey(name: 'firstName') + @JsonKey(name: 'firstName', includeIfNull: false) final String? firstName; const Person({ diff --git a/test/writer/object_model_writer/retrofit-compute-tearoff/output.txt b/test/writer/object_model_writer/retrofit-compute-tearoff/output.txt index ef7477e..b0b5f6e 100644 --- a/test/writer/object_model_writer/retrofit-compute-tearoff/output.txt +++ b/test/writer/object_model_writer/retrofit-compute-tearoff/output.txt @@ -7,7 +7,7 @@ part 'person.g.dart'; @JsonSerializable(explicitToJson: true) class Person { ///A good description - @JsonKey(name: 'firstName') + @JsonKey(name: 'firstName', includeIfNull: false) final String? firstName; const Person({ diff --git a/test/writer/object_model_writer/to-json-from-json-handler/config.txt b/test/writer/object_model_writer/to-json-from-json-handler/config.txt index 88865f7..3f00deb 100644 --- a/test/writer/object_model_writer/to-json-from-json-handler/config.txt +++ b/test/writer/object_model_writer/to-json-from-json-handler/config.txt @@ -1,13 +1,16 @@ Person: path: user/custom_person.dart type: object + extra_imports: + - testing:handler.dart properties: - address: Address + address: + type: Address + toJson: Handler.handleToJson + fromJson: Handler.handleFromJson Address: type: object properties: streetName: - type: String - toJson: handleToJson - fromJson: handleFromJson \ No newline at end of file + type: String \ No newline at end of file diff --git a/test/writer/object_model_writer/to-json-from-json-handler/output.txt b/test/writer/object_model_writer/to-json-from-json-handler/output.txt index 96843e6..9c31fe6 100644 --- a/test/writer/object_model_writer/to-json-from-json-handler/output.txt +++ b/test/writer/object_model_writer/to-json-from-json-handler/output.txt @@ -8,7 +8,7 @@ part 'person.g.dart'; @JsonSerializable(explicitToJson: true) class Person { - @JsonKey(name: 'address', required: true, fromJson: Handler.handleFromJson, toJson: Handler.handleToJson) + @JsonKey(name: 'address', required: true, includeIfNull: false, fromJson: Handler.handleFromJson, toJson: Handler.handleToJson) final Address address; const Person({ diff --git a/test/writer/object_model_writer/to-json-from-json/config.txt b/test/writer/object_model_writer/to-json-from-json/config.txt index 88865f7..4d4b635 100644 --- a/test/writer/object_model_writer/to-json-from-json/config.txt +++ b/test/writer/object_model_writer/to-json-from-json/config.txt @@ -2,12 +2,13 @@ Person: path: user/custom_person.dart type: object properties: - address: Address + address: + type: Address + toJson: handleToJson + fromJson: handleFromJson Address: type: object properties: streetName: - type: String - toJson: handleToJson - fromJson: handleFromJson \ No newline at end of file + type: String \ No newline at end of file diff --git a/test/writer/object_model_writer/to-json-from-json/output.txt b/test/writer/object_model_writer/to-json-from-json/output.txt index cf0af9d..8ae9c03 100644 --- a/test/writer/object_model_writer/to-json-from-json/output.txt +++ b/test/writer/object_model_writer/to-json-from-json/output.txt @@ -7,7 +7,7 @@ part 'person.g.dart'; @JsonSerializable(explicitToJson: true) class Person { - @JsonKey(name: 'address', required: true, fromJson: handleFromJson, toJson: handleToJson) + @JsonKey(name: 'address', required: true, includeIfNull: false, fromJson: handleFromJson, toJson: handleToJson) final Address address; const Person({ diff --git a/test/writer/object_model_writer/unknown-enum-value/config.txt b/test/writer/object_model_writer/unknown-enum-value/config.txt index 2c51190..16c3d01 100644 --- a/test/writer/object_model_writer/unknown-enum-value/config.txt +++ b/test/writer/object_model_writer/unknown-enum-value/config.txt @@ -2,9 +2,10 @@ Person: path: user/person/ type: object properties: - firstName: + gender: include_if_null: false - type: String? + unknown_enum_value: X + type: Gender Gender: path: user/person/ type: enum diff --git a/test/writer/object_model_writer/unknown-enum-value/output.txt b/test/writer/object_model_writer/unknown-enum-value/output.txt index b6260ac..3174953 100644 --- a/test/writer/object_model_writer/unknown-enum-value/output.txt +++ b/test/writer/object_model_writer/unknown-enum-value/output.txt @@ -7,7 +7,7 @@ part 'person.g.dart'; @JsonSerializable(explicitToJson: true) class Person { - @JsonKey(name: 'gender', required: true, unknownEnumValue: Gender.X) + @JsonKey(name: 'gender', required: true, includeIfNull: false, unknownEnumValue: Gender.X) final Gender gender; const Person({ diff --git a/test/writer/object_model_writer_test.dart b/test/writer/object_model_writer_test.dart index 55d5afb..33f4a16 100644 --- a/test/writer/object_model_writer_test.dart +++ b/test/writer/object_model_writer_test.dart @@ -1,1226 +1,46 @@ -import 'package:model_generator/model/field.dart'; -import 'package:model_generator/model/item_type/array_type.dart'; -import 'package:model_generator/model/item_type/date_time_type.dart'; -import 'package:model_generator/model/item_type/map_type.dart'; -import 'package:model_generator/model/item_type/object_type.dart'; -import 'package:model_generator/model/item_type/string_type.dart'; +import 'dart:io'; + +import 'package:model_generator/config/pubspec_config.dart'; +import 'package:model_generator/config/yml_generator_config.dart'; import 'package:model_generator/model/model/object_model.dart'; +import 'package:model_generator/writer/object_model_writer.dart'; import 'package:test/test.dart'; -import 'writer_test_helper.dart'; - void main() { - group('ObjectModelWriter', () { - test('Normal ObjectModelWriter with not required field', () { - final model = ObjectModel( - name: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: false, - staticCreate: false, - fields: [ - Field( - name: 'firstName', - type: StringType(), - isRequired: false, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - ignoreEquality: false, - nonFinal: false, - description: 'A good description'), - ], - converters: [], - ); - WriterTestHelper.testObjectModelWriter(model, [], 'normal'); - }); - - test( - 'Normal ObjectModelWriter with not required field - equals and hashcode', - () { - final model = ObjectModel( - name: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: false, - staticCreate: false, - fields: [ - Field( - name: 'firstName', - type: StringType(), - isRequired: false, - ignore: false, - includeFromJson: true, - includeToJson: true, - ignoreEquality: false, - includeIfNull: true, - nonFinal: false, - ), - ], - converters: [], - ); - WriterTestHelper.testObjectModelWriter( - model, [], 'normal-equals-hashcode'); - }); - - test('Normal ObjectModelWriter with explicit to json false', () { - final model = ObjectModel( - name: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - explicitToJson: false, - generateForGenerics: false, - staticCreate: false, - fields: [ - Field( - name: 'firstName', - type: StringType(), - ignoreEquality: false, - isRequired: false, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - nonFinal: false, - ), - ], - converters: [], - ); - WriterTestHelper.testObjectModelWriter( - model, [], 'explicit-to-json-false'); - }); - test('Normal ObjectModelWriter with explicit to json false in pubspec', () { - final model = ObjectModel( - name: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: false, - staticCreate: false, - fields: [ - Field( - name: 'firstName', - type: StringType(), - isRequired: false, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - ignoreEquality: false, - nonFinal: false, - ), - ], - converters: [], - ); - WriterTestHelper.testObjectModelWriter( - model, [], 'explicit-to-json-false-pubspec'); - }); - test('Normal ObjectModelWriter with extra annotations', () { - final model = ObjectModel( - name: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: false, - staticCreate: false, - fields: [ - Field( - name: 'firstName', - type: StringType(), - isRequired: false, - ignoreEquality: false, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - nonFinal: false, - ), - ], - converters: [], - ); - WriterTestHelper.testObjectModelWriter(model, [], 'extra-imports'); - }); - test('Normal ObjectModelWriter with toString', () { - final model = ObjectModel( - name: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: false, - staticCreate: false, - fields: [ - Field( - name: 'firstName', - type: StringType(), - ignoreEquality: false, - isRequired: false, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - nonFinal: false, - ), - ], - converters: [], - ); - WriterTestHelper.testObjectModelWriter(model, [], 'normal-to-string'); - }); - test('Normal ObjectModelWriter with extra annotations on model', () { - final model = ObjectModel( - name: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: false, - staticCreate: false, - extraAnnotations: ['@veryGood'], - extraImports: ['testing:package.dart'], - fields: [ - Field( - name: 'firstName', - type: StringType(), - isRequired: false, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - ignoreEquality: false, - nonFinal: false, - ), - ], - converters: [], - ); - WriterTestHelper.testObjectModelWriter( - model, [], 'extra-imports-on-model'); - }); - test('Normal ObjectModelWriter with required field', () { - final model = ObjectModel( - name: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: false, - staticCreate: false, - fields: [ - Field( - name: 'firstName', - type: StringType(), - isRequired: true, - ignoreEquality: false, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - nonFinal: false, - ), - ], - converters: [], - ); - WriterTestHelper.testObjectModelWriter(model, [], 'required'); - }); - test('Nullsafe ObjectModelWriter with required field', () { - final model = ObjectModel( - name: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: false, - staticCreate: false, - fields: [ - Field( - name: 'firstName', - type: StringType(), - ignoreEquality: false, - isRequired: true, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - nonFinal: false, - ), - Field( - name: 'lastName', - type: StringType(), - isRequired: false, - ignoreEquality: false, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - nonFinal: false, - ), - ], - converters: [], - ); - WriterTestHelper.testObjectModelWriter(model, [], 'nullsafety'); - }); - - test('ObjectModelWriter with generate for generics default option', () { - final model = ObjectModel( - name: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: true, - staticCreate: false, - fields: [ - Field( - name: 'firstName', - type: StringType(), - isRequired: true, - ignore: false, - includeFromJson: true, - includeToJson: true, - ignoreEquality: false, - includeIfNull: true, - nonFinal: false, - ), - ], - converters: [], - ); - WriterTestHelper.testObjectModelWriter( - model, [], 'generate-for-generics'); - }); - - test('ObjectModelWriter with generate for generics override option', () { - final model = ObjectModel( - name: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: true, - staticCreate: false, - fields: [ - Field( - name: 'firstName', - type: StringType(), - isRequired: true, - ignoreEquality: false, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - nonFinal: false, - ), - ], - converters: [], - ); - WriterTestHelper.testObjectModelWriter( - model, [], 'generate-for-generics-override'); - }); - - test('ObjectModelWriter with generate for generics override option 2', () { - final model = ObjectModel( - name: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: false, - staticCreate: false, - fields: [ - Field( - name: 'firstName', - type: StringType(), - isRequired: true, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - ignoreEquality: false, - nonFinal: false, - ), - ], - converters: [], - ); - WriterTestHelper.testObjectModelWriter( - model, [], 'generate-for-generics-override-2'); - }); - - test('Normal ObjectModelWriter with includeFromJson field', () { - final model = ObjectModel( - name: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: false, - staticCreate: false, - fields: [ - Field( - name: 'firstName', - type: StringType(), - isRequired: false, - ignore: false, - includeFromJson: false, - includeToJson: true, - includeIfNull: true, - ignoreEquality: false, - nonFinal: false, - ), - ], - converters: [], - ); - WriterTestHelper.testObjectModelWriter(model, [], 'includeFromJson'); - }); - test('Normal ObjectModelWriter with includeToJson field', () { - final model = ObjectModel( - name: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: false, - staticCreate: false, - fields: [ - Field( - name: 'firstName', - type: StringType(), - isRequired: false, - ignore: false, - includeFromJson: true, - includeToJson: false, - includeIfNull: true, - ignoreEquality: false, - nonFinal: false, - ), - ], - converters: [], - ); - WriterTestHelper.testObjectModelWriter(model, [], 'includeToJson'); - }); - - test( - 'Normal ObjectModelWriter with includeFromJson and includeToJson field', - () { - final model = ObjectModel( - name: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: false, - staticCreate: false, - fields: [ - Field( - name: 'firstName', - type: StringType(), - isRequired: false, - ignore: false, - includeFromJson: false, - includeToJson: false, - includeIfNull: true, - ignoreEquality: false, - nonFinal: false, - ), - ], - converters: [], - ); - WriterTestHelper.testObjectModelWriter( - model, [], 'includeToJson-includeFromJson'); - }); - - test('Normal ObjectModelWriter with import sorting', () { - final model = ObjectModel( - name: 'BModel', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: false, - staticCreate: false, - fields: [ - Field( - name: 'aModel', - type: ObjectType('AModel'), - isRequired: false, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - ignoreEquality: false, - nonFinal: false, - ), - ], - converters: [], - ); - WriterTestHelper.testObjectModelWriter(model, [], 'import_sorting'); - }); - - test('Normal ObjectModelWriter with array field', () { - final model = ObjectModel( - name: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: false, - staticCreate: false, - fields: [ - Field( - name: 'info', - type: ArrayType('String'), - isRequired: true, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - ignoreEquality: false, - nonFinal: false, - ), - ], - converters: [], - ); - WriterTestHelper.testObjectModelWriter(model, [], 'array'); - }); - - test('Normal ObjectModelWriter with map field', () { - final model = ObjectModel( - name: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: false, - staticCreate: false, - fields: [ - Field( - name: 'info', - type: MapType(key: 'String', valueName: 'int'), - isRequired: true, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - nonFinal: false, - ignoreEquality: false, - ), - ], - converters: [], - ); - WriterTestHelper.testObjectModelWriter(model, [], 'map'); - }); - - test('Normal ObjectModelWriter with map field with reference', () { - final model = ObjectModel( - name: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: false, - staticCreate: false, - fields: [ - Field( - name: 'info', - type: MapType(key: 'String', valueName: 'Person'), - isRequired: false, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - ignoreEquality: false, - nonFinal: false, - ), - ], - converters: [], - ); - WriterTestHelper.testObjectModelWriter(model, [], 'map-reference'); - }); - - test('Normal ObjectModelWriter with non final', () { - final model = ObjectModel( - name: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: false, - staticCreate: false, - fields: [ - Field( - name: 'gender', - type: StringType(), - isRequired: false, - ignoreEquality: false, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - nonFinal: true, - ), - ], - converters: [], - ); - WriterTestHelper.testObjectModelWriter(model, [], 'non-final'); - }); - - test('Normal ObjectModelWriter with do not includeIfNull', () { - final model = ObjectModel( - name: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: false, - staticCreate: false, - fields: [ - Field( - name: 'firstName', - type: StringType(), - isRequired: false, - ignoreEquality: false, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: false, - nonFinal: false, - ), - ], - converters: [], - ); - WriterTestHelper.testObjectModelWriter(model, [], 'include-if-null'); - }); + void testObjectModelWriter(String path) { + final file = File('$path/output.txt'); + final pubspecFile = File('$path/pubspec.txt'); + final configFile = File('$path/config.txt'); + final expected = file.readAsStringSync(); + final pubspecContent = pubspecFile.readAsStringSync(); + final configContent = configFile.readAsStringSync(); + final pubspecConfig = PubspecConfig(pubspecContent); + final ymlConfig = YmlGeneratorConfig(pubspecConfig, configContent, ''); + final jsonModel = ymlConfig.models.first; + if (jsonModel is! ObjectModel) { + throw Exception( + 'The first model in the config file must be an object model and will be validated. The model is ${ymlConfig.models.first.runtimeType}'); + } + + final generateActual = + ObjectModelWriter(pubspecConfig, jsonModel, ymlConfig).write; + if (expected.startsWith('Exception')) { + expect(generateActual, throwsA(isA())); + } else { + expect(generateActual(), expected); + } + } - test('Normal ObjectModelWriter with do not includeIfNull', () { - final model = ObjectModel( - name: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: false, - staticCreate: false, - fields: [ - Field( - name: 'gender', - type: ObjectType('Gender'), - isRequired: true, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - nonFinal: false, - unknownEnumValue: 'X', - ignoreEquality: false, - ), - ], - converters: [], - ); - WriterTestHelper.testObjectModelWriter(model, [], 'unknown-enum-value'); - }); - - test('Normal ObjectModelWriter with custom from to', () { - final model = ObjectModel( - name: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: false, - staticCreate: false, - fields: [ - Field( - name: 'time', - type: ObjectType('Time'), - isRequired: false, - ignoreEquality: false, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - nonFinal: true, - ), - ], - converters: [], - ); - WriterTestHelper.testObjectModelWriter(model, [], 'custom-from-to'); - }); - - test('Normal ObjectModelWriter with sorting required fields', () { - final model = ObjectModel( - name: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: false, - staticCreate: false, - fields: [ - Field( - name: 'b', - type: StringType(), - isRequired: false, - ignore: false, - includeFromJson: true, - includeToJson: true, - ignoreEquality: false, - includeIfNull: true, - nonFinal: false, - ), - Field( - name: 'x', - type: StringType(), - isRequired: true, - ignoreEquality: false, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - nonFinal: false, - ), - Field( - name: 'a', - type: StringType(), - isRequired: true, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - nonFinal: false, - ignoreEquality: false, - ), - ], - converters: [], - ); - WriterTestHelper.testObjectModelWriter(model, [], 'sort'); - }); - - test('Normal ObjectModelWriter with converter', () { - final model = ObjectModel( - name: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: false, - staticCreate: false, - fields: [ - Field( - name: 'birthday', - type: DateTimeType(), - isRequired: false, - ignoreEquality: false, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - nonFinal: false, - ), - ], - converters: [ - 'DateTimeConverter', - ], - ); - WriterTestHelper.testObjectModelWriter(model, [], 'converter'); - }); - - test('Normal ObjectModelWriter with dart import', () { - final model = ObjectModel( - name: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: false, - staticCreate: false, - fields: [ - Field( - name: 'address', - type: ObjectType('Address'), - isRequired: true, - ignore: false, - includeFromJson: true, - includeToJson: true, - ignoreEquality: false, - includeIfNull: true, - nonFinal: false, - ), - ], - converters: [], - ); - WriterTestHelper.testObjectModelWriter(model, [], 'dart-import'); - }); - - test('Normal ObjectModelWriter with extended fields', () { - final model = ObjectModel( - name: 'User', - extendsModel: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: false, - fields: [ - Field( - name: 'email', - type: StringType(), - isRequired: true, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - nonFinal: false, - ignoreEquality: false, - ), - ], - converters: [], - ); - final extendsFields = [ - Field( - name: 'name', - type: StringType(), - isRequired: true, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - nonFinal: false, - ignoreEquality: false, - ), - ]; - WriterTestHelper.testObjectModelWriter( - model, extendsFields, 'extend-fields'); - }); - - test('Normal ObjectModelWriter with extended fields', () { - final model = ObjectModel( - name: 'User', - extendsModel: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: false, - fields: [ - Field( - name: 'email', - type: StringType(), - isRequired: true, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - nonFinal: false, - ignoreEquality: false, - ), - ], - converters: [], - ); - final extendsFields = [ - Field( - name: 'address', - type: ObjectType('Address'), - isRequired: true, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - nonFinal: false, - ignoreEquality: false, - ), - Field( - name: 'info', - type: MapType(key: 'String', valueName: 'Address'), - isRequired: false, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - nonFinal: false, - ignoreEquality: false, - ), - ]; - WriterTestHelper.testObjectModelWriter( - model, extendsFields, 'extend-fields-with-non-dart-type'); - }); - - test('Normal ObjectModelWriter with extended fields twice', () { - final model = ObjectModel( - name: 'Admin', - extendsModel: 'User', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: false, - fields: [ - Field( - name: 'permission', - type: StringType(), - isRequired: true, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - nonFinal: false, - ignoreEquality: false, - ), - ], - converters: [], - ); - final extendsFields = [ - Field( - name: 'name', - type: StringType(), - isRequired: true, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - nonFinal: false, - ignoreEquality: false, - ), - Field( - name: 'email', - type: StringType(), - isRequired: true, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - nonFinal: false, - ignoreEquality: false, - ), - ]; - WriterTestHelper.testObjectModelWriter( - model, extendsFields, 'extend-fields-twice'); - }); - - test('Normal ObjectModelWriter with package import', () { - final model = ObjectModel( - name: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: false, - staticCreate: false, - fields: [ - Field( - name: 'address', - type: ObjectType('Address'), - isRequired: true, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - ignoreEquality: false, - nonFinal: false, - ), - ], - converters: [], - ); - WriterTestHelper.testObjectModelWriter(model, [], 'package-import'); - }); - - test('Normal ObjectModelWriter with package import and .dart', () { - final model = ObjectModel( - name: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: false, - staticCreate: false, - fields: [ - Field( - name: 'address', - type: ObjectType('Address'), - isRequired: true, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - ignoreEquality: false, - nonFinal: false, - ), - ], - converters: [], - ); - WriterTestHelper.testObjectModelWriter(model, [], 'dart-package-import'); - }); - - test('Normal ObjectModelWriter without path', () { - final model = ObjectModel( - name: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: false, - staticCreate: false, - fields: [ - Field( - name: 'address', - type: ObjectType('Address'), - isRequired: true, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - nonFinal: false, - ignoreEquality: false, - ), - ], - converters: [], - ); - WriterTestHelper.testObjectModelWriter(model, [], 'without-path'); - }); - - test('Normal ObjectModelWriter with toJson & fromJson', () { - final model = ObjectModel( - name: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: false, - staticCreate: false, - fields: [ - Field( - name: 'address', - type: ObjectType('Address'), - isRequired: true, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - nonFinal: false, - toJson: 'handleToJson', - fromJson: 'handleFromJson', - ignoreEquality: false, - ), - ], - converters: [], - ); - WriterTestHelper.testObjectModelWriter(model, [], 'to-json-from-json'); - }); - - test('Normal ObjectModelWriter with toJson & fromJson extra imports', () { - final model = ObjectModel( - name: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: false, - staticCreate: false, - extraImports: ['testing:handler.dart'], - fields: [ - Field( - name: 'address', - type: ObjectType('Address'), - isRequired: true, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - ignoreEquality: false, - nonFinal: false, - toJson: 'Handler.handleToJson', - fromJson: 'Handler.handleFromJson', - ), - ], - converters: [], - ); - WriterTestHelper.testObjectModelWriter( - model, [], 'to-json-from-json-handler'); - }); - - test('Normal ObjectModelWriter with static create', () { - final model = ObjectModel( - name: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: false, - staticCreate: true, - fields: [ - Field( - name: 'firstName', - type: StringType(), - isRequired: false, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - ignoreEquality: false, - nonFinal: false, - description: 'A good description'), - ], - converters: [], - ); - WriterTestHelper.testObjectModelWriter(model, [], 'normal-static-create'); - }); - - test( - 'Normal ObjectModelWriter with all fields ignored from equals hashcode', - () { - final model = ObjectModel( - name: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: false, - staticCreate: false, - equalsAndHashCode: true, - fields: [ - Field( - name: 'firstName', - type: StringType(), - isRequired: false, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - ignoreEquality: true, - nonFinal: false, - ), - ], - converters: [], - ); - WriterTestHelper.testObjectModelWriter( - model, [], 'normal-equals-hashcode-empty'); - }); - test( - 'Normal ObjectModelWriter with some fields ignored from equals hashcode', - () { - final model = ObjectModel( - name: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: false, - staticCreate: false, - equalsAndHashCode: true, - fields: [ - Field( - name: 'firstName', - type: StringType(), - isRequired: false, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - ignoreEquality: true, - nonFinal: false, - ), - Field( - name: 'lastName', - type: StringType(), - isRequired: false, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - ignoreEquality: false, - nonFinal: false, - ), - ], - converters: [], - ); - WriterTestHelper.testObjectModelWriter( - model, [], 'normal-equals-hashcode-some-ignored'); - }); - test('Normal ObjectModelWriter with default field', () { - final model = ObjectModel( - name: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: false, - staticCreate: false, - fields: [ - Field( - name: 'firstName', - type: StringType(), - isRequired: false, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - ignoreEquality: false, - nonFinal: false, - defaultValue: '\'test\'', - description: 'A good description'), - ], - converters: [], - ); - WriterTestHelper.testObjectModelWriter(model, [], 'default-field'); - }); - test('Normal ObjectModelWriter with description', () { - final model = ObjectModel( - name: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: false, - staticCreate: false, - fields: [ - Field( - name: 'firstName', - type: StringType(), - isRequired: false, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - ignoreEquality: false, - nonFinal: false, - defaultValue: '\'test\'', - description: 'A good description'), - ], - converters: [], - description: 'A good class description'); - WriterTestHelper.testObjectModelWriter( - model, [], 'normal-with-description'); - }); - test('Normal ObjectModelWriter with default required field', () { - final model = ObjectModel( - name: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: false, - staticCreate: false, - fields: [ - Field( - name: 'firstName', - type: StringType(), - isRequired: true, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - ignoreEquality: false, - nonFinal: false, - defaultValue: '\'test\'', - description: 'A good description'), - ], - converters: [], - ); - WriterTestHelper.testObjectModelWriter( - model, [], 'default-field-required'); - }); - test('Normal ObjectModelWriter with default required field disallow null', - () { - final model = ObjectModel( - name: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: false, - staticCreate: false, - fields: [ - Field( - name: 'firstName', - type: StringType(), - isRequired: true, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - ignoreEquality: false, - nonFinal: false, - disallowNull: true, - defaultValue: '\'test\'', - description: 'A good description'), - ], - converters: [], - ); - WriterTestHelper.testObjectModelWriter( - model, [], 'default-field-required-null-disallowed'); - }); - test('Normal ObjectModelWriter with retrofit compute', () { - final model = ObjectModel( - name: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: false, - staticCreate: false, - fields: [ - Field( - name: 'firstName', - type: StringType(), - isRequired: false, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - ignoreEquality: false, - nonFinal: false, - description: 'A good description'), - ], - converters: [], - ); - WriterTestHelper.testObjectModelWriter( - model, [], 'normal-retrofit-compute'); - }); - test('Normal ObjectModelWriter with retrofit compute - tearoff', () { - final model = ObjectModel( - name: 'Person', - path: 'path_to_my_model', - baseDirectory: 'base_dir', - generateForGenerics: false, - staticCreate: false, - fields: [ - Field( - name: 'firstName', - type: StringType(), - isRequired: false, - ignore: false, - includeFromJson: true, - includeToJson: true, - includeIfNull: true, - ignoreEquality: false, - nonFinal: false, - description: 'A good description'), - ], - converters: [], - ); - WriterTestHelper.testObjectModelWriter( - model, [], 'retrofit-compute-tearoff'); - }); + group('ObjectModelWriter', () { + final directory = Directory('test/writer/object_model_writer'); + final folders = directory.listSync(); + for (final folder in folders) { + if (folder is Directory) { + test('Folder ${folder.path}', () { + print('Testing folder ${folder.path}'); + testObjectModelWriter(folder.path); + }); + } + } }); } diff --git a/test/writer/writer_test_helper.dart b/test/writer/writer_test_helper.dart index b760048..55fb148 100644 --- a/test/writer/writer_test_helper.dart +++ b/test/writer/writer_test_helper.dart @@ -1,13 +1,8 @@ import 'dart:io'; import 'package:test/test.dart'; -import 'package:model_generator/config/pubspec_config.dart'; -import 'package:model_generator/config/yml_generator_config.dart'; -import 'package:model_generator/model/field.dart'; import 'package:model_generator/model/model/enum_model.dart'; -import 'package:model_generator/model/model/object_model.dart'; import 'package:model_generator/writer/enum_model_writer.dart'; -import 'package:model_generator/writer/object_model_writer.dart'; class WriterTestHelper { static testEnumModelWriter(EnumModel model, String resultFileName) { @@ -18,25 +13,4 @@ class WriterTestHelper { // print(actual); expect(actual, output); } - - static testObjectModelWriter( - ObjectModel model, List extendsFields, String resultFileName) { - print(Directory.current); - final file = - File('test/writer/object_model_writer/$resultFileName/output.txt'); - final pubspecFile = - File('test/writer/object_model_writer/$resultFileName/pubspec.txt'); - final configFile = - File('test/writer/object_model_writer/$resultFileName/config.txt'); - final output = file.readAsStringSync(); - final pubspecContent = pubspecFile.readAsStringSync(); - final configContent = configFile.readAsStringSync(); - final pubspecConfig = PubspecConfig(pubspecContent); - final ymlConfig = YmlGeneratorConfig(pubspecConfig, configContent, ''); - final actual = - ObjectModelWriter(pubspecConfig, model, extendsFields, ymlConfig) - .write(); - // print(actual); - expect(actual, output); - } }