Skip to content

Commit 0a02d3b

Browse files
authored
[native_assets_cli] Refactor syntax validation test (#2069)
1 parent e51c815 commit 0a02d3b

File tree

1 file changed

+62
-23
lines changed

1 file changed

+62
-23
lines changed

pkgs/native_assets_cli/test/code_assets/validation_test.dart

Lines changed: 62 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -205,29 +205,38 @@ void main() {
205205
});
206206

207207
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+
231240
test('Missing targetAndroidNdkApi', () async {
232241
final builder =
233242
makeBuildInputBuilder()
@@ -236,7 +245,13 @@ void main() {
236245
targetOS: OS.android,
237246
targetArchitecture: Architecture.arm64,
238247
linkModePreference: LinkModePreference.dynamic,
248+
android: AndroidCodeConfig(targetNdkApi: 123),
239249
);
250+
traverseJson<Map<String, Object?>>(builder.json, [
251+
'config',
252+
'code',
253+
'android',
254+
]).remove('target_ndk_api');
240255
expect(
241256
await validateCodeAssetBuildInput(BuildInput(builder.json)),
242257
contains(
@@ -252,7 +267,14 @@ void main() {
252267
targetOS: OS.macOS,
253268
targetArchitecture: Architecture.arm64,
254269
linkModePreference: LinkModePreference.dynamic,
270+
macOS: MacOSCodeConfig(targetVersion: 123),
255271
);
272+
273+
traverseJson<Map<String, Object?>>(builder.json, [
274+
'config',
275+
'code',
276+
'macos',
277+
]).remove('target_version');
256278
expect(
257279
await validateCodeAssetBuildInput(BuildInput(builder.json)),
258280
contains(
@@ -303,3 +325,20 @@ void main() {
303325
});
304326
});
305327
}
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

Comments
 (0)