Skip to content

Commit 210342f

Browse files
Merge pull request #122 from icapps/bugfix/EmptyYaml
Don't crash on empty yaml file
2 parents 69fe304 + 38612c3 commit 210342f

File tree

3 files changed

+50
-20
lines changed

3 files changed

+50
-20
lines changed

bin/model_generator.dart

+3
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,9 @@ Future<void> main(List<String> args) async {
6767
YmlGeneratorConfig(pubspecConfig, modelGeneratorContent, configPath);
6868
}
6969
modelGeneratorConfig.checkIfTypesAvailable();
70+
if (modelGeneratorConfig.models.isEmpty) {
71+
print('No models defined in config files, skipping generation');
72+
}
7073

7174
writeToFiles(pubspecConfig, modelGeneratorConfig);
7275
await generateJsonGeneratedModels(useFvm: pubspecConfig.useFvm);

lib/config/yml_generator_config.dart

+3-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,9 @@ class YmlGeneratorConfig {
2929

3030
YmlGeneratorConfig(
3131
PubspecConfig pubspecConfig, String configContent, this.fileName) {
32-
loadYaml(configContent).forEach((key, value) {
32+
final yamlContent = loadYaml(configContent);
33+
if (yamlContent == null) return; // Ignore empty file
34+
yamlContent.forEach((key, value) {
3335
final String baseDirectory =
3436
value['base_directory'] ?? pubspecConfig.baseDirectory;
3537
final String? path = value['path'];

test/config/yml_generator_config_test.dart

+44-19
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,21 @@ import 'config_test_helper.dart';
1010

1111
void main() {
1212
group('YmlGeneratorConfig', () {
13+
group('Empty', () {
14+
test('Behaviour with empty file', () {
15+
final pubspecConfig =
16+
PubspecConfig(ConfigTestHelper.getPubspecConfig('normal'));
17+
final ymlConfig = YmlGeneratorConfig(pubspecConfig, '', '');
18+
expect(ymlConfig.models.isEmpty, true);
19+
});
20+
});
1321
group('Object', () {
1422
test('Normal object', () {
1523
final pubspecConfig =
1624
PubspecConfig(ConfigTestHelper.getPubspecConfig('normal'));
1725
final ymlConfig = YmlGeneratorConfig(pubspecConfig,
1826
ConfigTestHelper.getYmlGeneratorConfig('object-normal'), '');
27+
ymlConfig.checkIfTypesAvailable();
1928
expect(ymlConfig.models.length, 1);
2029
expect(ymlConfig.models.first is ObjectModel, true);
2130
final objectModel =
@@ -34,6 +43,7 @@ void main() {
3443
pubspecConfig,
3544
ConfigTestHelper.getYmlGeneratorConfig('object-multiple-fields'),
3645
'');
46+
ymlConfig.checkIfTypesAvailable();
3747
expect(ymlConfig.models.length, 1);
3848
expect(ymlConfig.models.first is ObjectModel, true);
3949
final objectModel =
@@ -50,6 +60,7 @@ void main() {
5060
PubspecConfig(ConfigTestHelper.getPubspecConfig('normal'));
5161
final ymlConfig = YmlGeneratorConfig(pubspecConfig,
5262
ConfigTestHelper.getYmlGeneratorConfig('object-base-dir'), '');
63+
ymlConfig.checkIfTypesAvailable();
5364
expect(ymlConfig.models.length, 1);
5465
expect(ymlConfig.models.first is ObjectModel, true);
5566
final objectModel =
@@ -66,6 +77,7 @@ void main() {
6677
PubspecConfig(ConfigTestHelper.getPubspecConfig('normal'));
6778
final ymlConfig = YmlGeneratorConfig(pubspecConfig,
6879
ConfigTestHelper.getYmlGeneratorConfig('object-all-types'), '');
80+
ymlConfig.checkIfTypesAvailable();
6981
expect(ymlConfig.models.length, 2);
7082
expect(ymlConfig.models.first is ObjectModel, true);
7183
final objectModel =
@@ -84,9 +96,11 @@ void main() {
8496
var errorMessage = '';
8597
try {
8698
YmlGeneratorConfig(
87-
pubspecConfig,
88-
ConfigTestHelper.getYmlGeneratorConfig('object-error-no-object'),
89-
'');
99+
pubspecConfig,
100+
ConfigTestHelper.getYmlGeneratorConfig(
101+
'object-error-no-object'),
102+
'')
103+
.checkIfTypesAvailable();
90104
} catch (e) {
91105
hasError = true;
92106
errorMessage = e.toString();
@@ -102,10 +116,11 @@ void main() {
102116
var errorMessage = '';
103117
try {
104118
YmlGeneratorConfig(
105-
pubspecConfig,
106-
ConfigTestHelper.getYmlGeneratorConfig(
107-
'object-error-missing-type'),
108-
'');
119+
pubspecConfig,
120+
ConfigTestHelper.getYmlGeneratorConfig(
121+
'object-error-missing-type'),
122+
'')
123+
.checkIfTypesAvailable();
109124
} catch (e) {
110125
hasError = true;
111126
errorMessage = e.toString();
@@ -121,10 +136,11 @@ void main() {
121136
var errorMessage = '';
122137
try {
123138
YmlGeneratorConfig(
124-
pubspecConfig,
125-
ConfigTestHelper.getYmlGeneratorConfig(
126-
'object-error-no-properties'),
127-
'');
139+
pubspecConfig,
140+
ConfigTestHelper.getYmlGeneratorConfig(
141+
'object-error-no-properties'),
142+
'')
143+
.checkIfTypesAvailable();
128144
} catch (e) {
129145
hasError = true;
130146
errorMessage = e.toString();
@@ -140,6 +156,7 @@ void main() {
140156
PubspecConfig(ConfigTestHelper.getPubspecConfig('normal'));
141157
final ymlConfig = YmlGeneratorConfig(pubspecConfig,
142158
ConfigTestHelper.getYmlGeneratorConfig('custom-normal'), '');
159+
ymlConfig.checkIfTypesAvailable();
143160
expect(ymlConfig.models.length, 2);
144161
expect(ymlConfig.models.first is ObjectModel, true);
145162
expect(ymlConfig.models.last is CustomModel, true);
@@ -151,6 +168,7 @@ void main() {
151168
PubspecConfig(ConfigTestHelper.getPubspecConfig('normal'));
152169
final ymlConfig = YmlGeneratorConfig(pubspecConfig,
153170
ConfigTestHelper.getYmlGeneratorConfig('enum-normal'), '');
171+
ymlConfig.checkIfTypesAvailable();
154172
expect(ymlConfig.models.length, 3);
155173
expect(ymlConfig.models.first is ObjectModel, true);
156174
expect(ymlConfig.models[1] is EnumModel, true);
@@ -196,9 +214,11 @@ void main() {
196214
var errorMessage = '';
197215
try {
198216
YmlGeneratorConfig(
199-
pubspecConfig,
200-
ConfigTestHelper.getYmlGeneratorConfig('enum-error-no-object'),
201-
'');
217+
pubspecConfig,
218+
ConfigTestHelper.getYmlGeneratorConfig(
219+
'enum-error-no-object'),
220+
'')
221+
.checkIfTypesAvailable();
202222
} catch (e) {
203223
hasError = true;
204224
errorMessage = e.toString();
@@ -214,10 +234,11 @@ void main() {
214234
var errorMessage = '';
215235
try {
216236
YmlGeneratorConfig(
217-
pubspecConfig,
218-
ConfigTestHelper.getYmlGeneratorConfig(
219-
'enum-error-no-properties-map'),
220-
'');
237+
pubspecConfig,
238+
ConfigTestHelper.getYmlGeneratorConfig(
239+
'enum-error-no-properties-map'),
240+
'')
241+
.checkIfTypesAvailable();
221242
} catch (e) {
222243
hasError = true;
223244
errorMessage = e.toString();
@@ -276,7 +297,8 @@ void main() {
276297
var hasError = false;
277298
var errorMessage = '';
278299
final config = YmlGeneratorConfig(pubspecConfig,
279-
ConfigTestHelper.getYmlGeneratorConfig('object-normal'), '');
300+
ConfigTestHelper.getYmlGeneratorConfig('object-normal'), '')
301+
..checkIfTypesAvailable();
280302
try {
281303
config.getPathsForName(pubspecConfig, 'TESTING');
282304
} catch (e) {
@@ -292,6 +314,7 @@ void main() {
292314
PubspecConfig(ConfigTestHelper.getPubspecConfig('normal'));
293315
final config = YmlGeneratorConfig(pubspecConfig,
294316
ConfigTestHelper.getYmlGeneratorConfig('generics-normal'), '');
317+
config.checkIfTypesAvailable();
295318
expect(config.getPathsForName(pubspecConfig, 'List<Person>').toList(),
296319
['model']);
297320
});
@@ -300,6 +323,7 @@ void main() {
300323
PubspecConfig(ConfigTestHelper.getPubspecConfig('normal'));
301324
final config = YmlGeneratorConfig(pubspecConfig,
302325
ConfigTestHelper.getYmlGeneratorConfig('custom-dart-core'), '');
326+
config.checkIfTypesAvailable();
303327
expect(config.getPathsForName(pubspecConfig, 'Address').toList(), []);
304328
});
305329
test('Get path with invalid model', () {
@@ -309,6 +333,7 @@ void main() {
309333
var errorMessage = '';
310334
final config = YmlGeneratorConfig(pubspecConfig,
311335
ConfigTestHelper.getYmlGeneratorConfig('object-normal'), '');
336+
config.checkIfTypesAvailable();
312337
try {
313338
config.getModelByName(ObjectType('TESTING'));
314339
} catch (e) {

0 commit comments

Comments
 (0)