blob: 2e7f60fb37def3ce4fc5d31d9e5ce6a1803dcfff [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_process_run_helper.dart with
// `dart --snapshot-kind=kernel`.
// 1. With an explicitly passed package_config.json path.
// 2. Without an explicitly passed package_config.json, walking up the file
// tree.
import 'dart:io';
import 'helpers.dart';
Future<void> main(List<String> args, Object? message) async {
await invokeHelperWithPackagesFlag();
await invokeHelperWorkingDir();
}
const helperName = 'infer_native_assets_yaml_dart_kernel_snapshot_helper.dart';
final helperSourceuri = Platform.script.resolve(helperName);
final packageMetaUri = Platform.script.resolve('../../../pkg/meta');
/// Add an unused import to see that we're using actually the package config.
final testPackageConfig = '''{
"configVersion": 2,
"packages": [
{
"name": "meta",
"rootUri": "$packageMetaUri",
"packageUri": "lib/",
"languageVersion": "2.12"
}
],
"generated": "${DateTime.now()}",
"generator": "test"
}
''';
Future<void> invokeHelperWithPackagesFlag() async {
print('invoke helper with --package=...');
await withTempDir((tempUri) async {
await createTestFiles(tempUri);
final helperCopiedUri = tempUri.resolve(helperName);
final dartToolsUri = tempUri.resolve('.dart_tool/');
final packageConfigUri = dartToolsUri.resolve('package_config.json');
final kernelFileUri = tempUri.resolve('$helperName.dill');
await runDartKernelSnapshot(
packageConfigUri: packageConfigUri,
inputUri: helperCopiedUri,
outputUri: kernelFileUri,
);
print('dill file created: $kernelFileUri');
await runDart(scriptUri: kernelFileUri);
});
print('invoke helper with --package=... done');
}
Future<void> invokeHelperWorkingDir() async {
print('invoke helper in working dir');
await withTempDir((tempUri) async {
final helperDillName = '$helperName.dill';
await createTestFiles(tempUri);
await runDartKernelSnapshot(
workingDirectory: tempUri,
inputUri: Uri(path: helperName),
outputUri: Uri(path: helperDillName),
);
print('dill file created: $helperDillName');
await runDart(
workingDirectory: tempUri,
scriptUri: Uri(path: helperDillName),
);
});
print('invoke helper in working dir done');
}
Future<void> createTestFiles(Uri tempUri) async {
final helperCopiedUri = tempUri.resolve(helperName);
await File.fromUri(helperSourceuri).copy(helperCopiedUri.toFilePath());
print('File copied to $helperCopiedUri.');
final dartToolsUri = tempUri.resolve('.dart_tool/');
await Directory.fromUri(dartToolsUri).create();
final packageConfigUri = dartToolsUri.resolve('package_config.json');
await File.fromUri(packageConfigUri).writeAsString(testPackageConfig);
final nativeAssetsYaml = createNativeAssetYaml(
asset: helperCopiedUri.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.');
}