From bc9e1920e3f208837b04f2f3b0faa07de4938913 Mon Sep 17 00:00:00 2001 From: Gabriel Terwesten Date: Fri, 6 Sep 2024 12:09:32 +0200 Subject: [PATCH 1/3] Fix and actually test `test_data/native_dynamic_linking` --- pkgs/native_assets_builder/dart_test.yaml | 1 + .../test_data/native_dynamic_linking/hook/build.dart | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/pkgs/native_assets_builder/dart_test.yaml b/pkgs/native_assets_builder/dart_test.yaml index d5e52c43b..be7f26289 100644 --- a/pkgs/native_assets_builder/dart_test.yaml +++ b/pkgs/native_assets_builder/dart_test.yaml @@ -1,3 +1,4 @@ paths: - test/build_runner/ - test/model/ + - test/test_data/ diff --git a/pkgs/native_assets_builder/test_data/native_dynamic_linking/hook/build.dart b/pkgs/native_assets_builder/test_data/native_dynamic_linking/hook/build.dart index 9711a8cb8..79b97a40e 100644 --- a/pkgs/native_assets_builder/test_data/native_dynamic_linking/hook/build.dart +++ b/pkgs/native_assets_builder/test_data/native_dynamic_linking/hook/build.dart @@ -66,7 +66,7 @@ extension on BuildConfig { '-l$libraryName', ], OS.windows => [ - outputDirectory.resolve('$libraryName.dll').toFilePath(), + outputDirectory.resolve('$libraryName.lib').toFilePath(), ], _ => throw UnimplementedError('Unsupported OS: $targetOS'), }; From 676c6c294b0b42e5f371d328c54acb5c0875820c Mon Sep 17 00:00:00 2001 From: Gabriel Terwesten Date: Fri, 6 Sep 2024 12:48:12 +0200 Subject: [PATCH 2/3] Use `inTempDir`, rename `native_dynamic_linking_{add -> helper}` and fix test expectation --- ...art => native_dynamic_linking_helper.dart} | 2 +- .../native_dynamic_linking_test.dart | 189 +++++++++--------- 2 files changed, 96 insertions(+), 95 deletions(-) rename pkgs/native_assets_builder/test/test_data/{native_dynamic_linking_add.dart => native_dynamic_linking_helper.dart} (94%) diff --git a/pkgs/native_assets_builder/test/test_data/native_dynamic_linking_add.dart b/pkgs/native_assets_builder/test/test_data/native_dynamic_linking_helper.dart similarity index 94% rename from pkgs/native_assets_builder/test/test_data/native_dynamic_linking_add.dart rename to pkgs/native_assets_builder/test/test_data/native_dynamic_linking_helper.dart index 759452fd5..54262de66 100644 --- a/pkgs/native_assets_builder/test/test_data/native_dynamic_linking_add.dart +++ b/pkgs/native_assets_builder/test/test_data/native_dynamic_linking_helper.dart @@ -11,5 +11,5 @@ void main(List arguments) { final addLibrary = DynamicLibrary.open(addLibraryPath); final add = addLibrary.lookupFunction('add'); - print(add(a, b)); + print('Result: ${add(a, b)}'); } diff --git a/pkgs/native_assets_builder/test/test_data/native_dynamic_linking_test.dart b/pkgs/native_assets_builder/test/test_data/native_dynamic_linking_test.dart index f6653289a..82072836f 100644 --- a/pkgs/native_assets_builder/test/test_data/native_dynamic_linking_test.dart +++ b/pkgs/native_assets_builder/test/test_data/native_dynamic_linking_test.dart @@ -17,110 +17,111 @@ import 'package:test/test.dart'; import '../helpers.dart'; void main() async { - late Uri tempUri; const name = 'native_dynamic_linking'; - setUp(() async { - tempUri = (await Directory.systemTemp.createTemp()).uri; - }); - - tearDown(() async { - await Directory.fromUri(tempUri).delete(recursive: true); - }); - for (final dryRun in [true, false]) { final testSuffix = dryRun ? ' dry_run' : ''; - test('native_dynamic_linking build$testSuffix', () async { - final testTempUri = tempUri.resolve('test1/'); - await Directory.fromUri(testTempUri).create(); - final testPackageUri = testDataUri.resolve('$name/'); - final dartUri = Uri.file(Platform.resolvedExecutable); + test( + 'native_dynamic_linking build$testSuffix', + () => inTempDir((tempUri) async { + final testTempUri = tempUri.resolve('test1/'); + await Directory.fromUri(testTempUri).create(); + final testPackageUri = testDataUri.resolve('$name/'); + final dartUri = Uri.file(Platform.resolvedExecutable); - final config = BuildConfigImpl( - outputDirectory: tempUri, - packageName: name, - packageRoot: testPackageUri, - targetOS: OSImpl.current, - version: HookConfigImpl.latestVersion, - linkModePreference: LinkModePreferenceImpl.dynamic, - dryRun: dryRun, - linkingEnabled: false, - targetArchitecture: dryRun ? null : ArchitectureImpl.current, - buildMode: dryRun ? null : BuildModeImpl.debug, - cCompiler: dryRun - ? null - : CCompilerConfigImpl( - compiler: cc, - envScript: envScript, - envScriptArgs: envScriptArgs, - ), - ); - - final buildConfigUri = testTempUri.resolve('build_config.json'); - File.fromUri(buildConfigUri) - .writeAsStringSync(jsonEncode(config.toJson())); + final config = BuildConfigImpl( + outputDirectory: tempUri, + packageName: name, + packageRoot: testPackageUri, + targetOS: OSImpl.current, + version: HookConfigImpl.latestVersion, + linkModePreference: LinkModePreferenceImpl.dynamic, + dryRun: dryRun, + linkingEnabled: false, + targetArchitecture: dryRun ? null : ArchitectureImpl.current, + buildMode: dryRun ? null : BuildModeImpl.debug, + cCompiler: dryRun + ? null + : CCompilerConfigImpl( + compiler: cc, + envScript: envScript, + envScriptArgs: envScriptArgs, + ), + ); - final processResult = await Process.run( - dartUri.toFilePath(), - [ - 'hook/build.dart', - '--config=${buildConfigUri.toFilePath()}', - ], - workingDirectory: testPackageUri.toFilePath(), - ); - if (processResult.exitCode != 0) { - print(processResult.stdout); - print(processResult.stderr); - print(processResult.exitCode); - } - expect(processResult.exitCode, 0); + final buildConfigUri = testTempUri.resolve('build_config.json'); + File.fromUri(buildConfigUri) + .writeAsStringSync(jsonEncode(config.toJson())); - final buildOutputUri = tempUri.resolve('build_output.json'); - final buildOutput = HookOutputImpl.fromJsonString( - await File.fromUri(buildOutputUri).readAsString()); - final assets = buildOutput.assets; - final dependencies = buildOutput.dependencies; - if (dryRun) { - expect(assets.length, greaterThanOrEqualTo(3)); - expect(dependencies, []); - } else { - expect(assets.length, 3); - expect(await assets.allExist(), true); - expect( - dependencies, + final processResult = await Process.run( + dartUri.toFilePath(), [ - testPackageUri.resolve('src/debug.c'), - testPackageUri.resolve('src/math.c'), - testPackageUri.resolve('src/add.c'), + 'hook/build.dart', + '--config=${buildConfigUri.toFilePath()}', ], + workingDirectory: testPackageUri.toFilePath(), ); + if (processResult.exitCode != 0) { + print(processResult.stdout); + print(processResult.stderr); + print(processResult.exitCode); + } + expect(processResult.exitCode, 0); - final addLibraryPath = assets - .firstWhere((asset) => asset.id.endsWith('add.dart')) - .file! - .toFilePath(); - final addResult = await runProcess( - executable: dartExecutable, - arguments: [ - 'run', - pkgNativeAssetsBuilderUri - .resolve('test/test_data/native_dynamic_linking_add.dart') - .toFilePath(), - addLibraryPath, - '1', - '2', - ], - environment: { - // Add the directory containing the linked dynamic libraries to the - // PATH so that the dynamic linker can find them. - if (Platform.isWindows) - 'PATH': '${tempUri.toFilePath()};${Platform.environment['PATH']}', - }, - throwOnUnexpectedExitCode: true, - logger: logger, - ); - expect(addResult.stdout, 'Adding 1 and 2.\n3\n'); - } - }); + final buildOutputUri = tempUri.resolve('build_output.json'); + final buildOutput = HookOutputImpl.fromJsonString( + await File.fromUri(buildOutputUri).readAsString()); + final assets = buildOutput.assets; + final dependencies = buildOutput.dependencies; + if (dryRun) { + expect(assets.length, greaterThanOrEqualTo(3)); + expect(dependencies, []); + } else { + expect(assets.length, 3); + expect(await assets.allExist(), true); + expect( + dependencies, + [ + testPackageUri.resolve('src/debug.c'), + testPackageUri.resolve('src/math.c'), + testPackageUri.resolve('src/add.c'), + ], + ); + + final addLibraryPath = assets + .firstWhere((asset) => asset.id.endsWith('add.dart')) + .file! + .toFilePath(); + final addResult = await runProcess( + executable: dartExecutable, + arguments: [ + 'run', + pkgNativeAssetsBuilderUri + .resolve('test/test_data/native_dynamic_linking_helper.dart') + .toFilePath(), + addLibraryPath, + '1', + '2', + ], + environment: { + // Add the directory containing the linked dynamic libraries to the + // PATH so that the dynamic linker can find them. + if (Platform.isWindows) + 'PATH': + '${tempUri.toFilePath()};${Platform.environment['PATH']}', + }, + throwOnUnexpectedExitCode: true, + logger: logger, + ); + expect( + addResult.stdout, + allOf( + contains('Adding 1 and 2.'), + contains('Result: 3'), + ), + ); + } + }), + ); } } From c0d7ca36e27548ff8b0a7c6822c2e68d9a7ab61a Mon Sep 17 00:00:00 2001 From: Gabriel Terwesten Date: Fri, 6 Sep 2024 12:53:25 +0200 Subject: [PATCH 3/3] Fix formatting --- .../test/test_data/native_dynamic_linking_test.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/native_assets_builder/test/test_data/native_dynamic_linking_test.dart b/pkgs/native_assets_builder/test/test_data/native_dynamic_linking_test.dart index 82072836f..9d85ef012 100644 --- a/pkgs/native_assets_builder/test/test_data/native_dynamic_linking_test.dart +++ b/pkgs/native_assets_builder/test/test_data/native_dynamic_linking_test.dart @@ -104,8 +104,8 @@ void main() async { '2', ], environment: { - // Add the directory containing the linked dynamic libraries to the - // PATH so that the dynamic linker can find them. + // Add the directory containing the linked dynamic libraries to + // the PATH so that the dynamic linker can find them. if (Platform.isWindows) 'PATH': '${tempUri.toFilePath()};${Platform.environment['PATH']}',