blob: 4ac5c480a00177d1f400c5f2092ba5402519fb10 [file] [log] [blame]
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// Invokes infer_native_assets_yaml_isolate_spawnuri_2_helper.dart with
// `Isolate.spawn` and an explicitly passed package_config.json path.
//
// That subsequently invokes
// infer_native_assets_yaml_isolate_spawnuri_2_helper_2.dart with
// `Isolate.spawn` without a package_config.json path and without automatic
// package resolution, such that it will inherit the native assets yaml.
import 'dart:io';
import 'dart:isolate';
import 'helpers.dart';
Future<void> main(List<String> args, Object? message) async {
await invokeHelper();
}
const helperName = 'infer_native_assets_yaml_isolate_spawnuri_2_helper.dart';
const helper2Name = 'infer_native_assets_yaml_isolate_spawnuri_2_helper_2.dart';
final helperSourceuri = Platform.script.resolve(helperName);
final helper2Sourceuri = Platform.script.resolve(helper2Name);
final emptyPackageConfig = '''{
"configVersion": 2,
"packages": [],
"generated": "${DateTime.now()}",
"generator": "test"
}
''';
Future<void> invokeHelper() async {
print('invoke helper with packageConfig');
await withTempDir((tempUri) async {
await withTempDir((tempUri2) async {
await createTestFiles(tempUri, tempUri2);
final helperCopiedUri = tempUri.resolve(helperName);
final dartToolsUri = tempUri.resolve('.dart_tool/');
final packageConfigUri = dartToolsUri.resolve('package_config.json');
final receivePort = ReceivePort();
await Isolate.spawnUri(
helperCopiedUri,
[],
[receivePort.sendPort, tempUri2.path],
packageConfig: packageConfigUri,
);
final result = (await receivePort.first);
if (result != 49) {
throw "Unexpected result: $result.";
}
});
});
print('invoke helper with packageConfig done');
}
Future<void> createTestFiles(Uri tempUri, Uri tempUri2) async {
final helperCopiedUri = tempUri.resolve(helperName);
await File.fromUri(helperSourceuri).copy(helperCopiedUri.toFilePath());
print('File copied to $helperCopiedUri.');
final helper2CopiedUri = tempUri2.resolve(helper2Name);
await File.fromUri(helper2Sourceuri).copy(helper2CopiedUri.toFilePath());
print('File copied to $helper2CopiedUri.');
final dartToolsUri = tempUri.resolve('.dart_tool/');
await Directory.fromUri(dartToolsUri).create();
final packageConfigUri = dartToolsUri.resolve('package_config.json');
await File.fromUri(packageConfigUri).writeAsString(emptyPackageConfig);
final nativeAssetsYaml = createNativeAssetYaml(
asset: helper2CopiedUri.toString(),
assetMapping: [
'absolute',
ffiTestFunctionsUriAbsolute.toFilePath(),
],
);
final nativeAssetsUri = dartToolsUri.resolve('native_assets.yaml');
await File.fromUri(nativeAssetsUri).writeAsString(nativeAssetsYaml);
print('File native_assets.yaml written to $nativeAssetsUri.');
}