| // Copyright (c) 2025, 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. | |
| import 'package:code_assets/code_assets.dart'; | |
| import 'package:hooks/hooks.dart'; | |
| import 'package:hooks/src/validation.dart'; | |
| import 'package:test/test.dart'; | |
| void main() { | |
| test('throws on output error', () async { | |
| final testResult = testBuildHook( | |
| mainMethod: (args) async { | |
| await build(args, (input, output) async { | |
| output.assets.code.add( | |
| CodeAsset( | |
| package: 'foreign_package', | |
| name: 'foo.dart', | |
| linkMode: DynamicLoadingSystem(Uri.parse('libbrokenstuff.so')), | |
| ), | |
| ); | |
| }); | |
| }, | |
| extensions: [ | |
| CodeAssetExtension( | |
| targetArchitecture: Architecture.current, | |
| targetOS: OS.current, | |
| linkModePreference: LinkModePreference.preferDynamic, | |
| macOS: OS.current == OS.macOS | |
| ? MacOSCodeConfig(targetVersion: 13) | |
| : null, | |
| ), | |
| ], | |
| check: expectAsync2((_, _) {}, count: 0), | |
| ); | |
| expect( | |
| testResult, | |
| throwsA( | |
| isA<ValidationFailure>() | |
| .having( | |
| (e) => e.message, | |
| 'message', | |
| contains( | |
| 'output validation issues: [Code asset ' | |
| '"package:foreign_package/foo.dart" does not start with ' | |
| // We don't know the expected prefix here because this test can | |
| // be run from the hooks package or the workspace. We just want | |
| // to assert some message related to outputs gets thrown. | |
| '"package:', | |
| ), | |
| ) | |
| .having( | |
| (e) => e.toString(), | |
| 'toString', | |
| contains('output validation issues:'), | |
| ), | |
| ), | |
| ); | |
| }); | |
| test('ProtocolExtension default implementations', () async { | |
| final ext = _EmptyExtension(); | |
| final buildInputBuilder = BuildInputBuilder(); | |
| final linkInputBuilder = LinkInputBuilder(); | |
| ext.setupBuildInput(buildInputBuilder); | |
| ext.setupLinkInput(linkInputBuilder); | |
| expect(await ext.validateApplicationAssets([]), isEmpty); | |
| expect(ext.outputFiles([]), isEmpty); | |
| }); | |
| } | |
| final class _EmptyExtension extends ProtocolExtension {} |