From 30410b74ca957cbbe4277586ef284bbc22100157 Mon Sep 17 00:00:00 2001 From: Jordy De Jonghe Date: Wed, 30 Aug 2023 14:57:35 +0200 Subject: [PATCH 01/10] #126: fixed some tests --- .../object_model_writer/array/output.txt | 2 +- .../object_model_writer/converter/config.txt | 2 +- .../object_model_writer/converter/output.txt | 6 +- .../custom-from-to/config.txt | 2 +- .../config.txt | 2 +- .../output.txt | 2 +- .../default-field-required/config.txt | 2 +- .../default-field-required/output.txt | 2 +- .../default-field/config.txt | 4 +- .../default-field/output.txt | 2 +- .../extend-fields-twice/config.txt | 2 +- .../extend-fields/config.txt | 2 +- .../object_model_writer/ignore/output.txt | 6 +- .../import_sorting/config.txt | 2 +- .../includeFromJson/output.txt | 2 +- .../includeToJson-includeFromJson/config.txt | 1 + .../includeToJson-includeFromJson/output.txt | 2 +- .../includeToJson/output.txt | 2 +- .../map-reference/output.txt | 2 +- .../object_model_writer/non-final/output.txt | 2 +- .../normal-equals-hashcode-empty/output.txt | 2 +- .../output.txt | 2 +- .../normal-equals-hashcode/output.txt | 2 +- .../normal-retrofit-compute/output.txt | 2 +- .../normal-static-create/output.txt | 2 +- .../normal-with-description/config.txt | 2 +- .../normal-with-description/output.txt | 2 +- .../object_model_writer/normal/output.txt | 2 +- .../retrofit-compute-tearoff/output.txt | 2 +- test/writer/object_model_writer_test.dart | 1256 +---------------- test/writer/writer_test_helper.dart | 26 - 31 files changed, 71 insertions(+), 1278 deletions(-) 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/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/config.txt b/test/writer/object_model_writer/extend-fields/config.txt index a06ae85..920dd45 100644 --- a/test/writer/object_model_writer/extend-fields/config.txt +++ b/test/writer/object_model_writer/extend-fields/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/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/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_test.dart b/test/writer/object_model_writer_test.dart index 55d5afb..b7cbc66 100644 --- a/test/writer/object_model_writer_test.dart +++ b/test/writer/object_model_writer_test.dart @@ -1,1226 +1,44 @@ -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); - } } From 6f3d60b7bf0c5a7d55c5d45741d32d18331aed3a Mon Sep 17 00:00:00 2001 From: Jordy De Jonghe Date: Wed, 30 Aug 2023 15:21:02 +0200 Subject: [PATCH 02/10] #126: more test fixes --- .../object_model_writer/custom-from-to/output.txt | 4 ++-- .../extend-fields-twice/output.txt | 6 +++--- .../extend-fields-with-non-dart-type/config.txt | 2 +- .../object_model_writer/extend-fields/config.txt | 4 +--- .../unknown-enum-value/config.txt | 5 +++-- .../unknown-enum-value/output.txt | 2 +- test/writer/object_model_writer_test.dart | 12 ++++++++++-- 7 files changed, 21 insertions(+), 14 deletions(-) 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/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 920dd45..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 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/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 b7cbc66..390d6b3 100644 --- a/test/writer/object_model_writer_test.dart +++ b/test/writer/object_model_writer_test.dart @@ -2,7 +2,9 @@ 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/field.dart'; import 'package:model_generator/model/model/object_model.dart'; +import 'package:model_generator/util/list_extensions.dart'; import 'package:model_generator/writer/object_model_writer.dart'; import 'package:test/test.dart'; @@ -20,8 +22,14 @@ void main() { 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; + final extendsModelfields = []; + var extendsModelextends = jsonModel.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; + } + final generateActual = ObjectModelWriter(pubspecConfig, jsonModel, extendsModelfields, ymlConfig).write; if (expected.startsWith('Exception')) { expect(generateActual, throwsA(isA())); } else { From 06c07651166443aeb0cd803e9d26b94bf480c481 Mon Sep 17 00:00:00 2001 From: Jordy De Jonghe Date: Wed, 30 Aug 2023 15:44:45 +0200 Subject: [PATCH 03/10] #126: fixed last tests --- .../to-json-from-json-handler/config.txt | 13 ----------- .../to-json-from-json-handler/output.txt | 22 ------------------- .../to-json-from-json-handler/pubspec.txt | 4 ---- .../to-json-from-json/config.txt | 9 ++++---- .../to-json-from-json/output.txt | 2 +- 5 files changed, 6 insertions(+), 44 deletions(-) delete mode 100644 test/writer/object_model_writer/to-json-from-json-handler/config.txt delete mode 100644 test/writer/object_model_writer/to-json-from-json-handler/output.txt delete mode 100644 test/writer/object_model_writer/to-json-from-json-handler/pubspec.txt 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 deleted file mode 100644 index 88865f7..0000000 --- a/test/writer/object_model_writer/to-json-from-json-handler/config.txt +++ /dev/null @@ -1,13 +0,0 @@ -Person: - path: user/custom_person.dart - type: object - properties: - address: Address - -Address: - type: object - properties: - streetName: - type: String - toJson: handleToJson - fromJson: handleFromJson \ 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 deleted file mode 100644 index 96843e6..0000000 --- a/test/writer/object_model_writer/to-json-from-json-handler/output.txt +++ /dev/null @@ -1,22 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -import 'package:json_annotation/json_annotation.dart'; -import 'package:model_generator_example/model/address.dart'; -import 'testing:handler.dart'; - -part 'person.g.dart'; - -@JsonSerializable(explicitToJson: true) -class Person { - @JsonKey(name: 'address', required: true, fromJson: Handler.handleFromJson, toJson: Handler.handleToJson) - final Address address; - - const Person({ - required this.address, - }); - - factory Person.fromJson(Map json) => _$PersonFromJson(json); - - Map toJson() => _$PersonToJson(this); - -} diff --git a/test/writer/object_model_writer/to-json-from-json-handler/pubspec.txt b/test/writer/object_model_writer/to-json-from-json-handler/pubspec.txt deleted file mode 100644 index 95f3114..0000000 --- a/test/writer/object_model_writer/to-json-from-json-handler/pubspec.txt +++ /dev/null @@ -1,4 +0,0 @@ -name: model_generator_example - -model_generator: - config_path: model_generator/config.yaml 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({ From af1c78d719af76184fe4a463c9afb43026719852 Mon Sep 17 00:00:00 2001 From: Jordy De Jonghe Date: Wed, 30 Aug 2023 15:54:51 +0200 Subject: [PATCH 04/10] #126: fixed some more tests --- .../to-json-from-json-handler/config.txt | 16 ++++++++++++++ .../to-json-from-json-handler/output.txt | 22 +++++++++++++++++++ .../to-json-from-json-handler/pubspec.txt | 4 ++++ 3 files changed, 42 insertions(+) create mode 100644 test/writer/object_model_writer/to-json-from-json-handler/config.txt create mode 100644 test/writer/object_model_writer/to-json-from-json-handler/output.txt create mode 100644 test/writer/object_model_writer/to-json-from-json-handler/pubspec.txt 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 new file mode 100644 index 0000000..3f00deb --- /dev/null +++ b/test/writer/object_model_writer/to-json-from-json-handler/config.txt @@ -0,0 +1,16 @@ +Person: + path: user/custom_person.dart + type: object + extra_imports: + - testing:handler.dart + properties: + address: + type: Address + toJson: Handler.handleToJson + fromJson: Handler.handleFromJson + +Address: + type: object + properties: + streetName: + 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 new file mode 100644 index 0000000..9c31fe6 --- /dev/null +++ b/test/writer/object_model_writer/to-json-from-json-handler/output.txt @@ -0,0 +1,22 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +import 'package:json_annotation/json_annotation.dart'; +import 'package:model_generator_example/model/address.dart'; +import 'testing:handler.dart'; + +part 'person.g.dart'; + +@JsonSerializable(explicitToJson: true) +class Person { + @JsonKey(name: 'address', required: true, includeIfNull: false, fromJson: Handler.handleFromJson, toJson: Handler.handleToJson) + final Address address; + + const Person({ + required this.address, + }); + + factory Person.fromJson(Map json) => _$PersonFromJson(json); + + Map toJson() => _$PersonToJson(this); + +} diff --git a/test/writer/object_model_writer/to-json-from-json-handler/pubspec.txt b/test/writer/object_model_writer/to-json-from-json-handler/pubspec.txt new file mode 100644 index 0000000..95f3114 --- /dev/null +++ b/test/writer/object_model_writer/to-json-from-json-handler/pubspec.txt @@ -0,0 +1,4 @@ +name: model_generator_example + +model_generator: + config_path: model_generator/config.yaml From 9844a56817797a859727796e6d5408493ed01f43 Mon Sep 17 00:00:00 2001 From: Jordy De Jonghe Date: Wed, 30 Aug 2023 16:02:16 +0200 Subject: [PATCH 05/10] #126: put duplicate code in util --- bin/model_generator.dart | 54 +++++------------------ lib/util/object_model_writer_util.dart | 19 ++++++++ lib/writer/object_model_writer.dart | 4 +- test/writer/object_model_writer_test.dart | 12 +---- 4 files changed, 35 insertions(+), 54 deletions(-) create mode 100644 lib/util/object_model_writer_util.dart diff --git a/bin/model_generator.dart b/bin/model_generator.dart index 8ec3857..a0022af 100644 --- a/bin/model_generator.dart +++ b/bin/model_generator.dart @@ -4,24 +4,19 @@ 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'; Future main(List args) async { final argParser = ArgParser() - ..addOption('path', - help: - 'Override the default model configuration path. This value will be used instead of the default OR what you have configured in pubspec.yaml') - ..addFlag('help', - help: 'Displays this help screen', defaultsTo: false, negatable: false); + ..addOption('path', help: 'Override the default model configuration path. This value will be used instead of the default OR what you have configured in pubspec.yaml') + ..addFlag('help', help: 'Displays this help screen', defaultsTo: false, negatable: false); final results = argParser.parse(args); if (results['help']) { @@ -31,8 +26,7 @@ Future main(List args) async { final pubspecYaml = File(join(Directory.current.path, 'pubspec.yaml')); if (!pubspecYaml.existsSync()) { - throw Exception( - 'This program should be run from the root of a flutter/dart project'); + throw Exception('This program should be run from the root of a flutter/dart project'); } final pubspecContent = pubspecYaml.readAsStringSync(); final pubspecConfig = PubspecConfig(pubspecContent); @@ -56,17 +50,14 @@ Future main(List args) async { } if (!configEntity.existsSync()) { - throw Exception( - 'This program requires a config file/dir. `$configPath` does not exist'); + throw Exception('This program requires a config file/dir. `$configPath` does not exist'); } final YmlGeneratorConfig modelGeneratorConfig; if (configEntity is Directory) { - modelGeneratorConfig = - readConfigFilesInDirectory(pubspecConfig, configEntity, configPath); + modelGeneratorConfig = readConfigFilesInDirectory(pubspecConfig, configEntity, configPath); } else { final modelGeneratorContent = (configEntity as File).readAsStringSync(); - modelGeneratorConfig = - YmlGeneratorConfig(pubspecConfig, modelGeneratorContent, configPath); + modelGeneratorConfig = YmlGeneratorConfig(pubspecConfig, modelGeneratorContent, configPath); } modelGeneratorConfig.checkIfTypesAvailable(); if (modelGeneratorConfig.models.isEmpty) { @@ -78,21 +69,13 @@ Future main(List args) async { print('Done!!!'); } -YmlGeneratorConfig readConfigFilesInDirectory( - PubspecConfig config, Directory configEntity, String directoryPath) { - final configFiles = configEntity - .listSync(recursive: true) - .whereType() - .where((element) => - extension(element.path) == '.yaml' || - extension(element.path) == '.yml'); - final configs = configFiles.map((e) => - YmlGeneratorConfig(config, e.readAsStringSync(), relative(e.path))); +YmlGeneratorConfig readConfigFilesInDirectory(PubspecConfig config, Directory configEntity, String directoryPath) { + final configFiles = configEntity.listSync(recursive: true).whereType().where((element) => extension(element.path) == '.yaml' || extension(element.path) == '.yml'); + final configs = configFiles.map((e) => YmlGeneratorConfig(config, e.readAsStringSync(), relative(e.path))); return YmlGeneratorConfig.merge(configs, directoryPath); } -void writeToFiles( - PubspecConfig pubspecConfig, YmlGeneratorConfig modelGeneratorConfig) { +void writeToFiles(PubspecConfig pubspecConfig, YmlGeneratorConfig modelGeneratorConfig) { for (final model in modelGeneratorConfig.models) { final modelDirectory = Directory(join('lib', model.baseDirectory)); if (!modelDirectory.existsSync()) { @@ -100,20 +83,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) { @@ -124,15 +96,13 @@ void writeToFiles( continue; } if (content == null) { - throw Exception( - 'content is null for ${model.name}. File a bug report on github. This is not normal. https://github.com/icapps/flutter-model-generator/issues'); + throw Exception('content is null for ${model.name}. File a bug report on github. This is not normal. https://github.com/icapps/flutter-model-generator/issues'); } File file; if (model.path == null) { file = File(join('lib', model.baseDirectory, '${model.fileName}.dart')); } else { - file = File(join( - 'lib', model.baseDirectory, model.path, '${model.fileName}.dart')); + file = File(join('lib', model.baseDirectory, model.path, '${model.fileName}.dart')); } if (!file.existsSync()) { file.createSync(recursive: true); diff --git a/lib/util/object_model_writer_util.dart b/lib/util/object_model_writer_util.dart new file mode 100644 index 0000000..f3b2cf1 --- /dev/null +++ b/lib/util/object_model_writer_util.dart @@ -0,0 +1,19 @@ +import 'package:model_generator/config/yml_generator_config.dart'; +import 'package:model_generator/model/field.dart'; +import 'package:model_generator/model/model/object_model.dart'; +import 'package:model_generator/util/list_extensions.dart'; + +class ObjectModelWriterUtil { + ObjectModelWriterUtil._(); + + static 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/lib/writer/object_model_writer.dart b/lib/writer/object_model_writer.dart index aef0514..0a7d6ba 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/object_model_writer_util.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 = ObjectModelWriterUtil.getExtendedFields(jsonModel, yamlConfig); final sb = StringBuffer() ..writeln(autoGeneratedWarning) ..writeln(); diff --git a/test/writer/object_model_writer_test.dart b/test/writer/object_model_writer_test.dart index 390d6b3..01dcef9 100644 --- a/test/writer/object_model_writer_test.dart +++ b/test/writer/object_model_writer_test.dart @@ -2,9 +2,7 @@ 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/field.dart'; import 'package:model_generator/model/model/object_model.dart'; -import 'package:model_generator/util/list_extensions.dart'; import 'package:model_generator/writer/object_model_writer.dart'; import 'package:test/test.dart'; @@ -22,14 +20,8 @@ void main() { 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 extendsModelfields = []; - var extendsModelextends = jsonModel.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; - } - final generateActual = ObjectModelWriter(pubspecConfig, jsonModel, extendsModelfields, ymlConfig).write; + + final generateActual = ObjectModelWriter(pubspecConfig, jsonModel, ymlConfig).write; if (expected.startsWith('Exception')) { expect(generateActual, throwsA(isA())); } else { From 2b44ce1cae2af1cec0c2227e6fb51981257f628d Mon Sep 17 00:00:00 2001 From: Jordy De Jonghe Date: Wed, 30 Aug 2023 16:08:16 +0200 Subject: [PATCH 06/10] #126: small changes --- lib/util/object_model_writer_util.dart | 19 ------ lib/writer/object_model_writer.dart | 94 +++++++++++--------------- 2 files changed, 39 insertions(+), 74 deletions(-) delete mode 100644 lib/util/object_model_writer_util.dart diff --git a/lib/util/object_model_writer_util.dart b/lib/util/object_model_writer_util.dart deleted file mode 100644 index f3b2cf1..0000000 --- a/lib/util/object_model_writer_util.dart +++ /dev/null @@ -1,19 +0,0 @@ -import 'package:model_generator/config/yml_generator_config.dart'; -import 'package:model_generator/model/field.dart'; -import 'package:model_generator/model/model/object_model.dart'; -import 'package:model_generator/util/list_extensions.dart'; - -class ObjectModelWriterUtil { - ObjectModelWriterUtil._(); - - static 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/lib/writer/object_model_writer.dart b/lib/writer/object_model_writer.dart index 0a7d6ba..dde1236 100644 --- a/lib/writer/object_model_writer.dart +++ b/lib/writer/object_model_writer.dart @@ -1,7 +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/object_model_writer_util.dart'; +import 'package:model_generator/util/list_extensions.dart'; import '../config/pubspec_config.dart'; import '../config/yml_generator_config.dart'; @@ -12,8 +12,7 @@ import '../util/case_util.dart'; import '../util/type_checker.dart'; class ObjectModelWriter { - static const autoGeneratedWarning = - '// GENERATED CODE - DO NOT MODIFY BY HAND'; + static const autoGeneratedWarning = '// GENERATED CODE - DO NOT MODIFY BY HAND'; final PubspecConfig pubspecConfig; final ObjectModel jsonModel; final YmlGeneratorConfig yamlConfig; @@ -25,14 +24,12 @@ class ObjectModelWriter { ); String write() { - final extendsFields = ObjectModelWriterUtil.getExtendedFields(jsonModel, yamlConfig); + final extendsFields = _getExtendedFields(jsonModel, yamlConfig); final sb = StringBuffer() ..writeln(autoGeneratedWarning) ..writeln(); - final imports = {} - ..add("import 'package:json_annotation/json_annotation.dart';"); - for (final element - in (jsonModel.extraImports ?? pubspecConfig.extraImports)) { + final imports = {}..add("import 'package:json_annotation/json_annotation.dart';"); + for (final element in (jsonModel.extraImports ?? pubspecConfig.extraImports)) { imports.add('import \'$element\';'); } final extendsModel = jsonModel.extendsModel; @@ -45,8 +42,7 @@ class ObjectModelWriter { for (final field in jsonModel.fields) { final type = field.type; - if (!TypeChecker.isKnownDartType(type.name) && - type.name != jsonModel.name) { + if (!TypeChecker.isKnownDartType(type.name) && type.name != jsonModel.name) { imports.addAll(_getImportsFromPath(type.name)); } if (type is MapType && !TypeChecker.isKnownDartType(type.valueName)) { @@ -77,8 +73,7 @@ class ObjectModelWriter { } else { sb.writeln('@JsonSerializable()'); } - (jsonModel.extraAnnotations ?? pubspecConfig.extraAnnotations) - .forEach(sb.writeln); + (jsonModel.extraAnnotations ?? pubspecConfig.extraAnnotations).forEach(sb.writeln); for (final converter in jsonModel.converters) { sb.writeln('@$converter()'); @@ -126,8 +121,7 @@ class ObjectModelWriter { } if (key.unknownEnumValue != null) { - sb.write( - ', unknownEnumValue: ${key.type.name}.${key.unknownEnumValue}'); + sb.write(', unknownEnumValue: ${key.type.name}.${key.unknownEnumValue}'); } final fieldModel = yamlConfig.getModelByName(key.type); @@ -150,29 +144,22 @@ class ObjectModelWriter { sb.writeln('${_getKeyType(key)} ${key.name};'); } - final anyNonFinal = jsonModel.fields.any((element) => element.nonFinal) || - extendsFields.any((element) => element.nonFinal); + final anyNonFinal = jsonModel.fields.any((element) => element.nonFinal) || extendsFields.any((element) => element.nonFinal); sb ..writeln() ..writeln(' ${anyNonFinal ? '' : 'const '}${jsonModel.name}({'); - for (final key in jsonModel.fields - .where((key) => (key.isRequired && !key.hasDefaultValue))) { + for (final key in jsonModel.fields.where((key) => (key.isRequired && !key.hasDefaultValue))) { sb.writeln(' required this.${key.name}${_fillDefaulValue(key)},'); } - for (final key in extendsFields - .where((key) => (key.isRequired && !key.hasDefaultValue))) { - sb.writeln( - ' required ${_getKeyType(key)} ${key.name}${_fillDefaulValue(key)},'); + for (final key in extendsFields.where((key) => (key.isRequired && !key.hasDefaultValue))) { + sb.writeln(' required ${_getKeyType(key)} ${key.name}${_fillDefaulValue(key)},'); } - for (final key in jsonModel.fields - .where((key) => !(key.isRequired && !key.hasDefaultValue))) { + for (final key in jsonModel.fields.where((key) => !(key.isRequired && !key.hasDefaultValue))) { sb.writeln(' this.${key.name}${_fillDefaulValue(key)},'); } - for (final key in extendsFields - .where((key) => !(key.isRequired && !key.hasDefaultValue))) { - sb.writeln( - ' ${_getKeyType(key)} ${key.name}${_fillDefaulValue(key)},'); + for (final key in extendsFields.where((key) => !(key.isRequired && !key.hasDefaultValue))) { + sb.writeln(' ${_getKeyType(key)} ${key.name}${_fillDefaulValue(key)},'); } if (extendsModel != null) { sb.writeln(' }) : super('); @@ -188,25 +175,21 @@ class ObjectModelWriter { ..writeln(); } if (jsonModel.generateForGenerics) { - sb.writeln( - ' factory ${jsonModel.name}.fromJson(Object? json) => _\$${jsonModel.name}FromJson(json as Map); // ignore: avoid_as'); + sb.writeln(' factory ${jsonModel.name}.fromJson(Object? json) => _\$${jsonModel.name}FromJson(json as Map); // ignore: avoid_as'); } else { - sb.writeln( - ' factory ${jsonModel.name}.fromJson(Map json) => _\$${jsonModel.name}FromJson(json);'); + sb.writeln(' factory ${jsonModel.name}.fromJson(Map json) => _\$${jsonModel.name}FromJson(json);'); } sb.writeln(); if (extendsModel != null) { sb.writeln(' @override'); } - sb.writeln( - ' Map toJson() => _\$${jsonModel.name}ToJson(this);'); + sb.writeln(' Map toJson() => _\$${jsonModel.name}ToJson(this);'); if (jsonModel.staticCreate ?? pubspecConfig.staticCreate) { sb ..writeln() ..writeln(' // ignore: prefer_constructors_over_static_methods') - ..writeln( - ' static ${jsonModel.name} create(${jsonModel.generateForGenerics ? 'Object? json' : 'Map json'}) => ${jsonModel.name}.fromJson(json);'); + ..writeln(' static ${jsonModel.name} create(${jsonModel.generateForGenerics ? 'Object? json' : 'Map json'}) => ${jsonModel.name}.fromJson(json);'); } if (jsonModel.equalsAndHashCode ?? pubspecConfig.equalsHashCode) { @@ -217,8 +200,7 @@ class ObjectModelWriter { ..writeln(' identical(this, other) ||') ..writeln(' other is ${jsonModel.name} &&') ..write(' runtimeType == other.runtimeType'); - for (final field - in jsonModel.fields.where((field) => !field.ignoreEquality)) { + for (final field in jsonModel.fields.where((field) => !field.ignoreEquality)) { sb.write(' &&\n ${field.name} == other.${field.name}'); } if (extendsModel != null) { @@ -230,8 +212,7 @@ class ObjectModelWriter { ..writeln(' @override') ..writeln(' int get hashCode =>'); var c = 0; - for (final field - in jsonModel.fields.where((field) => !field.ignoreEquality)) { + for (final field in jsonModel.fields.where((field) => !field.ignoreEquality)) { if (c++ > 0) sb.write(' ^\n'); sb.write(' ${field.name}.hashCode'); } @@ -272,8 +253,7 @@ class ObjectModelWriter { } String _getKeyType(Field key) { - final nullableFlag = - key.isRequired || key.type.name == 'dynamic' ? '' : '?'; + final nullableFlag = key.isRequired || key.type.name == 'dynamic' ? '' : '?'; final keyType = key.type; if (keyType is ArrayType) { return 'List<${keyType.name}>$nullableFlag'; @@ -313,8 +293,7 @@ class ObjectModelWriter { if (path.endsWith('.dart')) { imports.add("import '$pathWithPackage';"); } else { - imports.add( - "import '$pathWithPackage/${reCaseFieldName.snakeCase}.dart';"); + imports.add("import '$pathWithPackage/${reCaseFieldName.snakeCase}.dart';"); } } } @@ -330,25 +309,30 @@ class ObjectModelWriter { } void createRetrofitMappers(StringBuffer sb) { - final hasConstructorTearOffs = - pubspecConfig.languageVersion?.isAtLeast(2, 15) ?? false; + final hasConstructorTearOffs = pubspecConfig.languageVersion?.isAtLeast(2, 15) ?? false; sb ..writeln() ..writeln(hasConstructorTearOffs ? 'const deserialize${jsonModel.name} = ${jsonModel.name}.fromJson;' : '${jsonModel.name} deserialize${jsonModel.name}(Map json) => ${jsonModel.name}.fromJson(json);') ..writeln() - ..writeln( - 'Map serialize${jsonModel.name}(${jsonModel.name} object) => object.toJson();') + ..writeln('Map serialize${jsonModel.name}(${jsonModel.name} object) => object.toJson();') ..writeln() - ..writeln( - 'List<${jsonModel.name}> deserialize${jsonModel.name}List(List> jsonList)') - ..writeln(hasConstructorTearOffs - ? ' => jsonList.map(${jsonModel.name}.fromJson).toList();' - : ' => jsonList.map((json) => ${jsonModel.name}.fromJson(json)).toList();') + ..writeln('List<${jsonModel.name}> deserialize${jsonModel.name}List(List> jsonList)') + ..writeln(hasConstructorTearOffs ? ' => jsonList.map(${jsonModel.name}.fromJson).toList();' : ' => jsonList.map((json) => ${jsonModel.name}.fromJson(json)).toList();') ..writeln() - ..writeln( - 'List> serialize${jsonModel.name}List(List<${jsonModel.name}> objects)') + ..writeln('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; + } } From 624af5d4c61ca24a7dd9d2fed31f2450fa1d2cf3 Mon Sep 17 00:00:00 2001 From: Jordy De Jonghe Date: Wed, 30 Aug 2023 16:09:06 +0200 Subject: [PATCH 07/10] #126: formatting --- bin/model_generator.dart | 41 +++++++---- lib/writer/object_model_writer.dart | 86 +++++++++++++++-------- test/writer/object_model_writer_test.dart | 6 +- 3 files changed, 91 insertions(+), 42 deletions(-) diff --git a/bin/model_generator.dart b/bin/model_generator.dart index a0022af..df0a25d 100644 --- a/bin/model_generator.dart +++ b/bin/model_generator.dart @@ -15,8 +15,11 @@ import 'package:path/path.dart'; Future main(List args) async { final argParser = ArgParser() - ..addOption('path', help: 'Override the default model configuration path. This value will be used instead of the default OR what you have configured in pubspec.yaml') - ..addFlag('help', help: 'Displays this help screen', defaultsTo: false, negatable: false); + ..addOption('path', + help: + 'Override the default model configuration path. This value will be used instead of the default OR what you have configured in pubspec.yaml') + ..addFlag('help', + help: 'Displays this help screen', defaultsTo: false, negatable: false); final results = argParser.parse(args); if (results['help']) { @@ -26,7 +29,8 @@ Future main(List args) async { final pubspecYaml = File(join(Directory.current.path, 'pubspec.yaml')); if (!pubspecYaml.existsSync()) { - throw Exception('This program should be run from the root of a flutter/dart project'); + throw Exception( + 'This program should be run from the root of a flutter/dart project'); } final pubspecContent = pubspecYaml.readAsStringSync(); final pubspecConfig = PubspecConfig(pubspecContent); @@ -50,14 +54,17 @@ Future main(List args) async { } if (!configEntity.existsSync()) { - throw Exception('This program requires a config file/dir. `$configPath` does not exist'); + throw Exception( + 'This program requires a config file/dir. `$configPath` does not exist'); } final YmlGeneratorConfig modelGeneratorConfig; if (configEntity is Directory) { - modelGeneratorConfig = readConfigFilesInDirectory(pubspecConfig, configEntity, configPath); + modelGeneratorConfig = + readConfigFilesInDirectory(pubspecConfig, configEntity, configPath); } else { final modelGeneratorContent = (configEntity as File).readAsStringSync(); - modelGeneratorConfig = YmlGeneratorConfig(pubspecConfig, modelGeneratorContent, configPath); + modelGeneratorConfig = + YmlGeneratorConfig(pubspecConfig, modelGeneratorContent, configPath); } modelGeneratorConfig.checkIfTypesAvailable(); if (modelGeneratorConfig.models.isEmpty) { @@ -69,13 +76,21 @@ Future main(List args) async { print('Done!!!'); } -YmlGeneratorConfig readConfigFilesInDirectory(PubspecConfig config, Directory configEntity, String directoryPath) { - final configFiles = configEntity.listSync(recursive: true).whereType().where((element) => extension(element.path) == '.yaml' || extension(element.path) == '.yml'); - final configs = configFiles.map((e) => YmlGeneratorConfig(config, e.readAsStringSync(), relative(e.path))); +YmlGeneratorConfig readConfigFilesInDirectory( + PubspecConfig config, Directory configEntity, String directoryPath) { + final configFiles = configEntity + .listSync(recursive: true) + .whereType() + .where((element) => + extension(element.path) == '.yaml' || + extension(element.path) == '.yml'); + final configs = configFiles.map((e) => + YmlGeneratorConfig(config, e.readAsStringSync(), relative(e.path))); return YmlGeneratorConfig.merge(configs, directoryPath); } -void writeToFiles(PubspecConfig pubspecConfig, YmlGeneratorConfig modelGeneratorConfig) { +void writeToFiles( + PubspecConfig pubspecConfig, YmlGeneratorConfig modelGeneratorConfig) { for (final model in modelGeneratorConfig.models) { final modelDirectory = Directory(join('lib', model.baseDirectory)); if (!modelDirectory.existsSync()) { @@ -96,13 +111,15 @@ void writeToFiles(PubspecConfig pubspecConfig, YmlGeneratorConfig modelGenerator continue; } if (content == null) { - throw Exception('content is null for ${model.name}. File a bug report on github. This is not normal. https://github.com/icapps/flutter-model-generator/issues'); + throw Exception( + 'content is null for ${model.name}. File a bug report on github. This is not normal. https://github.com/icapps/flutter-model-generator/issues'); } File file; if (model.path == null) { file = File(join('lib', model.baseDirectory, '${model.fileName}.dart')); } else { - file = File(join('lib', model.baseDirectory, model.path, '${model.fileName}.dart')); + file = File(join( + 'lib', model.baseDirectory, model.path, '${model.fileName}.dart')); } if (!file.existsSync()) { file.createSync(recursive: true); diff --git a/lib/writer/object_model_writer.dart b/lib/writer/object_model_writer.dart index dde1236..41748e3 100644 --- a/lib/writer/object_model_writer.dart +++ b/lib/writer/object_model_writer.dart @@ -12,7 +12,8 @@ import '../util/case_util.dart'; import '../util/type_checker.dart'; class ObjectModelWriter { - static const autoGeneratedWarning = '// GENERATED CODE - DO NOT MODIFY BY HAND'; + static const autoGeneratedWarning = + '// GENERATED CODE - DO NOT MODIFY BY HAND'; final PubspecConfig pubspecConfig; final ObjectModel jsonModel; final YmlGeneratorConfig yamlConfig; @@ -28,8 +29,10 @@ class ObjectModelWriter { final sb = StringBuffer() ..writeln(autoGeneratedWarning) ..writeln(); - final imports = {}..add("import 'package:json_annotation/json_annotation.dart';"); - for (final element in (jsonModel.extraImports ?? pubspecConfig.extraImports)) { + final imports = {} + ..add("import 'package:json_annotation/json_annotation.dart';"); + for (final element + in (jsonModel.extraImports ?? pubspecConfig.extraImports)) { imports.add('import \'$element\';'); } final extendsModel = jsonModel.extendsModel; @@ -42,7 +45,8 @@ class ObjectModelWriter { for (final field in jsonModel.fields) { final type = field.type; - if (!TypeChecker.isKnownDartType(type.name) && type.name != jsonModel.name) { + if (!TypeChecker.isKnownDartType(type.name) && + type.name != jsonModel.name) { imports.addAll(_getImportsFromPath(type.name)); } if (type is MapType && !TypeChecker.isKnownDartType(type.valueName)) { @@ -73,7 +77,8 @@ class ObjectModelWriter { } else { sb.writeln('@JsonSerializable()'); } - (jsonModel.extraAnnotations ?? pubspecConfig.extraAnnotations).forEach(sb.writeln); + (jsonModel.extraAnnotations ?? pubspecConfig.extraAnnotations) + .forEach(sb.writeln); for (final converter in jsonModel.converters) { sb.writeln('@$converter()'); @@ -121,7 +126,8 @@ class ObjectModelWriter { } if (key.unknownEnumValue != null) { - sb.write(', unknownEnumValue: ${key.type.name}.${key.unknownEnumValue}'); + sb.write( + ', unknownEnumValue: ${key.type.name}.${key.unknownEnumValue}'); } final fieldModel = yamlConfig.getModelByName(key.type); @@ -144,22 +150,29 @@ class ObjectModelWriter { sb.writeln('${_getKeyType(key)} ${key.name};'); } - final anyNonFinal = jsonModel.fields.any((element) => element.nonFinal) || extendsFields.any((element) => element.nonFinal); + final anyNonFinal = jsonModel.fields.any((element) => element.nonFinal) || + extendsFields.any((element) => element.nonFinal); sb ..writeln() ..writeln(' ${anyNonFinal ? '' : 'const '}${jsonModel.name}({'); - for (final key in jsonModel.fields.where((key) => (key.isRequired && !key.hasDefaultValue))) { + for (final key in jsonModel.fields + .where((key) => (key.isRequired && !key.hasDefaultValue))) { sb.writeln(' required this.${key.name}${_fillDefaulValue(key)},'); } - for (final key in extendsFields.where((key) => (key.isRequired && !key.hasDefaultValue))) { - sb.writeln(' required ${_getKeyType(key)} ${key.name}${_fillDefaulValue(key)},'); + for (final key in extendsFields + .where((key) => (key.isRequired && !key.hasDefaultValue))) { + sb.writeln( + ' required ${_getKeyType(key)} ${key.name}${_fillDefaulValue(key)},'); } - for (final key in jsonModel.fields.where((key) => !(key.isRequired && !key.hasDefaultValue))) { + for (final key in jsonModel.fields + .where((key) => !(key.isRequired && !key.hasDefaultValue))) { sb.writeln(' this.${key.name}${_fillDefaulValue(key)},'); } - for (final key in extendsFields.where((key) => !(key.isRequired && !key.hasDefaultValue))) { - sb.writeln(' ${_getKeyType(key)} ${key.name}${_fillDefaulValue(key)},'); + for (final key in extendsFields + .where((key) => !(key.isRequired && !key.hasDefaultValue))) { + sb.writeln( + ' ${_getKeyType(key)} ${key.name}${_fillDefaulValue(key)},'); } if (extendsModel != null) { sb.writeln(' }) : super('); @@ -175,21 +188,25 @@ class ObjectModelWriter { ..writeln(); } if (jsonModel.generateForGenerics) { - sb.writeln(' factory ${jsonModel.name}.fromJson(Object? json) => _\$${jsonModel.name}FromJson(json as Map); // ignore: avoid_as'); + sb.writeln( + ' factory ${jsonModel.name}.fromJson(Object? json) => _\$${jsonModel.name}FromJson(json as Map); // ignore: avoid_as'); } else { - sb.writeln(' factory ${jsonModel.name}.fromJson(Map json) => _\$${jsonModel.name}FromJson(json);'); + sb.writeln( + ' factory ${jsonModel.name}.fromJson(Map json) => _\$${jsonModel.name}FromJson(json);'); } sb.writeln(); if (extendsModel != null) { sb.writeln(' @override'); } - sb.writeln(' Map toJson() => _\$${jsonModel.name}ToJson(this);'); + sb.writeln( + ' Map toJson() => _\$${jsonModel.name}ToJson(this);'); if (jsonModel.staticCreate ?? pubspecConfig.staticCreate) { sb ..writeln() ..writeln(' // ignore: prefer_constructors_over_static_methods') - ..writeln(' static ${jsonModel.name} create(${jsonModel.generateForGenerics ? 'Object? json' : 'Map json'}) => ${jsonModel.name}.fromJson(json);'); + ..writeln( + ' static ${jsonModel.name} create(${jsonModel.generateForGenerics ? 'Object? json' : 'Map json'}) => ${jsonModel.name}.fromJson(json);'); } if (jsonModel.equalsAndHashCode ?? pubspecConfig.equalsHashCode) { @@ -200,7 +217,8 @@ class ObjectModelWriter { ..writeln(' identical(this, other) ||') ..writeln(' other is ${jsonModel.name} &&') ..write(' runtimeType == other.runtimeType'); - for (final field in jsonModel.fields.where((field) => !field.ignoreEquality)) { + for (final field + in jsonModel.fields.where((field) => !field.ignoreEquality)) { sb.write(' &&\n ${field.name} == other.${field.name}'); } if (extendsModel != null) { @@ -212,7 +230,8 @@ class ObjectModelWriter { ..writeln(' @override') ..writeln(' int get hashCode =>'); var c = 0; - for (final field in jsonModel.fields.where((field) => !field.ignoreEquality)) { + for (final field + in jsonModel.fields.where((field) => !field.ignoreEquality)) { if (c++ > 0) sb.write(' ^\n'); sb.write(' ${field.name}.hashCode'); } @@ -253,7 +272,8 @@ class ObjectModelWriter { } String _getKeyType(Field key) { - final nullableFlag = key.isRequired || key.type.name == 'dynamic' ? '' : '?'; + final nullableFlag = + key.isRequired || key.type.name == 'dynamic' ? '' : '?'; final keyType = key.type; if (keyType is ArrayType) { return 'List<${keyType.name}>$nullableFlag'; @@ -293,7 +313,8 @@ class ObjectModelWriter { if (path.endsWith('.dart')) { imports.add("import '$pathWithPackage';"); } else { - imports.add("import '$pathWithPackage/${reCaseFieldName.snakeCase}.dart';"); + imports.add( + "import '$pathWithPackage/${reCaseFieldName.snakeCase}.dart';"); } } } @@ -309,27 +330,36 @@ class ObjectModelWriter { } void createRetrofitMappers(StringBuffer sb) { - final hasConstructorTearOffs = pubspecConfig.languageVersion?.isAtLeast(2, 15) ?? false; + final hasConstructorTearOffs = + pubspecConfig.languageVersion?.isAtLeast(2, 15) ?? false; sb ..writeln() ..writeln(hasConstructorTearOffs ? 'const deserialize${jsonModel.name} = ${jsonModel.name}.fromJson;' : '${jsonModel.name} deserialize${jsonModel.name}(Map json) => ${jsonModel.name}.fromJson(json);') ..writeln() - ..writeln('Map serialize${jsonModel.name}(${jsonModel.name} object) => object.toJson();') + ..writeln( + 'Map serialize${jsonModel.name}(${jsonModel.name} object) => object.toJson();') ..writeln() - ..writeln('List<${jsonModel.name}> deserialize${jsonModel.name}List(List> jsonList)') - ..writeln(hasConstructorTearOffs ? ' => jsonList.map(${jsonModel.name}.fromJson).toList();' : ' => jsonList.map((json) => ${jsonModel.name}.fromJson(json)).toList();') + ..writeln( + 'List<${jsonModel.name}> deserialize${jsonModel.name}List(List> jsonList)') + ..writeln(hasConstructorTearOffs + ? ' => jsonList.map(${jsonModel.name}.fromJson).toList();' + : ' => jsonList.map((json) => ${jsonModel.name}.fromJson(json)).toList();') ..writeln() - ..writeln('List> serialize${jsonModel.name}List(List<${jsonModel.name}> objects)') + ..writeln( + 'List> serialize${jsonModel.name}List(List<${jsonModel.name}> objects)') ..writeln(' => objects.map((object) => object.toJson()).toList();'); } - List _getExtendedFields(ObjectModel model, YmlGeneratorConfig ymlConfig) { + 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 + final extendsModelextendsModel = ymlConfig.models.firstWhereOrNull( + (element) => element.name == extendsModelextends) + as ObjectModel?; // ignore: avoid_as extendsModelfields.addAll(extendsModelextendsModel?.fields ?? []); extendsModelextends = extendsModelextendsModel?.extendsModel; } diff --git a/test/writer/object_model_writer_test.dart b/test/writer/object_model_writer_test.dart index 01dcef9..33f4a16 100644 --- a/test/writer/object_model_writer_test.dart +++ b/test/writer/object_model_writer_test.dart @@ -18,10 +18,12 @@ void main() { 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}'); + 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; + final generateActual = + ObjectModelWriter(pubspecConfig, jsonModel, ymlConfig).write; if (expected.startsWith('Exception')) { expect(generateActual, throwsA(isA())); } else { From 14f0a3236c62fd6ebdbf6abef55f7ae6e8106350 Mon Sep 17 00:00:00 2001 From: Jordy De Jonghe Date: Wed, 30 Aug 2023 16:14:36 +0200 Subject: [PATCH 08/10] #126: added extra test --- .../config.txt | 0 .../output.txt | 0 .../pubspec.txt | 0 .../include-if-null-true/config.txt | 7 +++++++ .../include-if-null-true/output.txt | 20 +++++++++++++++++++ .../include-if-null-true/pubspec.txt | 4 ++++ 6 files changed, 31 insertions(+) rename test/writer/object_model_writer/{include-if-null => include-if-null-false}/config.txt (100%) rename test/writer/object_model_writer/{include-if-null => include-if-null-false}/output.txt (100%) rename test/writer/object_model_writer/{include-if-null => include-if-null-false}/pubspec.txt (100%) create mode 100644 test/writer/object_model_writer/include-if-null-true/config.txt create mode 100644 test/writer/object_model_writer/include-if-null-true/output.txt create mode 100644 test/writer/object_model_writer/include-if-null-true/pubspec.txt 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 From 4e616625fa49de8e55df5c1e28c25744ef2e1d4e Mon Sep 17 00:00:00 2001 From: Jordy de Jonghe Date: Fri, 1 Sep 2023 14:24:22 +0200 Subject: [PATCH 09/10] #142: added extra enum test --- test/writer/model_reader_test.dart | 37 +++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/test/writer/model_reader_test.dart b/test/writer/model_reader_test.dart index 639f74c..63af590 100644 --- a/test/writer/model_reader_test.dart +++ b/test/writer/model_reader_test.dart @@ -91,8 +91,7 @@ TestModel: expect(error, isNotNull); expect(error, isArgumentError); if (error is ArgumentError) { - expect(error.message, - 'required is removed, follow the migration to version 7.0.0'); + expect(error.message, 'required is removed, follow the migration to version 7.0.0'); } }); @@ -118,8 +117,7 @@ TestModel: expect(error, isNotNull); expect(error, isException); if (error is Exception) { - expect(error.toString(), - 'Exception: Could not generate all models. `array` is not added to the config file'); + expect(error.toString(), 'Exception: Could not generate all models. `array` is not added to the config file'); } }); @@ -146,8 +144,7 @@ TestModel: expect(error, isNotNull); expect(error, isException); if (error is Exception) { - expect(error.toString(), - 'Exception: Could not generate all models. `map` is not added to the config file'); + expect(error.toString(), 'Exception: Could not generate all models. `map` is not added to the config file'); } }); @@ -216,6 +213,34 @@ TestModel2: expect(nullableRef.type, isA()); expect(nullableRef.isRequired, false); }); + + test('Test enum item_type should be string or integer', () { + dynamic error; + try { + YmlGeneratorConfig( + PubspecConfig("name: test"), + """ +Gender: + path: user/person/ + type: enum + item_type: List + properties: + MALE: + value: male + FEMALE: + value: female +""", + '') + .models; + } catch (e) { + error = e; + } + expect(error, isNotNull); + expect(error, isException); + if(error is Exception){ + expect(error.toString(), 'Exception: item_type should be a string or integer. model: Gender'); + } + }); }); } From 0a70ab630a3cc90f27d179deb0e567c20b080fcd Mon Sep 17 00:00:00 2001 From: Jordy de Jonghe Date: Fri, 1 Sep 2023 14:27:29 +0200 Subject: [PATCH 10/10] #142: added disallow null for defaults check --- test/writer/model_reader_test.dart | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/writer/model_reader_test.dart b/test/writer/model_reader_test.dart index 63af590..de97ab4 100644 --- a/test/writer/model_reader_test.dart +++ b/test/writer/model_reader_test.dart @@ -20,6 +20,7 @@ void main() { PubspecConfig("name: test"), """ TestModel: + disallow_null_for_defaults: true properties: simpleString: string nullableString: string? @@ -65,6 +66,8 @@ TestModel: expect(simpleDateTime.type, isA()); expect(simpleDateTime.isRequired, false); + + expect(model.disallowNullForDefaults, true); }); test('Test required not definable anymore', () {