
This gets us closer to enabling [hot reload](https://github.com/dart-lang/sdk/issues/54934) on the web as this format is a prerequisite. Historically, we added support for the DDC module format only to enable hot reload, but that format is not feasible for the goal, so we added the DDC library bundle format. The DDC library bundle format is currently represented as the combination of the `ddc` module format and `canary`. We no longer need to support the old DDC module format. - Adds build artifacts to build the SDKs for this format (but only in sound mode as unsound is unsupported), and removes said artifacts for the DDC module format. - Update artifact maps and constants to add the new format and remove the old format. - Adds handling of the `canaryFeatures` flag. - Update dwds to 24.3.0 and use the new `FrontendServerDdcLibraryBundleStrategyProvider`. - Add bootstrap code for the new format. Kept DDC module format bootstrap code as it's used internally. - Updates tests. I ran `spinning_square` with the new module format to verify that it can run. ## Pre-launch Checklist - [X] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [X] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [X] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [X] I signed the [CLA]. - [X] I listed at least one issue that this PR fixes in the description above. - [X] I updated/added relevant documentation (doc comments with `///`). - [X] I added new tests to check the change I am making, or this PR is [test-exempt]. - [ ] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [X] All existing and new tests are passing.
870 lines
28 KiB
Dart
870 lines
28 KiB
Dart
// 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/memory.dart';
|
|
import 'package:flutter_tools/src/artifacts.dart';
|
|
import 'package:flutter_tools/src/base/file_system.dart';
|
|
import 'package:flutter_tools/src/base/logger.dart';
|
|
import 'package:flutter_tools/src/base/platform.dart';
|
|
import 'package:flutter_tools/src/build_info.dart';
|
|
import 'package:flutter_tools/src/cache.dart';
|
|
|
|
import '../src/common.dart';
|
|
import '../src/context.dart';
|
|
import '../src/fakes.dart';
|
|
|
|
void main() {
|
|
group('CachedArtifacts', () {
|
|
late CachedArtifacts artifacts;
|
|
late Cache cache;
|
|
late FileSystem fileSystem;
|
|
late Platform platform;
|
|
|
|
setUp(() {
|
|
fileSystem = MemoryFileSystem.test();
|
|
final Directory cacheRoot = fileSystem.directory('root')..createSync();
|
|
platform = FakePlatform();
|
|
cache = Cache(
|
|
rootOverride: cacheRoot,
|
|
fileSystem: fileSystem,
|
|
platform: platform,
|
|
logger: BufferLogger.test(),
|
|
osUtils: FakeOperatingSystemUtils(),
|
|
artifacts: <ArtifactSet>[],
|
|
);
|
|
artifacts = CachedArtifacts(
|
|
fileSystem: fileSystem,
|
|
cache: cache,
|
|
platform: platform,
|
|
operatingSystemUtils: FakeOperatingSystemUtils(),
|
|
);
|
|
});
|
|
|
|
testWithoutContext('getArtifactPath', () {
|
|
final String xcframeworkPath = artifacts.getArtifactPath(
|
|
Artifact.flutterXcframework,
|
|
platform: TargetPlatform.ios,
|
|
mode: BuildMode.release,
|
|
);
|
|
expect(
|
|
xcframeworkPath,
|
|
fileSystem.path.join(
|
|
'root',
|
|
'bin',
|
|
'cache',
|
|
'artifacts',
|
|
'engine',
|
|
'ios-release',
|
|
'Flutter.xcframework',
|
|
),
|
|
);
|
|
expect(
|
|
() => artifacts.getArtifactPath(
|
|
Artifact.flutterFramework,
|
|
platform: TargetPlatform.ios,
|
|
mode: BuildMode.release,
|
|
environmentType: EnvironmentType.simulator,
|
|
),
|
|
throwsToolExit(message: 'No xcframework found at $xcframeworkPath.'),
|
|
);
|
|
fileSystem.directory(xcframeworkPath).createSync(recursive: true);
|
|
expect(
|
|
() => artifacts.getArtifactPath(
|
|
Artifact.flutterFramework,
|
|
platform: TargetPlatform.ios,
|
|
mode: BuildMode.release,
|
|
environmentType: EnvironmentType.simulator,
|
|
),
|
|
throwsToolExit(message: 'No iOS frameworks found in $xcframeworkPath'),
|
|
);
|
|
|
|
fileSystem
|
|
.directory(xcframeworkPath)
|
|
.childDirectory('ios-arm64_x86_64-simulator')
|
|
.childDirectory('Flutter.framework')
|
|
.createSync(recursive: true);
|
|
fileSystem
|
|
.directory(xcframeworkPath)
|
|
.childDirectory('ios-arm64')
|
|
.childDirectory('Flutter.framework')
|
|
.createSync(recursive: true);
|
|
|
|
expect(
|
|
artifacts.getArtifactPath(
|
|
Artifact.flutterFramework,
|
|
platform: TargetPlatform.ios,
|
|
mode: BuildMode.release,
|
|
environmentType: EnvironmentType.simulator,
|
|
),
|
|
fileSystem.path.join(xcframeworkPath, 'ios-arm64_x86_64-simulator', 'Flutter.framework'),
|
|
);
|
|
final String actualReleaseFrameworkArtifact = artifacts.getArtifactPath(
|
|
Artifact.flutterFramework,
|
|
platform: TargetPlatform.ios,
|
|
mode: BuildMode.release,
|
|
environmentType: EnvironmentType.physical,
|
|
);
|
|
final String expectedArm64ReleaseFrameworkArtifact = fileSystem.path.join(
|
|
xcframeworkPath,
|
|
'ios-arm64',
|
|
'Flutter.framework',
|
|
);
|
|
expect(actualReleaseFrameworkArtifact, expectedArm64ReleaseFrameworkArtifact);
|
|
expect(
|
|
artifacts.getArtifactPath(
|
|
Artifact.flutterXcframework,
|
|
platform: TargetPlatform.ios,
|
|
mode: BuildMode.release,
|
|
),
|
|
fileSystem.path.join(
|
|
'root',
|
|
'bin',
|
|
'cache',
|
|
'artifacts',
|
|
'engine',
|
|
'ios-release',
|
|
'Flutter.xcframework',
|
|
),
|
|
);
|
|
expect(
|
|
artifacts.getArtifactPath(Artifact.flutterTester),
|
|
fileSystem.path.join(
|
|
'root',
|
|
'bin',
|
|
'cache',
|
|
'artifacts',
|
|
'engine',
|
|
'linux-x64',
|
|
'flutter_tester',
|
|
),
|
|
);
|
|
expect(
|
|
artifacts.getArtifactPath(Artifact.flutterTester, platform: TargetPlatform.linux_arm64),
|
|
fileSystem.path.join(
|
|
'root',
|
|
'bin',
|
|
'cache',
|
|
'artifacts',
|
|
'engine',
|
|
'linux-arm64',
|
|
'flutter_tester',
|
|
),
|
|
);
|
|
expect(
|
|
artifacts.getArtifactPath(Artifact.frontendServerSnapshotForEngineDartSdk),
|
|
fileSystem.path.join(
|
|
'root',
|
|
'bin',
|
|
'cache',
|
|
'dart-sdk',
|
|
'bin',
|
|
'snapshots',
|
|
'frontend_server_aot.dart.snapshot',
|
|
),
|
|
);
|
|
});
|
|
|
|
testWithoutContext(
|
|
'getArtifactPath for FlutterMacOS.framework and FlutterMacOS.xcframework',
|
|
() {
|
|
final String xcframeworkPath = fileSystem.path.join(
|
|
'root',
|
|
'bin',
|
|
'cache',
|
|
'artifacts',
|
|
'engine',
|
|
'darwin-x64-release',
|
|
'FlutterMacOS.xcframework',
|
|
);
|
|
final String xcframeworkPathWithUnsetPlatform = fileSystem.path.join(
|
|
'root',
|
|
'bin',
|
|
'cache',
|
|
'artifacts',
|
|
'engine',
|
|
'linux-x64-release',
|
|
'FlutterMacOS.xcframework',
|
|
);
|
|
expect(
|
|
artifacts.getArtifactPath(
|
|
Artifact.flutterMacOSXcframework,
|
|
platform: TargetPlatform.darwin,
|
|
mode: BuildMode.release,
|
|
),
|
|
xcframeworkPath,
|
|
);
|
|
expect(
|
|
artifacts.getArtifactPath(Artifact.flutterMacOSXcframework, mode: BuildMode.release),
|
|
xcframeworkPathWithUnsetPlatform,
|
|
);
|
|
expect(
|
|
() => artifacts.getArtifactPath(
|
|
Artifact.flutterMacOSFramework,
|
|
platform: TargetPlatform.darwin,
|
|
mode: BuildMode.release,
|
|
),
|
|
throwsToolExit(message: 'No xcframework found at $xcframeworkPath.'),
|
|
);
|
|
expect(
|
|
() => artifacts.getArtifactPath(Artifact.flutterMacOSFramework, mode: BuildMode.release),
|
|
throwsToolExit(message: 'No xcframework found at $xcframeworkPathWithUnsetPlatform.'),
|
|
);
|
|
fileSystem.directory(xcframeworkPath).createSync(recursive: true);
|
|
expect(
|
|
() => artifacts.getArtifactPath(
|
|
Artifact.flutterMacOSFramework,
|
|
platform: TargetPlatform.darwin,
|
|
mode: BuildMode.release,
|
|
),
|
|
throwsToolExit(message: 'No macOS frameworks found in $xcframeworkPath'),
|
|
);
|
|
fileSystem
|
|
.directory(xcframeworkPath)
|
|
.childDirectory('macos-arm64_x86_64')
|
|
.childDirectory('FlutterMacOS.framework')
|
|
.createSync(recursive: true);
|
|
expect(
|
|
artifacts.getArtifactPath(
|
|
Artifact.flutterMacOSFramework,
|
|
platform: TargetPlatform.darwin,
|
|
mode: BuildMode.release,
|
|
),
|
|
fileSystem.path.join(xcframeworkPath, 'macos-arm64_x86_64', 'FlutterMacOS.framework'),
|
|
);
|
|
},
|
|
);
|
|
|
|
testWithoutContext('Precompiled web AMD module system artifact paths are correct', () {
|
|
expect(
|
|
artifacts.getHostArtifact(HostArtifact.webPrecompiledAmdSdk).path,
|
|
'root/bin/cache/flutter_web_sdk/kernel/amd/dart_sdk.js',
|
|
);
|
|
expect(
|
|
artifacts.getHostArtifact(HostArtifact.webPrecompiledAmdSdkSourcemaps).path,
|
|
'root/bin/cache/flutter_web_sdk/kernel/amd/dart_sdk.js.map',
|
|
);
|
|
expect(
|
|
artifacts.getHostArtifact(HostArtifact.webPrecompiledAmdCanvaskitSdk).path,
|
|
'root/bin/cache/flutter_web_sdk/kernel/amd-canvaskit/dart_sdk.js',
|
|
);
|
|
expect(
|
|
artifacts.getHostArtifact(HostArtifact.webPrecompiledAmdCanvaskitSdkSourcemaps).path,
|
|
'root/bin/cache/flutter_web_sdk/kernel/amd-canvaskit/dart_sdk.js.map',
|
|
);
|
|
expect(
|
|
artifacts.getHostArtifact(HostArtifact.webPrecompiledAmdSoundSdk).path,
|
|
'root/bin/cache/flutter_web_sdk/kernel/amd-sound/dart_sdk.js',
|
|
);
|
|
expect(
|
|
artifacts.getHostArtifact(HostArtifact.webPrecompiledAmdSoundSdkSourcemaps).path,
|
|
'root/bin/cache/flutter_web_sdk/kernel/amd-sound/dart_sdk.js.map',
|
|
);
|
|
expect(
|
|
artifacts.getHostArtifact(HostArtifact.webPrecompiledAmdCanvaskitSoundSdk).path,
|
|
'root/bin/cache/flutter_web_sdk/kernel/amd-canvaskit-sound/dart_sdk.js',
|
|
);
|
|
expect(
|
|
artifacts.getHostArtifact(HostArtifact.webPrecompiledAmdCanvaskitSoundSdkSourcemaps).path,
|
|
'root/bin/cache/flutter_web_sdk/kernel/amd-canvaskit-sound/dart_sdk.js.map',
|
|
);
|
|
});
|
|
|
|
testWithoutContext(
|
|
'Precompiled web DDC library bundle module system artifact paths are correct',
|
|
() {
|
|
expect(
|
|
artifacts.getHostArtifact(HostArtifact.webPrecompiledDdcLibraryBundleSoundSdk).path,
|
|
'root/bin/cache/flutter_web_sdk/kernel/ddcLibraryBundle-sound/dart_sdk.js',
|
|
);
|
|
expect(
|
|
artifacts
|
|
.getHostArtifact(HostArtifact.webPrecompiledDdcLibraryBundleSoundSdkSourcemaps)
|
|
.path,
|
|
'root/bin/cache/flutter_web_sdk/kernel/ddcLibraryBundle-sound/dart_sdk.js.map',
|
|
);
|
|
expect(
|
|
artifacts
|
|
.getHostArtifact(HostArtifact.webPrecompiledDdcLibraryBundleCanvaskitSoundSdk)
|
|
.path,
|
|
'root/bin/cache/flutter_web_sdk/kernel/ddcLibraryBundle-canvaskit-sound/dart_sdk.js',
|
|
);
|
|
expect(
|
|
artifacts
|
|
.getHostArtifact(
|
|
HostArtifact.webPrecompiledDdcLibraryBundleCanvaskitSoundSdkSourcemaps,
|
|
)
|
|
.path,
|
|
'root/bin/cache/flutter_web_sdk/kernel/ddcLibraryBundle-canvaskit-sound/dart_sdk.js.map',
|
|
);
|
|
},
|
|
);
|
|
|
|
testWithoutContext('getEngineType', () {
|
|
expect(artifacts.getEngineType(TargetPlatform.android_arm, BuildMode.debug), 'android-arm');
|
|
expect(artifacts.getEngineType(TargetPlatform.ios, BuildMode.release), 'ios-release');
|
|
expect(artifacts.getEngineType(TargetPlatform.darwin), 'darwin-x64');
|
|
});
|
|
|
|
testWithoutContext(
|
|
'CachedLocalWebSdkArtifacts wrapping a versioned engine sets usesLocalArtifacts',
|
|
() {
|
|
final CachedLocalWebSdkArtifacts webArtifacts = CachedLocalWebSdkArtifacts(
|
|
parent: artifacts,
|
|
webSdkPath: fileSystem.path.join(fileSystem.currentDirectory.path, 'out', 'wasm_release'),
|
|
fileSystem: fileSystem,
|
|
platform: platform,
|
|
operatingSystemUtils: FakeOperatingSystemUtils(),
|
|
);
|
|
expect(webArtifacts.usesLocalArtifacts, true);
|
|
},
|
|
);
|
|
});
|
|
|
|
group('LocalEngineArtifacts', () {
|
|
late Artifacts artifacts;
|
|
late Cache cache;
|
|
late FileSystem fileSystem;
|
|
late Platform platform;
|
|
|
|
setUp(() {
|
|
fileSystem = MemoryFileSystem.test();
|
|
final Directory cacheRoot = fileSystem.directory('root')..createSync();
|
|
platform = FakePlatform();
|
|
cache = Cache(
|
|
rootOverride: cacheRoot,
|
|
fileSystem: fileSystem,
|
|
platform: platform,
|
|
logger: BufferLogger.test(),
|
|
osUtils: FakeOperatingSystemUtils(),
|
|
artifacts: <ArtifactSet>[],
|
|
);
|
|
artifacts = CachedLocalWebSdkArtifacts(
|
|
parent: CachedLocalEngineArtifacts(
|
|
fileSystem.path.join(fileSystem.currentDirectory.path, 'out', 'host_debug_unopt'),
|
|
engineOutPath: fileSystem.path.join(
|
|
fileSystem.currentDirectory.path,
|
|
'out',
|
|
'android_debug_unopt',
|
|
),
|
|
cache: cache,
|
|
fileSystem: fileSystem,
|
|
platform: platform,
|
|
processManager: FakeProcessManager.any(),
|
|
operatingSystemUtils: FakeOperatingSystemUtils(),
|
|
),
|
|
webSdkPath: fileSystem.path.join(fileSystem.currentDirectory.path, 'out', 'wasm_release'),
|
|
fileSystem: fileSystem,
|
|
platform: platform,
|
|
operatingSystemUtils: FakeOperatingSystemUtils(),
|
|
);
|
|
});
|
|
|
|
testWithoutContext(
|
|
'getArtifactPath for FlutterMacOS.framework and FlutterMacOS.xcframework',
|
|
() {
|
|
final String xcframeworkPath = fileSystem.path.join(
|
|
'/out',
|
|
'android_debug_unopt',
|
|
'FlutterMacOS.xcframework',
|
|
);
|
|
expect(
|
|
artifacts.getArtifactPath(
|
|
Artifact.flutterMacOSXcframework,
|
|
platform: TargetPlatform.darwin,
|
|
mode: BuildMode.release,
|
|
),
|
|
xcframeworkPath,
|
|
);
|
|
expect(
|
|
artifacts.getArtifactPath(Artifact.flutterMacOSXcframework, mode: BuildMode.release),
|
|
xcframeworkPath,
|
|
);
|
|
expect(
|
|
() => artifacts.getArtifactPath(
|
|
Artifact.flutterMacOSFramework,
|
|
platform: TargetPlatform.darwin,
|
|
mode: BuildMode.release,
|
|
),
|
|
throwsToolExit(
|
|
message: 'No xcframework found at /out/android_debug_unopt/FlutterMacOS.xcframework',
|
|
),
|
|
);
|
|
expect(
|
|
() => artifacts.getArtifactPath(Artifact.flutterMacOSFramework, mode: BuildMode.release),
|
|
throwsToolExit(
|
|
message: 'No xcframework found at /out/android_debug_unopt/FlutterMacOS.xcframework',
|
|
),
|
|
);
|
|
fileSystem.directory(xcframeworkPath).createSync(recursive: true);
|
|
expect(
|
|
() => artifacts.getArtifactPath(
|
|
Artifact.flutterMacOSFramework,
|
|
platform: TargetPlatform.darwin,
|
|
mode: BuildMode.release,
|
|
),
|
|
throwsToolExit(
|
|
message:
|
|
'No macOS frameworks found in /out/android_debug_unopt/FlutterMacOS.xcframework',
|
|
),
|
|
);
|
|
expect(
|
|
() => artifacts.getArtifactPath(Artifact.flutterMacOSFramework, mode: BuildMode.release),
|
|
throwsToolExit(
|
|
message:
|
|
'No macOS frameworks found in /out/android_debug_unopt/FlutterMacOS.xcframework',
|
|
),
|
|
);
|
|
|
|
fileSystem
|
|
.directory(xcframeworkPath)
|
|
.childDirectory('macos-arm64_x86_64')
|
|
.childDirectory('FlutterMacOS.framework')
|
|
.createSync(recursive: true);
|
|
|
|
expect(
|
|
artifacts.getArtifactPath(
|
|
Artifact.flutterMacOSFramework,
|
|
platform: TargetPlatform.darwin,
|
|
mode: BuildMode.release,
|
|
),
|
|
fileSystem.path.join(xcframeworkPath, 'macos-arm64_x86_64', 'FlutterMacOS.framework'),
|
|
);
|
|
expect(
|
|
artifacts.getArtifactPath(Artifact.flutterMacOSFramework, mode: BuildMode.release),
|
|
fileSystem.path.join(xcframeworkPath, 'macos-arm64_x86_64', 'FlutterMacOS.framework'),
|
|
);
|
|
},
|
|
);
|
|
|
|
testWithoutContext('getArtifactPath', () {
|
|
final String xcframeworkPath = artifacts.getArtifactPath(
|
|
Artifact.flutterXcframework,
|
|
platform: TargetPlatform.ios,
|
|
mode: BuildMode.release,
|
|
);
|
|
expect(
|
|
xcframeworkPath,
|
|
fileSystem.path.join('/out', 'android_debug_unopt', 'Flutter.xcframework'),
|
|
);
|
|
expect(
|
|
() => artifacts.getArtifactPath(
|
|
Artifact.flutterFramework,
|
|
platform: TargetPlatform.ios,
|
|
mode: BuildMode.release,
|
|
environmentType: EnvironmentType.simulator,
|
|
),
|
|
throwsToolExit(
|
|
message: 'No xcframework found at /out/android_debug_unopt/Flutter.xcframework',
|
|
),
|
|
);
|
|
fileSystem.directory(xcframeworkPath).createSync(recursive: true);
|
|
expect(
|
|
() => artifacts.getArtifactPath(
|
|
Artifact.flutterFramework,
|
|
platform: TargetPlatform.ios,
|
|
mode: BuildMode.release,
|
|
environmentType: EnvironmentType.simulator,
|
|
),
|
|
throwsToolExit(
|
|
message: 'No iOS frameworks found in /out/android_debug_unopt/Flutter.xcframework',
|
|
),
|
|
);
|
|
|
|
fileSystem
|
|
.directory(xcframeworkPath)
|
|
.childDirectory('ios-arm64_x86_64-simulator')
|
|
.childDirectory('Flutter.framework')
|
|
.createSync(recursive: true);
|
|
fileSystem
|
|
.directory(xcframeworkPath)
|
|
.childDirectory('ios-arm64')
|
|
.childDirectory('Flutter.framework')
|
|
.createSync(recursive: true);
|
|
fileSystem
|
|
.directory('out')
|
|
.childDirectory('host_debug_unopt')
|
|
.childDirectory('dart-sdk')
|
|
.childDirectory('bin')
|
|
.createSync(recursive: true);
|
|
|
|
expect(
|
|
artifacts.getArtifactPath(
|
|
Artifact.flutterFramework,
|
|
platform: TargetPlatform.ios,
|
|
mode: BuildMode.release,
|
|
environmentType: EnvironmentType.simulator,
|
|
),
|
|
fileSystem.path.join(xcframeworkPath, 'ios-arm64_x86_64-simulator', 'Flutter.framework'),
|
|
);
|
|
expect(
|
|
artifacts.getArtifactPath(
|
|
Artifact.flutterFramework,
|
|
platform: TargetPlatform.ios,
|
|
mode: BuildMode.release,
|
|
environmentType: EnvironmentType.physical,
|
|
),
|
|
fileSystem.path.join(xcframeworkPath, 'ios-arm64', 'Flutter.framework'),
|
|
);
|
|
expect(
|
|
artifacts.getArtifactPath(
|
|
Artifact.flutterXcframework,
|
|
platform: TargetPlatform.ios,
|
|
mode: BuildMode.release,
|
|
),
|
|
fileSystem.path.join('/out', 'android_debug_unopt', 'Flutter.xcframework'),
|
|
);
|
|
expect(
|
|
artifacts.getArtifactPath(Artifact.flutterTester),
|
|
fileSystem.path.join('/out', 'android_debug_unopt', 'flutter_tester'),
|
|
);
|
|
expect(
|
|
artifacts.getArtifactPath(Artifact.engineDartSdkPath),
|
|
fileSystem.path.join('/out', 'host_debug_unopt', 'dart-sdk'),
|
|
);
|
|
expect(
|
|
artifacts.getArtifactPath(Artifact.frontendServerSnapshotForEngineDartSdk),
|
|
fileSystem.path.join(
|
|
'/out',
|
|
'host_debug_unopt',
|
|
'dart-sdk',
|
|
'bin',
|
|
'snapshots',
|
|
'frontend_server_aot.dart.snapshot',
|
|
),
|
|
);
|
|
|
|
expect(
|
|
artifacts.getArtifactPath(
|
|
Artifact.flutterPreviewDevice,
|
|
platform: TargetPlatform.windows_x64,
|
|
),
|
|
fileSystem.path.join(
|
|
'root',
|
|
'bin',
|
|
'cache',
|
|
'artifacts',
|
|
'flutter_preview',
|
|
'flutter_preview.exe',
|
|
),
|
|
);
|
|
|
|
fileSystem
|
|
.file(fileSystem.path.join('/out', 'host_debug_unopt', 'impellerc'))
|
|
.createSync(recursive: true);
|
|
fileSystem
|
|
.file(fileSystem.path.join('/out', 'host_debug_unopt', 'libtessellator.so'))
|
|
.createSync(recursive: true);
|
|
|
|
expect(
|
|
artifacts.getHostArtifact(HostArtifact.impellerc).path,
|
|
fileSystem.path.join('/out', 'host_debug_unopt', 'impellerc'),
|
|
);
|
|
expect(
|
|
artifacts.getHostArtifact(HostArtifact.libtessellator).path,
|
|
fileSystem.path.join('/out', 'host_debug_unopt', 'libtessellator.so'),
|
|
);
|
|
});
|
|
|
|
testWithoutContext(
|
|
'falls back to bundled impeller artifacts if the files do not exist in the local engine',
|
|
() {
|
|
expect(
|
|
artifacts.getHostArtifact(HostArtifact.impellerc).path,
|
|
fileSystem.path.join(
|
|
'root',
|
|
'bin',
|
|
'cache',
|
|
'artifacts',
|
|
'engine',
|
|
'linux-x64',
|
|
'impellerc',
|
|
),
|
|
);
|
|
expect(
|
|
artifacts.getHostArtifact(HostArtifact.libtessellator).path,
|
|
fileSystem.path.join(
|
|
'root',
|
|
'bin',
|
|
'cache',
|
|
'artifacts',
|
|
'engine',
|
|
'linux-x64',
|
|
'libtessellator.so',
|
|
),
|
|
);
|
|
},
|
|
);
|
|
|
|
testWithoutContext('uses prebuilt dart sdk for web platform', () {
|
|
final String failureMessage =
|
|
'Unable to find a prebuilt dart sdk at:'
|
|
' "${fileSystem.path.join('/flutter', 'prebuilts', 'linux-x64', 'dart-sdk')}"';
|
|
|
|
expect(
|
|
() => artifacts.getArtifactPath(
|
|
Artifact.frontendServerSnapshotForEngineDartSdk,
|
|
platform: TargetPlatform.web_javascript,
|
|
),
|
|
throwsToolExit(message: failureMessage),
|
|
);
|
|
expect(
|
|
() => artifacts.getArtifactPath(
|
|
Artifact.engineDartSdkPath,
|
|
platform: TargetPlatform.web_javascript,
|
|
),
|
|
throwsToolExit(message: failureMessage),
|
|
);
|
|
expect(
|
|
() => artifacts.getArtifactPath(
|
|
Artifact.engineDartBinary,
|
|
platform: TargetPlatform.web_javascript,
|
|
),
|
|
throwsToolExit(message: failureMessage),
|
|
);
|
|
|
|
fileSystem
|
|
.directory('flutter')
|
|
.childDirectory('prebuilts')
|
|
.childDirectory('linux-x64')
|
|
.childDirectory('dart-sdk')
|
|
.childDirectory('bin')
|
|
.createSync(recursive: true);
|
|
|
|
expect(
|
|
artifacts.getArtifactPath(
|
|
Artifact.frontendServerSnapshotForEngineDartSdk,
|
|
platform: TargetPlatform.web_javascript,
|
|
),
|
|
fileSystem.path.join(
|
|
'/flutter',
|
|
'prebuilts',
|
|
'linux-x64',
|
|
'dart-sdk',
|
|
'bin',
|
|
'snapshots',
|
|
'frontend_server_aot.dart.snapshot',
|
|
),
|
|
);
|
|
expect(
|
|
artifacts.getArtifactPath(
|
|
Artifact.engineDartSdkPath,
|
|
platform: TargetPlatform.web_javascript,
|
|
),
|
|
fileSystem.path.join('/flutter', 'prebuilts', 'linux-x64', 'dart-sdk'),
|
|
);
|
|
expect(
|
|
artifacts.getArtifactPath(
|
|
Artifact.engineDartBinary,
|
|
platform: TargetPlatform.web_javascript,
|
|
),
|
|
fileSystem.path.join('/flutter', 'prebuilts', 'linux-x64', 'dart-sdk', 'bin', 'dart'),
|
|
);
|
|
expect(
|
|
artifacts.getArtifactPath(
|
|
Artifact.engineDartAotRuntime,
|
|
platform: TargetPlatform.web_javascript,
|
|
),
|
|
fileSystem.path.join(
|
|
'/flutter',
|
|
'prebuilts',
|
|
'linux-x64',
|
|
'dart-sdk',
|
|
'bin',
|
|
'dartaotruntime',
|
|
),
|
|
);
|
|
});
|
|
|
|
testWithoutContext('getEngineType', () {
|
|
expect(
|
|
artifacts.getEngineType(TargetPlatform.android_arm, BuildMode.debug),
|
|
'android_debug_unopt',
|
|
);
|
|
expect(artifacts.getEngineType(TargetPlatform.ios, BuildMode.release), 'android_debug_unopt');
|
|
expect(artifacts.getEngineType(TargetPlatform.darwin), 'android_debug_unopt');
|
|
});
|
|
|
|
testWithoutContext('Looks up dart.exe on windows platforms', () async {
|
|
artifacts = CachedLocalWebSdkArtifacts(
|
|
parent: CachedLocalEngineArtifacts(
|
|
fileSystem.path.join(fileSystem.currentDirectory.path, 'out', 'host_debug_unopt'),
|
|
engineOutPath: fileSystem.path.join(
|
|
fileSystem.currentDirectory.path,
|
|
'out',
|
|
'android_debug_unopt',
|
|
),
|
|
cache: cache,
|
|
fileSystem: fileSystem,
|
|
platform: FakePlatform(operatingSystem: 'windows'),
|
|
processManager: FakeProcessManager.any(),
|
|
operatingSystemUtils: FakeOperatingSystemUtils(),
|
|
),
|
|
webSdkPath: fileSystem.path.join(fileSystem.currentDirectory.path, 'out', 'wasm_release'),
|
|
fileSystem: fileSystem,
|
|
platform: FakePlatform(operatingSystem: 'windows'),
|
|
operatingSystemUtils: FakeOperatingSystemUtils(),
|
|
);
|
|
|
|
fileSystem
|
|
.directory('out')
|
|
.childDirectory('host_debug_unopt')
|
|
.childDirectory('dart-sdk')
|
|
.childDirectory('bin')
|
|
.createSync(recursive: true);
|
|
|
|
expect(
|
|
artifacts.getArtifactPath(Artifact.engineDartBinary),
|
|
fileSystem.path.join('/out', 'host_debug_unopt', 'dart-sdk', 'bin', 'dart.exe'),
|
|
);
|
|
});
|
|
|
|
testWithoutContext('Looks up dart on linux platforms', () async {
|
|
fileSystem
|
|
.directory('/out')
|
|
.childDirectory('host_debug_unopt')
|
|
.childDirectory('dart-sdk')
|
|
.childDirectory('bin')
|
|
.createSync(recursive: true);
|
|
|
|
expect(
|
|
artifacts.getArtifactPath(Artifact.engineDartBinary),
|
|
fileSystem.path.join('/out', 'host_debug_unopt', 'dart-sdk', 'bin', 'dart'),
|
|
);
|
|
});
|
|
|
|
testWithoutContext('Finds dart-sdk in windows prebuilts for web platform', () async {
|
|
artifacts = CachedLocalWebSdkArtifacts(
|
|
parent: CachedLocalEngineArtifacts(
|
|
fileSystem.path.join(fileSystem.currentDirectory.path, 'out', 'host_debug_unopt'),
|
|
engineOutPath: fileSystem.path.join(
|
|
fileSystem.currentDirectory.path,
|
|
'out',
|
|
'android_debug_unopt',
|
|
),
|
|
cache: cache,
|
|
fileSystem: fileSystem,
|
|
platform: FakePlatform(operatingSystem: 'windows'),
|
|
processManager: FakeProcessManager.any(),
|
|
operatingSystemUtils: FakeOperatingSystemUtils(),
|
|
),
|
|
webSdkPath: fileSystem.path.join(fileSystem.currentDirectory.path, 'out', 'wasm_release'),
|
|
fileSystem: fileSystem,
|
|
platform: FakePlatform(operatingSystem: 'windows'),
|
|
operatingSystemUtils: FakeOperatingSystemUtils(),
|
|
);
|
|
|
|
fileSystem
|
|
.directory('/flutter')
|
|
.childDirectory('prebuilts')
|
|
.childDirectory('windows-x64')
|
|
.childDirectory('dart-sdk')
|
|
.childDirectory('bin')
|
|
.createSync(recursive: true);
|
|
|
|
expect(
|
|
artifacts.getArtifactPath(
|
|
Artifact.engineDartBinary,
|
|
platform: TargetPlatform.web_javascript,
|
|
),
|
|
fileSystem.path.join('/flutter', 'prebuilts', 'windows-x64', 'dart-sdk', 'bin', 'dart.exe'),
|
|
);
|
|
});
|
|
|
|
testWithoutContext('Finds dart-sdk in macos prebuilts for web platform', () async {
|
|
artifacts = CachedLocalWebSdkArtifacts(
|
|
parent: CachedLocalEngineArtifacts(
|
|
fileSystem.path.join(fileSystem.currentDirectory.path, 'out', 'host_debug_unopt'),
|
|
engineOutPath: fileSystem.path.join(
|
|
fileSystem.currentDirectory.path,
|
|
'out',
|
|
'android_debug_unopt',
|
|
),
|
|
cache: cache,
|
|
fileSystem: fileSystem,
|
|
platform: FakePlatform(operatingSystem: 'macos'),
|
|
processManager: FakeProcessManager.any(),
|
|
operatingSystemUtils: FakeOperatingSystemUtils(),
|
|
),
|
|
webSdkPath: fileSystem.path.join(fileSystem.currentDirectory.path, 'out', 'wasm_release'),
|
|
fileSystem: fileSystem,
|
|
platform: FakePlatform(operatingSystem: 'macos'),
|
|
operatingSystemUtils: FakeOperatingSystemUtils(),
|
|
);
|
|
|
|
fileSystem
|
|
.directory('/flutter')
|
|
.childDirectory('prebuilts')
|
|
.childDirectory('macos-x64')
|
|
.childDirectory('dart-sdk')
|
|
.childDirectory('bin')
|
|
.createSync(recursive: true);
|
|
|
|
expect(
|
|
artifacts.getArtifactPath(
|
|
Artifact.engineDartBinary,
|
|
platform: TargetPlatform.web_javascript,
|
|
),
|
|
fileSystem.path.join('/flutter', 'prebuilts', 'macos-x64', 'dart-sdk', 'bin', 'dart'),
|
|
);
|
|
});
|
|
});
|
|
|
|
group('LocalEngineInfo', () {
|
|
late FileSystem fileSystem;
|
|
late LocalEngineInfo localEngineInfo;
|
|
|
|
setUp(() {
|
|
fileSystem = MemoryFileSystem.test();
|
|
});
|
|
|
|
testUsingContext(
|
|
'determines the target device name from the path',
|
|
() {
|
|
localEngineInfo = LocalEngineInfo(
|
|
targetOutPath: fileSystem.path.join(
|
|
fileSystem.currentDirectory.path,
|
|
'out',
|
|
'android_debug_unopt',
|
|
),
|
|
hostOutPath: fileSystem.path.join(
|
|
fileSystem.currentDirectory.path,
|
|
'out',
|
|
'host_debug_unopt',
|
|
),
|
|
);
|
|
|
|
expect(localEngineInfo.localTargetName, 'android_debug_unopt');
|
|
},
|
|
overrides: <Type, Generator>{
|
|
FileSystem: () => fileSystem,
|
|
ProcessManager: () => FakeProcessManager.any(),
|
|
},
|
|
);
|
|
|
|
testUsingContext(
|
|
'determines the target device name from the path when using a custom engine path',
|
|
() {
|
|
localEngineInfo = LocalEngineInfo(
|
|
targetOutPath: fileSystem.path.join(
|
|
fileSystem.currentDirectory.path,
|
|
'out',
|
|
'android_debug_unopt',
|
|
),
|
|
hostOutPath: fileSystem.path.join(
|
|
fileSystem.currentDirectory.path,
|
|
'out',
|
|
'host_debug_unopt',
|
|
),
|
|
);
|
|
|
|
expect(localEngineInfo.localHostName, 'host_debug_unopt');
|
|
},
|
|
overrides: <Type, Generator>{
|
|
FileSystem: () => fileSystem,
|
|
ProcessManager: () => FakeProcessManager.any(),
|
|
},
|
|
);
|
|
});
|
|
}
|