testCodeBuildHook function

Future<void> testCodeBuildHook({
  1. required dynamic mainMethod(
    1. List<String> arguments
    ),
  2. required FutureOr<void> check(
    1. BuildInput,
    2. BuildOutput
    ),
  3. Architecture? targetArchitecture,
  4. OS? targetOS,
  5. IOSSdk? targetIOSSdk,
  6. int? targetIOSVersion,
  7. int? targetMacOSVersion,
  8. int? targetAndroidNdkApi,
  9. CCompilerConfig? cCompiler,
  10. LinkModePreference? linkModePreference,
  11. bool? linkingEnabled,
})

Validate a code build hook; this will throw an exception on validation errors.

This is intended to be used from tests, e.g.:

test('test my build hook', () async {
  await testCodeBuildHook(
    ...
  );
});

Implementation

Future<void> testCodeBuildHook({
  // ignore: inference_failure_on_function_return_type
  required Function(List<String> arguments) mainMethod,
  required FutureOr<void> Function(BuildInput, BuildOutput) check,
  Architecture? targetArchitecture,
  OS? targetOS,
  IOSSdk? targetIOSSdk,
  int? targetIOSVersion,
  int? targetMacOSVersion,
  int? targetAndroidNdkApi,
  CCompilerConfig? cCompiler,
  LinkModePreference? linkModePreference,
  bool? linkingEnabled,
}) async {
  final extension = CodeAssetExtension(
    linkModePreference: linkModePreference ?? LinkModePreference.dynamic,
    cCompiler: cCompiler,
    targetArchitecture: targetArchitecture ?? Architecture.current,
    targetOS: targetOS ?? OS.current,
    iOS: targetOS == OS.iOS
        ? IOSCodeConfig(
            targetSdk: targetIOSSdk!,
            targetVersion: targetIOSVersion!,
          )
        : null,
    macOS: targetOS == OS.macOS
        ? MacOSCodeConfig(targetVersion: targetMacOSVersion!)
        : null,
    android: targetOS == OS.android
        ? AndroidCodeConfig(targetNdkApi: targetAndroidNdkApi!)
        : null,
  );
  await testBuildHook(
    mainMethod: mainMethod,
    extraInputSetup: (input) {
      input.addExtension(extension);
    },
    check: (input, output) async {
      final validationErrors = await extension.validateBuildOutput(
        input,
        output,
      );
      if (validationErrors.isNotEmpty) {
        throw ValidationFailure(
          'encountered build output validation issues: $validationErrors',
        );
      }

      await check(input, output);
    },
    linkingEnabled: linkingEnabled,
  );
}