Skip to content

Commit 7a72868

Browse files
authored
[native_assets_cli] Validate that paths are absolute in Input and Output (#1935)
Closes: #1605 Reuses the same validation (and error messages) for checking that files/directories exist and that their paths are absolute. Also, adds a script to automatically update the `manifest.yaml` files. (It seems that `sort lines ascending` in vscode orders `/` and `_` differently than the string compiler in Dart. Hence the reordering.)
1 parent 4d37c45 commit 7a72868

File tree

28 files changed

+390
-164
lines changed

28 files changed

+390
-164
lines changed

pkgs/native_assets_builder/lib/src/build_runner/build_runner.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ class NativeAssetsBuildRunner {
162162
];
163163
if (errors.isNotEmpty) {
164164
return _printErrors(
165-
'Build configuration for ${package.name} contains errors', errors);
165+
'Build input for ${package.name} contains errors', errors);
166166
}
167167

168168
final result = await _runHookForPackageCached(
@@ -247,8 +247,9 @@ class NativeAssetsBuildRunner {
247247
...await inputValidator(input),
248248
];
249249
if (errors.isNotEmpty) {
250+
print(input.assets.encodedAssets);
250251
return _printErrors(
251-
'Link configuration for ${package.name} contains errors', errors);
252+
'Link input for ${package.name} contains errors', errors);
252253
}
253254

254255
final result = await _runHookForPackageCached(
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
2+
// for details. All rights reserved. Use of this source code is governed by a
3+
// BSD-style license that can be found in the LICENSE file.
4+
5+
import 'package:test/test.dart';
6+
7+
import '../helpers.dart';
8+
import 'helpers.dart';
9+
10+
void main() async {
11+
test('relative path', () async {
12+
await inTempDir((tempUri) async {
13+
await copyTestProjects(targetUri: tempUri);
14+
final packageUri = tempUri.resolve('relative_path/');
15+
16+
await runPubGet(
17+
workingDirectory: packageUri,
18+
logger: logger,
19+
);
20+
21+
{
22+
final logMessages = <String>[];
23+
final result = await buildDataAssets(
24+
packageUri,
25+
capturedLogs: logMessages,
26+
);
27+
final fullLog = logMessages.join('\n');
28+
expect(result, isNull);
29+
expect(
30+
fullLog,
31+
contains('must be an absolute path'),
32+
);
33+
}
34+
});
35+
});
36+
}

pkgs/native_assets_builder/test/build_runner/helpers.dart

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,25 @@ Future<void> runPubGet({
2929
expect(result.exitCode, 0);
3030
}
3131

32+
Future<BuildResult?> buildDataAssets(
33+
Uri packageUri, {
34+
String? runPackageName,
35+
List<String>? capturedLogs,
36+
bool linkingEnabled = false,
37+
}) =>
38+
build(
39+
packageUri,
40+
logger,
41+
dartExecutable,
42+
capturedLogs: capturedLogs,
43+
buildAssetTypes: [DataAsset.type],
44+
inputValidator: validateDataAssetBuildInput,
45+
buildValidator: validateDataAssetBuildOutput,
46+
applicationAssetValidator: (_) async => [],
47+
runPackageName: runPackageName,
48+
linkingEnabled: linkingEnabled,
49+
);
50+
3251
Future<BuildResult?> buildCodeAssets(
3352
Uri packageUri, {
3453
String? runPackageName,

pkgs/native_assets_builder/test/build_runner/link_caching_test.dart

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,10 @@ void main() async {
2929
late LinkResult linkResult;
3030
Future<void> runBuild() async {
3131
logMessages.clear();
32-
buildResult = (await build(
32+
buildResult = (await buildDataAssets(
3333
packageUri,
34-
logger,
35-
dartExecutable,
3634
linkingEnabled: true,
37-
buildAssetTypes: [DataAsset.type],
3835
capturedLogs: logMessages,
39-
inputValidator: validateDataAssetBuildInput,
40-
buildValidator: validateDataAssetBuildOutput,
41-
applicationAssetValidator: (_) async => [],
4236
))!;
4337
}
4438

pkgs/native_assets_builder/test/build_runner/link_test.dart

Lines changed: 4 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,9 @@ void main() async {
2626
logger: logger,
2727
);
2828

29-
final buildResult = (await build(
29+
final buildResult = (await buildDataAssets(
3030
packageUri,
31-
logger,
32-
dartExecutable,
3331
linkingEnabled: true,
34-
buildAssetTypes: [DataAsset.type],
35-
inputValidator: validateDataAssetBuildInput,
36-
buildValidator: validateDataAssetBuildOutput,
37-
applicationAssetValidator: (_) async => [],
3832
))!;
3933
expect(buildResult.encodedAssets.length, 0);
4034

@@ -50,15 +44,9 @@ void main() async {
5044
))!;
5145
expect(linkResult.encodedAssets.length, 2);
5246

53-
final buildNoLinkResult = (await build(
47+
final buildNoLinkResult = (await buildDataAssets(
5448
packageUri,
55-
logger,
56-
dartExecutable,
5749
linkingEnabled: false,
58-
buildAssetTypes: [DataAsset.type],
59-
inputValidator: validateDataAssetBuildInput,
60-
buildValidator: validateDataAssetBuildOutput,
61-
applicationAssetValidator: (_) async => [],
6250
))!;
6351
expect(buildNoLinkResult.encodedAssets.length, 4);
6452
});
@@ -96,15 +84,9 @@ void main() async {
9684
// First, run `pub get`, we need pub to resolve our dependencies.
9785
await runPubGet(workingDirectory: packageUri, logger: logger);
9886

99-
final buildResult = await build(
87+
final buildResult = await buildDataAssets(
10088
packageUri,
101-
logger,
102-
dartExecutable,
10389
linkingEnabled: true,
104-
buildAssetTypes: [DataAsset.type],
105-
inputValidator: validateDataAssetBuildInput,
106-
buildValidator: validateDataAssetBuildOutput,
107-
applicationAssetValidator: (_) async => [],
10890
);
10991
expect(buildResult, isNotNull);
11092
expect(_getNames(buildResult!.encodedAssets),
@@ -143,15 +125,9 @@ void main() async {
143125
logger: logger,
144126
);
145127

146-
final buildResult = (await build(
128+
final buildResult = (await buildDataAssets(
147129
packageUri,
148-
logger,
149-
dartExecutable,
150130
linkingEnabled: true,
151-
buildAssetTypes: [DataAsset.type],
152-
inputValidator: validateDataAssetBuildInput,
153-
buildValidator: validateDataAssetBuildOutput,
154-
applicationAssetValidator: (_) async => [],
155131
))!;
156132
expect(buildResult.encodedAssets.length, 0);
157133
expect(buildResult.encodedAssetsForLinking.length, 0);

pkgs/native_assets_builder/test/build_runner/resources_test.dart

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,9 @@ void main() async {
2929
logger: logger,
3030
);
3131

32-
final buildResult = (await build(
32+
final buildResult = (await buildDataAssets(
3333
packageUri,
34-
logger,
35-
dartExecutable,
3634
linkingEnabled: true,
37-
buildAssetTypes: [DataAsset.type],
38-
inputValidator: validateDataAssetBuildInput,
39-
buildValidator: validateDataAssetBuildOutput,
40-
applicationAssetValidator: (_) async => [],
4135
))!;
4236

4337
Iterable<String> buildFiles() => Directory.fromUri(

pkgs/native_assets_builder/test_data/manifest.yaml

Lines changed: 35 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,45 @@
11
# The list of files to copy to a temporary folder to ensure running tests from
22
# a completely clean setup.
3+
# Automatically generated by manifest_generator.dart.
34
- add_asset_link/bin/add_asset_link.dart
45
- add_asset_link/hook/build.dart
56
- add_asset_link/hook/link.dart
67
- add_asset_link/lib/add_asset_link.dart
7-
- add_asset_link/lib/src/add_asset_link_bindings.dart
88
- add_asset_link/lib/src/add_asset_link.dart
9+
- add_asset_link/lib/src/add_asset_link_bindings.dart
910
- add_asset_link/pubspec.yaml
1011
- add_asset_link/src/native_add.c
1112
- add_asset_link/src/native_add.h
13+
- complex_link/assets/data_0.json
14+
- complex_link/assets/data_1.json
15+
- complex_link/bin/complex_link.dart
16+
- complex_link/hook/build.dart
17+
- complex_link/hook/link.dart
18+
- complex_link/pubspec.yaml
1219
- complex_link_helper/assets/data_helper_0.json
1320
- complex_link_helper/assets/data_helper_1.json
1421
- complex_link_helper/assets/data_helper_2.json
1522
- complex_link_helper/assets/data_helper_3.json
1623
- complex_link_helper/hook/build.dart
1724
- complex_link_helper/lib/complex_link_helper.dart
1825
- complex_link_helper/pubspec.yaml
19-
- complex_link/assets/data_0.json
20-
- complex_link/assets/data_1.json
21-
- complex_link/bin/complex_link.dart
22-
- complex_link/hook/build.dart
23-
- complex_link/hook/link.dart
24-
- complex_link/pubspec.yaml
2526
- cyclic_package_1/hook/build.dart
2627
- cyclic_package_1/pubspec.yaml
2728
- cyclic_package_2/hook/build.dart
2829
- cyclic_package_2/pubspec.yaml
2930
- dart_app/bin/dart_app.dart
3031
- dart_app/pubspec.yaml
31-
- depend_on_fail_build_app/bin/depend_on_fail_build_app.dart
32-
- depend_on_fail_build_app/pubspec.yaml
3332
- depend_on_fail_build/hook/build.dart
3433
- depend_on_fail_build/lib/depend_on_fail_build.dart
3534
- depend_on_fail_build/pubspec.yaml
35+
- depend_on_fail_build_app/bin/depend_on_fail_build_app.dart
36+
- depend_on_fail_build_app/pubspec.yaml
3637
- drop_dylib_link/bin/drop_dylib_link.dart
3738
- drop_dylib_link/hook/build.dart
3839
- drop_dylib_link/hook/link.dart
3940
- drop_dylib_link/lib/drop_dylib_link.dart
40-
- drop_dylib_link/lib/src/drop_dylib_link_bindings.dart
4141
- drop_dylib_link/lib/src/drop_dylib_link.dart
42+
- drop_dylib_link/lib/src/drop_dylib_link_bindings.dart
4243
- drop_dylib_link/pubspec.yaml
4344
- drop_dylib_link/src/native_add.c
4445
- drop_dylib_link/src/native_add.h
@@ -47,13 +48,22 @@
4748
- fail_build/hook/build.dart
4849
- fail_build/lib/fail_build.dart
4950
- fail_build/pubspec.yaml
51+
- fail_on_os_sdk_version/hook/build.dart
52+
- fail_on_os_sdk_version/pubspec.yaml
5053
- fail_on_os_sdk_version_link/assets/data.json
5154
- fail_on_os_sdk_version_link/hook/build.dart
5255
- fail_on_os_sdk_version_link/pubspec.yaml
5356
- fail_on_os_sdk_version_linker/hook/link.dart
5457
- fail_on_os_sdk_version_linker/pubspec.yaml
55-
- fail_on_os_sdk_version/hook/build.dart
56-
- fail_on_os_sdk_version/pubspec.yaml
58+
- native_add/ffigen.yaml
59+
- native_add/hook/build.dart
60+
- native_add/lib/native_add.dart
61+
- native_add/lib/src/native_add.dart
62+
- native_add/lib/src/native_add_bindings_generated.dart
63+
- native_add/pubspec.yaml
64+
- native_add/src/native_add.c
65+
- native_add/src/native_add.h
66+
- native_add/test/native_add_test.dart
5767
- native_add_duplicate/bin/native_add_duplicate.dart
5868
- native_add_duplicate/hook/build.dart
5969
- native_add_duplicate/hook/link.dart
@@ -63,29 +73,19 @@
6373
- native_add_version_skew/ffigen.yaml
6474
- native_add_version_skew/hook/build.dart
6575
- native_add_version_skew/lib/native_add.dart
66-
- native_add_version_skew/lib/src/native_add_bindings_generated.dart
6776
- native_add_version_skew/lib/src/native_add.dart
77+
- native_add_version_skew/lib/src/native_add_bindings_generated.dart
6878
- native_add_version_skew/pubspec.yaml
6979
- native_add_version_skew/src/native_add.c
7080
- native_add_version_skew/src/native_add.h
7181
- native_add_version_skew/test/native_add_test.dart
7282
- native_add_version_skew_2/hook/build.dart
7383
- native_add_version_skew_2/pubspec.yaml
74-
- native_add/ffigen.yaml
75-
- native_add/hook/build.dart
76-
- native_add/lib/native_add.dart
77-
- native_add/lib/src/native_add_bindings_generated.dart
78-
- native_add/lib/src/native_add.dart
79-
- native_add/pubspec.yaml
80-
- native_add/src/native_add.c
81-
- native_add/src/native_add.h
82-
- native_add/test/native_add_test.dart
8384
- native_dynamic_linking/bin/native_dynamic_linking.dart
8485
- native_dynamic_linking/ffigen.yaml
8586
- native_dynamic_linking/hook/build.dart
8687
- native_dynamic_linking/lib/add.dart
8788
- native_dynamic_linking/pubspec.yaml
88-
- native_dynamic_linking/README.md
8989
- native_dynamic_linking/src/add.c
9090
- native_dynamic_linking/src/add.h
9191
- native_dynamic_linking/src/debug.c
@@ -96,8 +96,8 @@
9696
- native_subtract/ffigen.yaml
9797
- native_subtract/hook/build.dart
9898
- native_subtract/lib/native_subtract.dart
99-
- native_subtract/lib/src/native_subtract_bindings_generated.dart
10099
- native_subtract/lib/src/native_subtract.dart
100+
- native_subtract/lib/src/native_subtract_bindings_generated.dart
101101
- native_subtract/pubspec.yaml
102102
- native_subtract/src/native_subtract.c
103103
- native_subtract/src/native_subtract.h
@@ -109,17 +109,20 @@
109109
- package_reading_metadata/pubspec.yaml
110110
- package_with_metadata/hook/build.dart
111111
- package_with_metadata/pubspec.yaml
112+
- relative_path/assets/test_asset.txt
113+
- relative_path/hook/build.dart
114+
- relative_path/pubspec.yaml
112115
- simple_data_asset/assets/test_asset.txt
113116
- simple_data_asset/bin/deep_modify_data_asset.dart.debug
114117
- simple_data_asset/bin/modify_data_asset.dart.debug
115118
- simple_data_asset/bin/simple_data_asset.dart.debug
116119
- simple_data_asset/hook/build.dart
117120
- simple_data_asset/pubspec.yaml
118-
- simple_data_asset/README.md
119121
- simple_link/assets/data_0.json
120122
- simple_link/assets/data_1.json
121123
- simple_link/assets/data_2.json
122124
- simple_link/assets/data_3.json
125+
- simple_link/bin/simple_link.dart
123126
- simple_link/hook/build.dart
124127
- simple_link/hook/link.dart
125128
- simple_link/pubspec.yaml
@@ -149,20 +152,24 @@
149152
- treeshaking_native_libs/ffigen.yaml
150153
- treeshaking_native_libs/hook/build.dart
151154
- treeshaking_native_libs/hook/link.dart
152-
- treeshaking_native_libs/lib/src/treeshaking_native_libs_bindings_generated.dart
153155
- treeshaking_native_libs/lib/src/treeshaking_native_libs.dart
156+
- treeshaking_native_libs/lib/src/treeshaking_native_libs_bindings_generated.dart
154157
- treeshaking_native_libs/lib/treeshaking_native_libs.dart
155158
- treeshaking_native_libs/pubspec.yaml
156159
- treeshaking_native_libs/src/native_add.c
157160
- treeshaking_native_libs/src/native_add.h
158161
- treeshaking_native_libs/src/native_multiply.c
159162
- treeshaking_native_libs/src/native_multiply.h
163+
- treeshaking_native_libs/test/treeshaking_native_libs_test.dart
164+
- use_all_api/hook/build.dart
165+
- use_all_api/hook/link.dart
166+
- use_all_api/pubspec.yaml
167+
- wrong_build_output/hook/build.dart
168+
- wrong_build_output/pubspec.yaml
160169
- wrong_build_output_2/hook/build.dart
161170
- wrong_build_output_2/pubspec.yaml
162171
- wrong_build_output_3/hook/build.dart
163172
- wrong_build_output_3/pubspec.yaml
164-
- wrong_build_output/hook/build.dart
165-
- wrong_build_output/pubspec.yaml
166173
- wrong_linker/hook/build.dart
167174
- wrong_linker/pubspec.yaml
168175
- wrong_namespace_asset/hook/build.dart

0 commit comments

Comments
 (0)