Skip to content

Commit 851497f

Browse files
[flutter_tools] fix tests with no native assets running native asset build (#135474)
Fixes flutter/flutter#135461
1 parent 67d4a83 commit 851497f

File tree

7 files changed

+49
-29
lines changed

7 files changed

+49
-29
lines changed

packages/flutter_tools/lib/src/ios/native_assets.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ Future<Uri?> dryRunNativeAssetsIOS({
2323
required Uri projectUri,
2424
required FileSystem fileSystem,
2525
}) async {
26-
if (await hasNoPackageConfig(buildRunner) || await isDisabledAndNoNativeAssets(buildRunner)) {
26+
if (!await nativeBuildRequired(buildRunner)) {
2727
return null;
2828
}
2929

@@ -72,7 +72,7 @@ Future<List<Uri>> buildNativeAssetsIOS({
7272
required Uri yamlParentDirectory,
7373
required FileSystem fileSystem,
7474
}) async {
75-
if (await hasNoPackageConfig(buildRunner) || await isDisabledAndNoNativeAssets(buildRunner)) {
75+
if (!await nativeBuildRequired(buildRunner)) {
7676
await writeNativeAssetsYaml(<Asset>[], yamlParentDirectory, fileSystem);
7777
return <Uri>[];
7878
}

packages/flutter_tools/lib/src/linux/native_assets.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ Future<Uri?> dryRunNativeAssetsLinux({
2323
bool flutterTester = false,
2424
required FileSystem fileSystem,
2525
}) async {
26-
if (await hasNoPackageConfig(buildRunner) || await isDisabledAndNoNativeAssets(buildRunner)) {
26+
if (!await nativeBuildRequired(buildRunner)) {
2727
return null;
2828
}
2929

@@ -90,7 +90,7 @@ Future<(Uri? nativeAssetsYaml, List<Uri> dependencies)> buildNativeAssetsLinux({
9090
// CMake requires the folder to exist to do copying.
9191
await buildDir.create(recursive: true);
9292
}
93-
if (await hasNoPackageConfig(buildRunner) || await isDisabledAndNoNativeAssets(buildRunner)) {
93+
if (!await nativeBuildRequired(buildRunner)) {
9494
final Uri nativeAssetsYaml = await writeNativeAssetsYaml(<Asset>[], yamlParentDirectory ?? buildUri_, fileSystem);
9595
return (nativeAssetsYaml, <Uri>[]);
9696
}

packages/flutter_tools/lib/src/macos/native_assets.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ Future<Uri?> dryRunNativeAssetsMacOS({
2323
bool flutterTester = false,
2424
required FileSystem fileSystem,
2525
}) async {
26-
if (await hasNoPackageConfig(buildRunner) || await isDisabledAndNoNativeAssets(buildRunner)) {
26+
if (!await nativeBuildRequired(buildRunner)) {
2727
return null;
2828
}
2929

@@ -77,7 +77,7 @@ Future<(Uri? nativeAssetsYaml, List<Uri> dependencies)> buildNativeAssetsMacOS({
7777
}) async {
7878
const OS targetOs = OS.macOS;
7979
final Uri buildUri_ = nativeAssetsBuildUri(projectUri, targetOs);
80-
if (await hasNoPackageConfig(buildRunner) || await isDisabledAndNoNativeAssets(buildRunner)) {
80+
if (!await nativeBuildRequired(buildRunner)) {
8181
final Uri nativeAssetsYaml = await writeNativeAssetsYaml(<Asset>[], yamlParentDirectory ?? buildUri_, fileSystem);
8282
return (nativeAssetsYaml, <Uri>[]);
8383
}

packages/flutter_tools/lib/src/native_assets.dart

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -214,32 +214,31 @@ BuildMode nativeAssetsBuildMode(build_info.BuildMode buildMode) {
214214
///
215215
/// Native asset builds cannot be run without a package config. If there is
216216
/// no package config, leave a logging trace about that.
217-
Future<bool> hasNoPackageConfig(NativeAssetsBuildRunner buildRunner) async {
217+
Future<bool> _hasNoPackageConfig(NativeAssetsBuildRunner buildRunner) async {
218218
final bool packageConfigExists = await buildRunner.hasPackageConfig();
219219
if (!packageConfigExists) {
220220
globals.logger.printTrace('No package config found. Skipping native assets compilation.');
221221
}
222222
return !packageConfigExists;
223223
}
224224

225-
/// Checks that if native assets is disabled, none of the dependencies declare
226-
/// native assets.
227-
///
228-
/// If any of the dependencies have native assets, but native assets are
229-
/// disabled, exits the tool.
230-
Future<bool> isDisabledAndNoNativeAssets(NativeAssetsBuildRunner buildRunner) async {
231-
if (featureFlags.isNativeAssetsEnabled) {
225+
Future<bool> nativeBuildRequired(NativeAssetsBuildRunner buildRunner) async {
226+
if (await _hasNoPackageConfig(buildRunner)) {
232227
return false;
233228
}
234229
final List<Package> packagesWithNativeAssets = await buildRunner.packagesWithNativeAssets();
235230
if (packagesWithNativeAssets.isEmpty) {
236-
return true;
231+
return false;
237232
}
238-
final String packageNames = packagesWithNativeAssets.map((Package p) => p.name).join(' ');
239-
throwToolExit(
240-
'Package(s) $packageNames require the native assets feature to be enabled. '
241-
'Enable using `flutter config --enable-native-assets`.',
242-
);
233+
234+
if (!featureFlags.isNativeAssetsEnabled) {
235+
final String packageNames = packagesWithNativeAssets.map((Package p) => p.name).join(' ');
236+
throwToolExit(
237+
'Package(s) $packageNames require the native assets feature to be enabled. '
238+
'Enable using `flutter config --enable-native-assets`.',
239+
);
240+
}
241+
return true;
243242
}
244243

245244
/// Ensures that either this project has no native assets, or that native assets
@@ -252,7 +251,7 @@ Future<void> ensureNoNativeAssetsOrOsIsSupported(
252251
FileSystem fileSystem,
253252
NativeAssetsBuildRunner buildRunner,
254253
) async {
255-
if (await hasNoPackageConfig(buildRunner)) {
254+
if (await _hasNoPackageConfig(buildRunner)) {
256255
return;
257256
}
258257
final List<Package> packagesWithNativeAssets = await buildRunner.packagesWithNativeAssets();
@@ -345,12 +344,7 @@ Future<Uri?> dryRunNativeAssets({
345344
buildRunner: buildRunner,
346345
);
347346
} else {
348-
await ensureNoNativeAssetsOrOsIsSupported(
349-
projectUri,
350-
const LocalPlatform().operatingSystem,
351-
fileSystem,
352-
buildRunner,
353-
);
347+
await nativeBuildRequired(buildRunner);
354348
nativeAssetsYaml = null;
355349
}
356350
case build_info.TargetPlatform.linux_arm64:
@@ -389,7 +383,7 @@ Future<Uri?> dryRunNativeAssetsMultipeOSes({
389383
required FileSystem fileSystem,
390384
required Iterable<build_info.TargetPlatform> targetPlatforms,
391385
}) async {
392-
if (await hasNoPackageConfig(buildRunner) || await isDisabledAndNoNativeAssets(buildRunner)) {
386+
if (await nativeBuildRequired(buildRunner)) {
393387
return null;
394388
}
395389

packages/flutter_tools/test/general.shard/build_system/targets/native_assets_test.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import 'package:flutter_tools/src/build_system/targets/native_assets.dart';
1414
import 'package:flutter_tools/src/features.dart';
1515
import 'package:flutter_tools/src/native_assets.dart';
1616
import 'package:native_assets_cli/native_assets_cli.dart' as native_assets_cli;
17+
import 'package:package_config/package_config.dart' show Package;
1718

1819
import '../../../src/common.dart';
1920
import '../../../src/context.dart';
@@ -104,6 +105,7 @@ void main() {
104105
await createPackageConfig(iosEnvironment);
105106

106107
final NativeAssetsBuildRunner buildRunner = FakeNativeAssetsBuildRunner(
108+
packagesWithNativeAssetsResult: <Package>[Package('foo', iosEnvironment.buildDir.uri)],
107109
buildResult: FakeNativeAssetsBuilderResult(assets: <native_assets_cli.Asset>[
108110
native_assets_cli.Asset(
109111
id: 'package:foo/foo.dart',

packages/flutter_tools/test/general.shard/linux/native_assets_test.dart

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import 'package:file/file.dart';
66
import 'package:file/memory.dart';
77
import 'package:file_testing/file_testing.dart';
88
import 'package:flutter_tools/src/artifacts.dart';
9+
import 'package:flutter_tools/src/base/common.dart';
910
import 'package:flutter_tools/src/base/file_system.dart';
1011
import 'package:flutter_tools/src/base/logger.dart';
1112
import 'package:flutter_tools/src/base/platform.dart';
@@ -86,6 +87,24 @@ void main() {
8687
);
8788
});
8889

90+
testUsingContext('does not throw if clang not present but no native assets present', overrides: <Type, Generator>{
91+
FeatureFlags: () => TestFeatureFlags(isNativeAssetsEnabled: true),
92+
ProcessManager: () => FakeProcessManager.empty(),
93+
}, () async {
94+
final File packageConfig = environment.projectDir.childFile('.dart_tool/package_config.json');
95+
await packageConfig.create(recursive: true);
96+
await buildNativeAssetsLinux(
97+
projectUri: projectUri,
98+
buildMode: BuildMode.debug,
99+
fileSystem: fileSystem,
100+
buildRunner: _BuildRunnerWithoutClang(),
101+
);
102+
expect(
103+
(globals.logger as BufferLogger).traceText,
104+
isNot(contains('Building native assets for ')),
105+
);
106+
});
107+
89108
testUsingContext('dry run for multiple OSes with no package config', overrides: <Type, Generator>{
90109
ProcessManager: () => FakeProcessManager.empty(),
91110
}, () async {
@@ -372,3 +391,8 @@ void main() {
372391
expect(result.cc, Uri.file('/some/path/to/clang'));
373392
});
374393
}
394+
395+
class _BuildRunnerWithoutClang extends FakeNativeAssetsBuildRunner {
396+
@override
397+
Future<CCompilerConfig> get cCompilerConfig async => throwToolExit('Failed to find clang++ on the PATH.');
398+
}

packages/flutter_tools/test/general.shard/resident_runner_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2420,7 +2420,7 @@ flutter:
24202420
expect(buildRunner.buildInvocations, 0);
24212421
expect(buildRunner.dryRunInvocations, 1);
24222422
expect(buildRunner.hasPackageConfigInvocations, 1);
2423-
expect(buildRunner.packagesWithNativeAssetsInvocations, 0);
2423+
expect(buildRunner.packagesWithNativeAssetsInvocations, 1);
24242424
}),
24252425
overrides: <Type, Generator>{
24262426
ProcessManager: () => FakeProcessManager.any(),

0 commit comments

Comments
 (0)