@@ -205,29 +205,38 @@ void main() {
205
205
});
206
206
207
207
group ('BuildInput.config.code validation' , () {
208
- test ('Missing targetIOSVersion' , () async {
209
- final builder =
210
- makeBuildInputBuilder ()
211
- ..config.setupShared (buildAssetTypes: [CodeAsset .type])
212
- ..config.setupCode (
213
- targetOS: OS .iOS,
214
- targetArchitecture: Architecture .arm64,
215
- linkModePreference: LinkModePreference .dynamic ,
216
- );
217
- final errors = await validateCodeAssetBuildInput (
218
- BuildInput (builder.json),
219
- );
220
- expect (
221
- errors,
222
- contains (
223
- contains ('BuildInput.config.code.iOS.targetVersion was missing' ),
224
- ),
225
- );
226
- expect (
227
- errors,
228
- contains (contains ('BuildInput.config.code.iOS.targetSdk was missing' )),
229
- );
230
- });
208
+ for (final (propertyKey, name) in [
209
+ ('target_version' , 'targetVersion' ),
210
+ ('target_sdk' , 'targetSdk' ),
211
+ ]) {
212
+ test ('Missing targetIOSVersion' , () async {
213
+ final builder =
214
+ makeBuildInputBuilder ()
215
+ ..config.setupShared (buildAssetTypes: [CodeAsset .type])
216
+ ..config.setupCode (
217
+ targetOS: OS .iOS,
218
+ targetArchitecture: Architecture .arm64,
219
+ linkModePreference: LinkModePreference .dynamic ,
220
+ iOS: IOSCodeConfig (
221
+ targetSdk: IOSSdk .iPhoneOS,
222
+ targetVersion: 123 ,
223
+ ),
224
+ );
225
+ traverseJson <Map <String , Object ?>>(builder.json, [
226
+ 'config' ,
227
+ 'code' ,
228
+ 'ios' ,
229
+ ]).remove (propertyKey);
230
+ final errors = await validateCodeAssetBuildInput (
231
+ BuildInput (builder.json),
232
+ );
233
+ expect (
234
+ errors,
235
+ contains (contains ('BuildInput.config.code.iOS.$name was missing' )),
236
+ );
237
+ });
238
+ }
239
+
231
240
test ('Missing targetAndroidNdkApi' , () async {
232
241
final builder =
233
242
makeBuildInputBuilder ()
@@ -236,7 +245,13 @@ void main() {
236
245
targetOS: OS .android,
237
246
targetArchitecture: Architecture .arm64,
238
247
linkModePreference: LinkModePreference .dynamic ,
248
+ android: AndroidCodeConfig (targetNdkApi: 123 ),
239
249
);
250
+ traverseJson <Map <String , Object ?>>(builder.json, [
251
+ 'config' ,
252
+ 'code' ,
253
+ 'android' ,
254
+ ]).remove ('target_ndk_api' );
240
255
expect (
241
256
await validateCodeAssetBuildInput (BuildInput (builder.json)),
242
257
contains (
@@ -252,7 +267,14 @@ void main() {
252
267
targetOS: OS .macOS,
253
268
targetArchitecture: Architecture .arm64,
254
269
linkModePreference: LinkModePreference .dynamic ,
270
+ macOS: MacOSCodeConfig (targetVersion: 123 ),
255
271
);
272
+
273
+ traverseJson <Map <String , Object ?>>(builder.json, [
274
+ 'config' ,
275
+ 'code' ,
276
+ 'macos' ,
277
+ ]).remove ('target_version' );
256
278
expect (
257
279
await validateCodeAssetBuildInput (BuildInput (builder.json)),
258
280
contains (
@@ -303,3 +325,20 @@ void main() {
303
325
});
304
326
});
305
327
}
328
+
329
+ T traverseJson <T extends Object ?>(Object json, List <Object > path) {
330
+ while (path.isNotEmpty) {
331
+ final key = path.removeAt (0 );
332
+ switch (key) {
333
+ case final int i:
334
+ json = (json as List )[i] as Object ;
335
+ break ;
336
+ case final String s:
337
+ json = (json as Map )[s] as Object ;
338
+ break ;
339
+ default :
340
+ throw UnsupportedError (key.toString ());
341
+ }
342
+ }
343
+ return json as T ;
344
+ }
0 commit comments