blob: 88f51d59e3decfc8ce330df726ae63ca396240cd [file] [log] [blame]
// Copyright 2014 The Flutter Authors. 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:file/file.dart';
import 'package:flutter_tools/src/base/logger.dart';
import 'package:flutter_tools/src/isolated/native_assets/native_assets.dart';
import 'package:flutter_tools/src/resident_runner.dart';
import 'package:flutter_tools/src/run_hot.dart';
import 'package:native_assets_builder/native_assets_builder.dart'
as native_assets_builder;
import 'package:native_assets_cli/native_assets_cli_internal.dart';
import 'package:package_config/package_config_types.dart';
/// Mocks all logic instead of using `package:native_assets_builder`, which
/// relies on doing process calls to `pub` and the local file system.
class FakeNativeAssetsBuildRunner implements NativeAssetsBuildRunner {
FakeNativeAssetsBuildRunner({
this.hasPackageConfigResult = true,
this.packagesWithNativeAssetsResult = const <Package>[],
this.onBuild,
this.buildDryRunResult = const FakeNativeAssetsBuilderResult(),
this.buildResult = const FakeNativeAssetsBuilderResult(),
this.linkResult = const FakeNativeAssetsBuilderResult(),
this.linkDryRunResult = const FakeNativeAssetsBuilderResult(),
CCompilerConfigImpl? cCompilerConfigResult,
CCompilerConfigImpl? ndkCCompilerConfigImplResult,
}) : cCompilerConfigResult = cCompilerConfigResult ?? CCompilerConfigImpl(),
ndkCCompilerConfigImplResult =
ndkCCompilerConfigImplResult ?? CCompilerConfigImpl();
final native_assets_builder.BuildResult Function(Target)? onBuild;
final native_assets_builder.BuildResult buildResult;
final native_assets_builder.LinkResult linkResult;
final native_assets_builder.BuildDryRunResult buildDryRunResult;
final native_assets_builder.LinkDryRunResult linkDryRunResult;
final bool hasPackageConfigResult;
final List<Package> packagesWithNativeAssetsResult;
final CCompilerConfigImpl cCompilerConfigResult;
final CCompilerConfigImpl ndkCCompilerConfigImplResult;
int buildInvocations = 0;
int buildDryRunInvocations = 0;
int linkInvocations = 0;
int linkDryRunInvocations = 0;
int hasPackageConfigInvocations = 0;
int packagesWithNativeAssetsInvocations = 0;
BuildModeImpl? lastBuildMode;
@override
Future<native_assets_builder.BuildResult> build({
required bool includeParentEnvironment,
required BuildModeImpl buildMode,
required LinkModePreferenceImpl linkModePreference,
required Target target,
required Uri workingDirectory,
CCompilerConfigImpl? cCompilerConfig,
int? targetAndroidNdkApi,
IOSSdkImpl? targetIOSSdkImpl,
}) async {
buildInvocations++;
lastBuildMode = buildMode;
return onBuild?.call(target) ?? buildResult;
}
@override
Future<native_assets_builder.LinkResult> link({
required bool includeParentEnvironment,
required BuildModeImpl buildMode,
required LinkModePreferenceImpl linkModePreference,
required Target target,
required Uri workingDirectory,
required native_assets_builder.BuildResult buildResult,
CCompilerConfigImpl? cCompilerConfig,
int? targetAndroidNdkApi,
IOSSdkImpl? targetIOSSdkImpl,
}) async {
linkInvocations++;
lastBuildMode = buildMode;
return linkResult;
}
@override
Future<native_assets_builder.BuildDryRunResult> buildDryRun({
required bool includeParentEnvironment,
required LinkModePreferenceImpl linkModePreference,
required OSImpl targetOS,
required Uri workingDirectory,
}) async {
buildDryRunInvocations++;
return buildDryRunResult;
}
@override
Future<native_assets_builder.LinkDryRunResult> linkDryRun({
required bool includeParentEnvironment,
required LinkModePreferenceImpl linkModePreference,
required OSImpl targetOS,
required Uri workingDirectory,
required native_assets_builder.BuildDryRunResult buildDryRunResult,
}) async {
linkDryRunInvocations++;
return linkDryRunResult;
}
@override
Future<bool> hasPackageConfig() async {
hasPackageConfigInvocations++;
return hasPackageConfigResult;
}
@override
Future<List<Package>> packagesWithNativeAssets() async {
packagesWithNativeAssetsInvocations++;
return packagesWithNativeAssetsResult;
}
@override
Future<CCompilerConfigImpl> get cCompilerConfig async =>
cCompilerConfigResult;
@override
Future<CCompilerConfigImpl> get ndkCCompilerConfigImpl async =>
cCompilerConfigResult;
}
final class FakeNativeAssetsBuilderResult
implements
native_assets_builder.BuildResult,
native_assets_builder.BuildDryRunResult,
native_assets_builder.LinkResult,
native_assets_builder.LinkDryRunResult {
const FakeNativeAssetsBuilderResult({
this.assets = const <AssetImpl>[],
this.assetsForLinking = const <String, List<AssetImpl>>{},
this.dependencies = const <Uri>[],
this.success = true,
});
@override
final List<AssetImpl> assets;
@override
final Map<String, List<AssetImpl>> assetsForLinking;
@override
final List<Uri> dependencies;
@override
final bool success;
}
class FakeHotRunnerNativeAssetsBuilder implements HotRunnerNativeAssetsBuilder {
FakeHotRunnerNativeAssetsBuilder(this.buildRunner);
final NativeAssetsBuildRunner buildRunner;
@override
Future<Uri?> dryRun({
required Uri projectUri,
required FileSystem fileSystem,
required List<FlutterDevice> flutterDevices,
required PackageConfig packageConfig,
required Logger logger,
}) {
return dryRunNativeAssets(
projectUri: projectUri,
fileSystem: fileSystem,
buildRunner: buildRunner,
flutterDevices: flutterDevices,
);
}
}