[web] Cleanup everything HTML from the flutter tool and test harness (#162836)
- Delete code paths that handle screenshots for the HTML renderer - Delete artifact enums for the HTML/AUTO renderers (and all their usages). - Remove HTML/AUTO renderers warnings. - Delete the HTML/AUTO renderer enums (and all their usages). - Delete tests for all the above.
This commit is contained in:
parent
4e6e24f729
commit
5fa05ab6df
@ -59,69 +59,37 @@ class MatchesGoldenFile extends AsyncMatcher {
|
||||
return 'matched too many widgets';
|
||||
}
|
||||
final Element element = elements.single;
|
||||
final RenderObject renderObject = _findRepaintBoundary(element);
|
||||
final Size size = renderObject.paintBounds.size;
|
||||
final TestWidgetsFlutterBinding binding = TestWidgetsFlutterBinding.instance;
|
||||
final ui.FlutterView view = binding.platformDispatcher.implicitView!;
|
||||
final RenderView renderView = binding.renderViews.firstWhere(
|
||||
(RenderView r) => r.flutterView == view,
|
||||
);
|
||||
|
||||
if (isSkiaWeb) {
|
||||
// In CanvasKit and Skwasm, use Layer.toImage to generate the screenshot.
|
||||
final TestWidgetsFlutterBinding binding = TestWidgetsFlutterBinding.instance;
|
||||
return binding.runAsync<String?>(() async {
|
||||
assert(element.renderObject != null);
|
||||
RenderObject renderObject = element.renderObject!;
|
||||
while (!renderObject.isRepaintBoundary) {
|
||||
renderObject = renderObject.parent!;
|
||||
// In CanvasKit and Skwasm, use Layer.toImage to generate the screenshot.
|
||||
final TestWidgetsFlutterBinding binding = TestWidgetsFlutterBinding.instance;
|
||||
return binding.runAsync<String?>(() async {
|
||||
assert(element.renderObject != null);
|
||||
RenderObject renderObject = element.renderObject!;
|
||||
while (!renderObject.isRepaintBoundary) {
|
||||
renderObject = renderObject.parent!;
|
||||
}
|
||||
assert(!renderObject.debugNeedsPaint);
|
||||
final OffsetLayer layer = renderObject.debugLayer! as OffsetLayer;
|
||||
final ui.Image image = await layer.toImage(renderObject.paintBounds);
|
||||
try {
|
||||
final ByteData? bytes = await image.toByteData(format: ui.ImageByteFormat.png);
|
||||
if (bytes == null) {
|
||||
return 'could not encode screenshot.';
|
||||
}
|
||||
assert(!renderObject.debugNeedsPaint);
|
||||
final OffsetLayer layer = renderObject.debugLayer! as OffsetLayer;
|
||||
final ui.Image image = await layer.toImage(renderObject.paintBounds);
|
||||
try {
|
||||
final ByteData? bytes = await image.toByteData(format: ui.ImageByteFormat.png);
|
||||
if (bytes == null) {
|
||||
return 'could not encode screenshot.';
|
||||
}
|
||||
if (autoUpdateGoldenFiles) {
|
||||
await goldenFileComparator.update(key, bytes.buffer.asUint8List());
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
final bool success = await goldenFileComparator.compare(
|
||||
bytes.buffer.asUint8List(),
|
||||
key,
|
||||
);
|
||||
return success ? null : 'does not match';
|
||||
} on TestFailure catch (ex) {
|
||||
return ex.message;
|
||||
}
|
||||
} finally {
|
||||
image.dispose();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
// In the HTML renderer, we don't have the ability to render an element
|
||||
// to an image directly. Instead, we will use `window.render()` to render
|
||||
// only the element being requested, and send a request to the test server
|
||||
// requesting it to take a screenshot through the browser's debug interface.
|
||||
_renderElement(view, renderObject);
|
||||
final String? result = await binding.runAsync<String?>(() async {
|
||||
if (autoUpdateGoldenFiles) {
|
||||
await webGoldenComparator.update(size.width, size.height, key);
|
||||
await goldenFileComparator.update(key, bytes.buffer.asUint8List());
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
final bool success = await webGoldenComparator.compare(size.width, size.height, key);
|
||||
final bool success = await goldenFileComparator.compare(bytes.buffer.asUint8List(), key);
|
||||
return success ? null : 'does not match';
|
||||
} on TestFailure catch (ex) {
|
||||
return ex.message;
|
||||
}
|
||||
});
|
||||
_renderElement(view, renderView);
|
||||
return result;
|
||||
}
|
||||
} finally {
|
||||
image.dispose();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
@ -130,27 +98,3 @@ class MatchesGoldenFile extends AsyncMatcher {
|
||||
return description.add('one widget whose rasterized image matches golden image "$testNameUri"');
|
||||
}
|
||||
}
|
||||
|
||||
RenderObject _findRepaintBoundary(Element element) {
|
||||
assert(element.renderObject != null);
|
||||
RenderObject renderObject = element.renderObject!;
|
||||
while (!renderObject.isRepaintBoundary) {
|
||||
renderObject = renderObject.parent!;
|
||||
}
|
||||
return renderObject;
|
||||
}
|
||||
|
||||
void _renderElement(ui.FlutterView window, RenderObject renderObject) {
|
||||
assert(renderObject.debugLayer != null);
|
||||
final Layer layer = renderObject.debugLayer!;
|
||||
final ui.SceneBuilder sceneBuilder = ui.SceneBuilder();
|
||||
if (layer is OffsetLayer) {
|
||||
sceneBuilder.pushOffset(-layer.offset.dx, -layer.offset.dy);
|
||||
}
|
||||
// ignore: invalid_use_of_visible_for_testing_member, invalid_use_of_protected_member
|
||||
layer.updateSubtreeNeedsAddToScene();
|
||||
// ignore: invalid_use_of_protected_member
|
||||
layer.addToScene(sceneBuilder);
|
||||
sceneBuilder.pop();
|
||||
window.render(sceneBuilder.build());
|
||||
}
|
||||
|
@ -103,21 +103,14 @@ enum HostArtifact {
|
||||
|
||||
/// The precompiled SDKs and sourcemaps for web debug builds with the AMD module system.
|
||||
// TODO(markzipan): delete these when DDC's AMD module system is deprecated, https://github.com/flutter/flutter/issues/142060.
|
||||
webPrecompiledAmdSdk,
|
||||
webPrecompiledAmdSdkSourcemaps,
|
||||
webPrecompiledAmdCanvaskitSdk,
|
||||
webPrecompiledAmdCanvaskitSdkSourcemaps,
|
||||
webPrecompiledAmdCanvaskitAndHtmlSdk,
|
||||
webPrecompiledAmdCanvaskitAndHtmlSdkSourcemaps,
|
||||
|
||||
/// The precompiled SDKs and sourcemaps for web debug builds with the DDC
|
||||
/// library bundle module system.
|
||||
webPrecompiledDdcLibraryBundleSdk,
|
||||
webPrecompiledDdcLibraryBundleSdkSourcemaps,
|
||||
/// library bundle module system. Only SDKs built with sound null-safety are
|
||||
/// provided here.
|
||||
webPrecompiledDdcLibraryBundleCanvaskitSdk,
|
||||
webPrecompiledDdcLibraryBundleCanvaskitSdkSourcemaps,
|
||||
webPrecompiledDdcLibraryBundleCanvaskitAndHtmlSdk,
|
||||
webPrecompiledDdcLibraryBundleCanvaskitAndHtmlSdkSourcemaps,
|
||||
|
||||
iosDeploy,
|
||||
idevicesyslog,
|
||||
@ -263,19 +256,11 @@ String _hostArtifactToFileName(HostArtifact artifact, Platform platform) {
|
||||
return 'dart2js_platform.dill';
|
||||
case HostArtifact.flutterWebLibrariesJson:
|
||||
return 'libraries.json';
|
||||
case HostArtifact.webPrecompiledAmdSdk:
|
||||
case HostArtifact.webPrecompiledAmdCanvaskitSdk:
|
||||
case HostArtifact.webPrecompiledAmdCanvaskitAndHtmlSdk:
|
||||
case HostArtifact.webPrecompiledDdcLibraryBundleSdk:
|
||||
case HostArtifact.webPrecompiledDdcLibraryBundleCanvaskitSdk:
|
||||
case HostArtifact.webPrecompiledDdcLibraryBundleCanvaskitAndHtmlSdk:
|
||||
return 'dart_sdk.js';
|
||||
case HostArtifact.webPrecompiledAmdSdkSourcemaps:
|
||||
case HostArtifact.webPrecompiledAmdCanvaskitSdkSourcemaps:
|
||||
case HostArtifact.webPrecompiledAmdCanvaskitAndHtmlSdkSourcemaps:
|
||||
case HostArtifact.webPrecompiledDdcLibraryBundleSdkSourcemaps:
|
||||
case HostArtifact.webPrecompiledDdcLibraryBundleCanvaskitSdkSourcemaps:
|
||||
case HostArtifact.webPrecompiledDdcLibraryBundleCanvaskitAndHtmlSdkSourcemaps:
|
||||
return 'dart_sdk.js.map';
|
||||
case HostArtifact.impellerc:
|
||||
return 'impellerc$exe';
|
||||
@ -459,15 +444,6 @@ class CachedArtifacts implements Artifacts {
|
||||
_hostArtifactToFileName(artifact, _platform),
|
||||
);
|
||||
return _fileSystem.file(path);
|
||||
case HostArtifact.webPrecompiledAmdSdk:
|
||||
case HostArtifact.webPrecompiledAmdSdkSourcemaps:
|
||||
final String path = _fileSystem.path.join(
|
||||
_getFlutterWebSdkPath(),
|
||||
'kernel',
|
||||
'amd',
|
||||
_hostArtifactToFileName(artifact, _platform),
|
||||
);
|
||||
return _fileSystem.file(path);
|
||||
case HostArtifact.webPrecompiledAmdCanvaskitSdk:
|
||||
case HostArtifact.webPrecompiledAmdCanvaskitSdkSourcemaps:
|
||||
final String path = _fileSystem.path.join(
|
||||
@ -477,24 +453,6 @@ class CachedArtifacts implements Artifacts {
|
||||
_hostArtifactToFileName(artifact, _platform),
|
||||
);
|
||||
return _fileSystem.file(path);
|
||||
case HostArtifact.webPrecompiledAmdCanvaskitAndHtmlSdk:
|
||||
case HostArtifact.webPrecompiledAmdCanvaskitAndHtmlSdkSourcemaps:
|
||||
final String path = _fileSystem.path.join(
|
||||
_getFlutterWebSdkPath(),
|
||||
'kernel',
|
||||
'amd-canvaskit-html',
|
||||
_hostArtifactToFileName(artifact, _platform),
|
||||
);
|
||||
return _fileSystem.file(path);
|
||||
case HostArtifact.webPrecompiledDdcLibraryBundleSdk:
|
||||
case HostArtifact.webPrecompiledDdcLibraryBundleSdkSourcemaps:
|
||||
final String path = _fileSystem.path.join(
|
||||
_getFlutterWebSdkPath(),
|
||||
'kernel',
|
||||
'ddcLibraryBundle',
|
||||
_hostArtifactToFileName(artifact, _platform),
|
||||
);
|
||||
return _fileSystem.file(path);
|
||||
case HostArtifact.webPrecompiledDdcLibraryBundleCanvaskitSdk:
|
||||
case HostArtifact.webPrecompiledDdcLibraryBundleCanvaskitSdkSourcemaps:
|
||||
final String path = _fileSystem.path.join(
|
||||
@ -504,15 +462,6 @@ class CachedArtifacts implements Artifacts {
|
||||
_hostArtifactToFileName(artifact, _platform),
|
||||
);
|
||||
return _fileSystem.file(path);
|
||||
case HostArtifact.webPrecompiledDdcLibraryBundleCanvaskitAndHtmlSdk:
|
||||
case HostArtifact.webPrecompiledDdcLibraryBundleCanvaskitAndHtmlSdkSourcemaps:
|
||||
final String path = _fileSystem.path.join(
|
||||
_getFlutterWebSdkPath(),
|
||||
'kernel',
|
||||
'ddcLibraryBundle-canvaskit-html',
|
||||
_hostArtifactToFileName(artifact, _platform),
|
||||
);
|
||||
return _fileSystem.file(path);
|
||||
case HostArtifact.idevicesyslog:
|
||||
case HostArtifact.idevicescreenshot:
|
||||
final String artifactFileName = _hostArtifactToFileName(artifact, _platform);
|
||||
@ -1162,15 +1111,6 @@ class CachedLocalEngineArtifacts implements Artifacts {
|
||||
_hostArtifactToFileName(artifact, _platform),
|
||||
);
|
||||
return _fileSystem.file(path);
|
||||
case HostArtifact.webPrecompiledAmdSdk:
|
||||
case HostArtifact.webPrecompiledAmdSdkSourcemaps:
|
||||
final String path = _fileSystem.path.join(
|
||||
_getFlutterWebSdkPath(),
|
||||
'kernel',
|
||||
'amd',
|
||||
_hostArtifactToFileName(artifact, _platform),
|
||||
);
|
||||
return _fileSystem.file(path);
|
||||
case HostArtifact.webPrecompiledAmdCanvaskitSdk:
|
||||
case HostArtifact.webPrecompiledAmdCanvaskitSdkSourcemaps:
|
||||
final String path = _fileSystem.path.join(
|
||||
@ -1180,24 +1120,6 @@ class CachedLocalEngineArtifacts implements Artifacts {
|
||||
_hostArtifactToFileName(artifact, _platform),
|
||||
);
|
||||
return _fileSystem.file(path);
|
||||
case HostArtifact.webPrecompiledAmdCanvaskitAndHtmlSdk:
|
||||
case HostArtifact.webPrecompiledAmdCanvaskitAndHtmlSdkSourcemaps:
|
||||
final String path = _fileSystem.path.join(
|
||||
_getFlutterWebSdkPath(),
|
||||
'kernel',
|
||||
'amd-canvaskit-html',
|
||||
_hostArtifactToFileName(artifact, _platform),
|
||||
);
|
||||
return _fileSystem.file(path);
|
||||
case HostArtifact.webPrecompiledDdcLibraryBundleSdk:
|
||||
case HostArtifact.webPrecompiledDdcLibraryBundleSdkSourcemaps:
|
||||
final String path = _fileSystem.path.join(
|
||||
_getFlutterWebSdkPath(),
|
||||
'kernel',
|
||||
'ddcLibraryBundle',
|
||||
_hostArtifactToFileName(artifact, _platform),
|
||||
);
|
||||
return _fileSystem.file(path);
|
||||
case HostArtifact.webPrecompiledDdcLibraryBundleCanvaskitSdk:
|
||||
case HostArtifact.webPrecompiledDdcLibraryBundleCanvaskitSdkSourcemaps:
|
||||
final String path = _fileSystem.path.join(
|
||||
@ -1207,15 +1129,6 @@ class CachedLocalEngineArtifacts implements Artifacts {
|
||||
_hostArtifactToFileName(artifact, _platform),
|
||||
);
|
||||
return _fileSystem.file(path);
|
||||
case HostArtifact.webPrecompiledDdcLibraryBundleCanvaskitAndHtmlSdk:
|
||||
case HostArtifact.webPrecompiledDdcLibraryBundleCanvaskitAndHtmlSdkSourcemaps:
|
||||
final String path = _fileSystem.path.join(
|
||||
_getFlutterWebSdkPath(),
|
||||
'kernel',
|
||||
'ddcLibraryBundle-canvaskit-html',
|
||||
_hostArtifactToFileName(artifact, _platform),
|
||||
);
|
||||
return _fileSystem.file(path);
|
||||
case HostArtifact.idevicesyslog:
|
||||
case HostArtifact.idevicescreenshot:
|
||||
final String artifactFileName = _hostArtifactToFileName(artifact, _platform);
|
||||
@ -1569,15 +1482,6 @@ class CachedLocalWebSdkArtifacts implements Artifacts {
|
||||
_hostArtifactToFileName(artifact, _platform),
|
||||
);
|
||||
return _fileSystem.file(path);
|
||||
case HostArtifact.webPrecompiledAmdSdk:
|
||||
case HostArtifact.webPrecompiledAmdSdkSourcemaps:
|
||||
final String path = _fileSystem.path.join(
|
||||
_getFlutterWebSdkPath(),
|
||||
'kernel',
|
||||
'amd',
|
||||
_hostArtifactToFileName(artifact, _platform),
|
||||
);
|
||||
return _fileSystem.file(path);
|
||||
case HostArtifact.webPrecompiledAmdCanvaskitSdk:
|
||||
case HostArtifact.webPrecompiledAmdCanvaskitSdkSourcemaps:
|
||||
final String path = _fileSystem.path.join(
|
||||
@ -1587,24 +1491,6 @@ class CachedLocalWebSdkArtifacts implements Artifacts {
|
||||
_hostArtifactToFileName(artifact, _platform),
|
||||
);
|
||||
return _fileSystem.file(path);
|
||||
case HostArtifact.webPrecompiledAmdCanvaskitAndHtmlSdk:
|
||||
case HostArtifact.webPrecompiledAmdCanvaskitAndHtmlSdkSourcemaps:
|
||||
final String path = _fileSystem.path.join(
|
||||
_getFlutterWebSdkPath(),
|
||||
'kernel',
|
||||
'amd-canvaskit-html',
|
||||
_hostArtifactToFileName(artifact, _platform),
|
||||
);
|
||||
return _fileSystem.file(path);
|
||||
case HostArtifact.webPrecompiledDdcLibraryBundleSdk:
|
||||
case HostArtifact.webPrecompiledDdcLibraryBundleSdkSourcemaps:
|
||||
final String path = _fileSystem.path.join(
|
||||
_getFlutterWebSdkPath(),
|
||||
'kernel',
|
||||
'ddcLibraryBundle',
|
||||
_hostArtifactToFileName(artifact, _platform),
|
||||
);
|
||||
return _fileSystem.file(path);
|
||||
case HostArtifact.webPrecompiledDdcLibraryBundleCanvaskitSdk:
|
||||
case HostArtifact.webPrecompiledDdcLibraryBundleCanvaskitSdkSourcemaps:
|
||||
final String path = _fileSystem.path.join(
|
||||
@ -1614,15 +1500,6 @@ class CachedLocalWebSdkArtifacts implements Artifacts {
|
||||
_hostArtifactToFileName(artifact, _platform),
|
||||
);
|
||||
return _fileSystem.file(path);
|
||||
case HostArtifact.webPrecompiledDdcLibraryBundleCanvaskitAndHtmlSdk:
|
||||
case HostArtifact.webPrecompiledDdcLibraryBundleCanvaskitAndHtmlSdkSourcemaps:
|
||||
final String path = _fileSystem.path.join(
|
||||
_getFlutterWebSdkPath(),
|
||||
'kernel',
|
||||
'ddcLibraryBundle-canvaskit-html',
|
||||
_hostArtifactToFileName(artifact, _platform),
|
||||
);
|
||||
return _fileSystem.file(path);
|
||||
case HostArtifact.iosDeploy:
|
||||
case HostArtifact.idevicesyslog:
|
||||
case HostArtifact.idevicescreenshot:
|
||||
|
@ -169,9 +169,6 @@ class BuildWebCommand extends BuildSubCommand {
|
||||
final bool sourceMaps = boolArg('source-maps');
|
||||
|
||||
final List<WebCompilerConfig> compilerConfigs;
|
||||
if (webRenderer.isDeprecated) {
|
||||
globals.logger.printWarning(webRenderer.deprecationWarning);
|
||||
}
|
||||
|
||||
if (useWasm) {
|
||||
if (webRenderer != WebRendererMode.getDefault(useWasm: true)) {
|
||||
|
@ -672,10 +672,6 @@ class RunCommand extends RunCommandBase {
|
||||
throwToolExit('--wasm is only supported on the web platform');
|
||||
}
|
||||
|
||||
if (webRenderer.isDeprecated) {
|
||||
globals.logger.printWarning(webRenderer.deprecationWarning);
|
||||
}
|
||||
|
||||
if (webRenderer == WebRendererMode.skwasm && !useWasm) {
|
||||
throwToolExit('Skwasm renderer requires --wasm');
|
||||
}
|
||||
|
@ -592,10 +592,6 @@ class TestCommand extends FlutterCommand with DeviceBasedDevelopmentArtifacts {
|
||||
throwToolExit('Skwasm renderer requires --wasm');
|
||||
}
|
||||
|
||||
if (webRenderer.isDeprecated) {
|
||||
globals.logger.printWarning(webRenderer.deprecationWarning);
|
||||
}
|
||||
|
||||
Device? integrationTestDevice;
|
||||
if (_isIntegrationTest) {
|
||||
integrationTestDevice = await findTargetDevice();
|
||||
|
@ -17,7 +17,6 @@ import 'package:shelf_web_socket/shelf_web_socket.dart';
|
||||
import 'package:stream_channel/stream_channel.dart';
|
||||
import 'package:test_core/src/platform.dart'; // ignore: implementation_imports
|
||||
import 'package:web_socket_channel/web_socket_channel.dart';
|
||||
import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart' hide StackTrace;
|
||||
|
||||
import '../artifacts.dart';
|
||||
import '../base/common.dart';
|
||||
@ -451,49 +450,12 @@ class FlutterWebPlatform extends PlatformPlugin {
|
||||
json.decode(await request.readAsString()) as Map<String, Object?>;
|
||||
final Uri goldenKey = Uri.parse(body['key']! as String);
|
||||
final Uri testUri = Uri.parse(body['testUri']! as String);
|
||||
final num? width = body['width'] as num?;
|
||||
final num? height = body['height'] as num?;
|
||||
Uint8List bytes;
|
||||
|
||||
if (body.containsKey('bytes')) {
|
||||
bytes = base64.decode(body['bytes']! as String);
|
||||
} else {
|
||||
// TODO(hterkelsen): Do not use browser screenshots for testing on the
|
||||
// web once we transition off the HTML renderer. See:
|
||||
// https://github.com/flutter/flutter/issues/135700
|
||||
try {
|
||||
final ChromeTab chromeTab =
|
||||
(await getChromeTabGuarded(_browserManager!._browser.chromeConnection, (
|
||||
ChromeTab tab,
|
||||
) {
|
||||
return tab.url.contains(_browserManager!._browser.url!);
|
||||
}))!;
|
||||
final WipConnection connection = await chromeTab.connect();
|
||||
final WipResponse response = await connection.sendCommand(
|
||||
'Page.captureScreenshot',
|
||||
<String, Object>{
|
||||
// Clip the screenshot to include only the element.
|
||||
// Prior to taking a screenshot, we are calling `window.render()` in
|
||||
// `_matchers_web.dart` to only render the element on screen. That
|
||||
// will make sure that the element will always be displayed on the
|
||||
// origin of the screen.
|
||||
'clip': <String, Object>{
|
||||
'x': 0.0,
|
||||
'y': 0.0,
|
||||
'width': width!.toDouble(),
|
||||
'height': height!.toDouble(),
|
||||
'scale': 1.0,
|
||||
},
|
||||
},
|
||||
);
|
||||
bytes = base64.decode(response.result!['data'] as String);
|
||||
} on WipError catch (ex) {
|
||||
_logger.printError('Caught WIPError: $ex');
|
||||
return shelf.Response.ok('WIP error: $ex');
|
||||
} on FormatException catch (ex) {
|
||||
_logger.printError('Caught FormatException: $ex');
|
||||
return shelf.Response.ok('Caught exception: $ex');
|
||||
}
|
||||
return shelf.Response.ok('Request must contain bytes in the body.');
|
||||
}
|
||||
if (updateGoldens) {
|
||||
return switch (await _testGoldenComparator.update(testUri, bytes, goldenKey)) {
|
||||
|
@ -160,30 +160,19 @@ class WebBuilder {
|
||||
|
||||
/// Web rendering backend mode.
|
||||
enum WebRendererMode {
|
||||
/// Auto detects which rendering backend to use.
|
||||
auto,
|
||||
|
||||
/// Always uses canvaskit.
|
||||
canvaskit,
|
||||
|
||||
/// Always uses html.
|
||||
html,
|
||||
|
||||
/// Always use skwasm.
|
||||
skwasm;
|
||||
|
||||
factory WebRendererMode.fromDartDefines(Iterable<String> defines, {required bool useWasm}) {
|
||||
if (defines.contains('FLUTTER_WEB_AUTO_DETECT=true')) {
|
||||
return auto;
|
||||
} else if (defines.contains('FLUTTER_WEB_USE_SKIA=false') &&
|
||||
if (defines.contains('FLUTTER_WEB_USE_SKIA=false') &&
|
||||
defines.contains('FLUTTER_WEB_USE_SKWASM=true')) {
|
||||
return skwasm;
|
||||
} else if (defines.contains('FLUTTER_WEB_USE_SKIA=true') &&
|
||||
defines.contains('FLUTTER_WEB_USE_SKWASM=false')) {
|
||||
return canvaskit;
|
||||
} else if (defines.contains('FLUTTER_WEB_USE_SKIA=false') &&
|
||||
defines.contains('FLUTTER_WEB_USE_SKWASM=false')) {
|
||||
return html; // The horror!
|
||||
}
|
||||
return getDefault(useWasm: useWasm);
|
||||
}
|
||||
@ -195,30 +184,6 @@ enum WebRendererMode {
|
||||
static const WebRendererMode defaultForJs = WebRendererMode.canvaskit;
|
||||
static const WebRendererMode defaultForWasm = WebRendererMode.skwasm;
|
||||
|
||||
/// Returns whether the WebRendererMode is considered deprecated or not.
|
||||
///
|
||||
/// Deprecated modes: auto, html.
|
||||
bool get isDeprecated => switch (this) {
|
||||
auto => true,
|
||||
canvaskit => false,
|
||||
html => true,
|
||||
skwasm => false,
|
||||
};
|
||||
|
||||
/// Returns a consistent deprecation warning for the WebRendererMode.
|
||||
String get deprecationWarning =>
|
||||
'The HTML Renderer is deprecated and will be removed. Please, stop using it.'
|
||||
'\nSee: https://docs.flutter.dev/to/web-html-renderer-deprecation';
|
||||
|
||||
String get helpText => switch (this) {
|
||||
auto => 'Use the HTML renderer on mobile devices, and CanvasKit on desktop devices.',
|
||||
canvaskit =>
|
||||
'Always use the CanvasKit renderer. This renderer uses WebGL and WebAssembly to render graphics.',
|
||||
html =>
|
||||
'Always use the HTML renderer. This renderer uses a combination of HTML, CSS, SVG, 2D Canvas, and WebGL.',
|
||||
skwasm => 'Always use the experimental skwasm renderer.',
|
||||
};
|
||||
|
||||
/// Returns [dartDefines] in a way usable from the CLI.
|
||||
///
|
||||
/// This is used to start integration tests.
|
||||
@ -226,9 +191,7 @@ enum WebRendererMode {
|
||||
dartDefines.map((String define) => '--dart-define=$define');
|
||||
|
||||
Iterable<String> get dartDefines => switch (this) {
|
||||
auto => const <String>{'FLUTTER_WEB_AUTO_DETECT=true'},
|
||||
canvaskit => const <String>{'FLUTTER_WEB_USE_SKIA=true', 'FLUTTER_WEB_USE_SKWASM=false'},
|
||||
html => const <String>{'FLUTTER_WEB_USE_SKIA=false', 'FLUTTER_WEB_USE_SKWASM=false'},
|
||||
skwasm => const <String>{'FLUTTER_WEB_USE_SKIA=false', 'FLUTTER_WEB_USE_SKWASM=true'},
|
||||
};
|
||||
|
||||
@ -238,9 +201,7 @@ enum WebRendererMode {
|
||||
|
||||
dartDefinesSet
|
||||
..removeWhere((String d) {
|
||||
return d.startsWith('FLUTTER_WEB_AUTO_DETECT=') ||
|
||||
d.startsWith('FLUTTER_WEB_USE_SKIA=') ||
|
||||
d.startsWith('FLUTTER_WEB_USE_SKWASM=');
|
||||
return d.startsWith('FLUTTER_WEB_USE_SKIA=') || d.startsWith('FLUTTER_WEB_USE_SKWASM=');
|
||||
})
|
||||
..addAll(dartDefines);
|
||||
|
||||
@ -251,37 +212,28 @@ enum WebRendererMode {
|
||||
/// The correct precompiled artifact to use for each build and render mode for DDC with AMD modules.
|
||||
// TODO(markzipan): delete this when DDC's AMD module system is deprecated, https://github.com/flutter/flutter/issues/142060.
|
||||
const Map<WebRendererMode, HostArtifact> kAmdDartSdkJsArtifactMap = <WebRendererMode, HostArtifact>{
|
||||
WebRendererMode.auto: HostArtifact.webPrecompiledAmdCanvaskitAndHtmlSdk,
|
||||
WebRendererMode.canvaskit: HostArtifact.webPrecompiledAmdCanvaskitSdk,
|
||||
WebRendererMode.html: HostArtifact.webPrecompiledAmdSdk,
|
||||
};
|
||||
|
||||
/// The correct source map artifact to use for each build and render mode for DDC with AMD modules.
|
||||
// TODO(markzipan): delete this when DDC's AMD module system is deprecated, https://github.com/flutter/flutter/issues/142060.
|
||||
const Map<WebRendererMode, HostArtifact> kAmdDartSdkJsMapArtifactMap =
|
||||
<WebRendererMode, HostArtifact>{
|
||||
WebRendererMode.auto: HostArtifact.webPrecompiledAmdCanvaskitAndHtmlSdkSourcemaps,
|
||||
WebRendererMode.canvaskit: HostArtifact.webPrecompiledAmdCanvaskitSdkSourcemaps,
|
||||
WebRendererMode.html: HostArtifact.webPrecompiledAmdSdkSourcemaps,
|
||||
};
|
||||
|
||||
/// The correct precompiled artifact to use for each build and render mode for
|
||||
/// DDC with DDC library bundle module format.
|
||||
const Map<WebRendererMode, HostArtifact> kDdcLibraryBundleDartSdkJsArtifactMap =
|
||||
<WebRendererMode, HostArtifact>{
|
||||
WebRendererMode.auto: HostArtifact.webPrecompiledDdcLibraryBundleCanvaskitAndHtmlSdk,
|
||||
WebRendererMode.canvaskit: HostArtifact.webPrecompiledDdcLibraryBundleCanvaskitSdk,
|
||||
WebRendererMode.html: HostArtifact.webPrecompiledDdcLibraryBundleSdk,
|
||||
};
|
||||
|
||||
/// The correct source map artifact to use for each build and render mode for
|
||||
/// DDC with DDC library bundle module format.
|
||||
const Map<WebRendererMode, HostArtifact> kDdcLibraryBundleDartSdkJsMapArtifactMap =
|
||||
<WebRendererMode, HostArtifact>{
|
||||
WebRendererMode.auto:
|
||||
HostArtifact.webPrecompiledDdcLibraryBundleCanvaskitAndHtmlSdkSourcemaps,
|
||||
WebRendererMode.canvaskit: HostArtifact.webPrecompiledDdcLibraryBundleCanvaskitSdkSourcemaps,
|
||||
WebRendererMode.html: HostArtifact.webPrecompiledDdcLibraryBundleSdkSourcemaps,
|
||||
};
|
||||
|
||||
String _buildEventAnalyticsSettings({required List<WebCompilerConfig> configs}) {
|
||||
|
@ -4,7 +4,6 @@
|
||||
|
||||
import 'package:args/command_runner.dart';
|
||||
import 'package:file/memory.dart';
|
||||
import 'package:flutter_tools/src/base/common.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';
|
||||
@ -14,14 +13,12 @@ import 'package:flutter_tools/src/build_system/targets/web.dart';
|
||||
import 'package:flutter_tools/src/cache.dart';
|
||||
import 'package:flutter_tools/src/commands/build.dart';
|
||||
import 'package:flutter_tools/src/commands/build_web.dart';
|
||||
import 'package:flutter_tools/src/dart/pub.dart';
|
||||
import 'package:flutter_tools/src/features.dart';
|
||||
import 'package:flutter_tools/src/runner/flutter_command.dart';
|
||||
import 'package:flutter_tools/src/web/compile.dart';
|
||||
|
||||
import '../../src/common.dart';
|
||||
import '../../src/context.dart';
|
||||
import '../../src/fake_pub_deps.dart';
|
||||
import '../../src/fakes.dart';
|
||||
import '../../src/test_build_system.dart';
|
||||
import '../../src/test_flutter_command_runner.dart';
|
||||
@ -32,16 +29,6 @@ void main() {
|
||||
late BufferLogger logger;
|
||||
late ProcessManager processManager;
|
||||
|
||||
// TODO(matanlurey): Remove after `explicit-package-dependencies` is enabled by default.
|
||||
// See https://github.com/flutter/flutter/issues/160257 for details.
|
||||
FeatureFlags enableExplicitPackageDependencies() {
|
||||
return TestFeatureFlags(
|
||||
isExplicitPackageDependenciesEnabled: true,
|
||||
// Assumed to be true below.
|
||||
isWebEnabled: true,
|
||||
);
|
||||
}
|
||||
|
||||
setUpAll(() {
|
||||
Cache.flutterRoot = '';
|
||||
Cache.disableLocking();
|
||||
@ -459,42 +446,6 @@ void main() {
|
||||
},
|
||||
);
|
||||
|
||||
// Tests whether using a deprecated webRenderer toggles a warningText.
|
||||
Future<void> testWebRendererDeprecationMessage(WebRendererMode webRenderer) async {
|
||||
testUsingContext(
|
||||
'Using the "${webRenderer.name}" renderer triggers a warningText.',
|
||||
() async {
|
||||
// Run the command so it parses the renderer, but ignore all errors.
|
||||
// We only care about the logger.
|
||||
try {
|
||||
final TestWebBuildCommand buildCommand = TestWebBuildCommand(fileSystem: fileSystem);
|
||||
await createTestCommandRunner(
|
||||
buildCommand,
|
||||
).run(<String>['build', 'web', '--no-pub', ...webRenderer.toCliDartDefines]);
|
||||
} on ToolExit catch (error) {
|
||||
expect(error, isA<ToolExit>());
|
||||
}
|
||||
expect(
|
||||
logger.warningText,
|
||||
contains('See: https://docs.flutter.dev/to/web-html-renderer-deprecation'),
|
||||
);
|
||||
},
|
||||
overrides: <Type, Generator>{
|
||||
Platform: () => fakePlatform,
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => processManager,
|
||||
Logger: () => logger,
|
||||
FeatureFlags: enableExplicitPackageDependencies,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/// Do test all the deprecated WebRendererModes
|
||||
WebRendererMode.values
|
||||
.where((WebRendererMode mode) => mode.isDeprecated)
|
||||
.forEach(testWebRendererDeprecationMessage);
|
||||
|
||||
testUsingContext(
|
||||
'flutter build web option visibility',
|
||||
() async {
|
||||
|
@ -53,12 +53,8 @@ void main() {
|
||||
tempDir = fileSystem.systemTempDirectory.createTempSync('flutter_web_platform_test.');
|
||||
|
||||
for (final HostArtifact artifact in <HostArtifact>[
|
||||
HostArtifact.webPrecompiledAmdCanvaskitAndHtmlSdk,
|
||||
HostArtifact.webPrecompiledAmdCanvaskitSdk,
|
||||
HostArtifact.webPrecompiledAmdSdk,
|
||||
HostArtifact.webPrecompiledDdcLibraryBundleCanvaskitAndHtmlSdk,
|
||||
HostArtifact.webPrecompiledDdcLibraryBundleCanvaskitSdk,
|
||||
HostArtifact.webPrecompiledDdcLibraryBundleSdk,
|
||||
]) {
|
||||
final File artifactFile = artifacts.getHostArtifact(artifact) as File;
|
||||
artifactFile.createSync();
|
||||
|
@ -1107,39 +1107,6 @@ void main() {
|
||||
},
|
||||
);
|
||||
|
||||
// Tests whether using a deprecated webRenderer toggles a warningText.
|
||||
Future<void> testWebRendererDeprecationMessage(WebRendererMode webRenderer) async {
|
||||
testUsingContext(
|
||||
'Using the "${webRenderer.name}" renderer triggers a warningText.',
|
||||
() async {
|
||||
// Run the command so it parses the renderer, but ignore all errors.
|
||||
// We only care about the logger.
|
||||
try {
|
||||
await createTestCommandRunner(
|
||||
RunCommand(),
|
||||
).run(<String>['run', '--no-pub', ...webRenderer.toCliDartDefines]);
|
||||
} on ToolExit catch (error) {
|
||||
expect(error, isA<ToolExit>());
|
||||
}
|
||||
expect(
|
||||
logger.warningText,
|
||||
contains('See: https://docs.flutter.dev/to/web-html-renderer-deprecation'),
|
||||
);
|
||||
},
|
||||
overrides: <Type, Generator>{
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
Logger: () => logger,
|
||||
DeviceManager: () => testDeviceManager,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/// Do test all the deprecated WebRendererModes
|
||||
WebRendererMode.values
|
||||
.where((WebRendererMode mode) => mode.isDeprecated)
|
||||
.forEach(testWebRendererDeprecationMessage);
|
||||
|
||||
testUsingContext(
|
||||
'accepts headers with commas in them',
|
||||
() async {
|
||||
|
@ -1525,45 +1525,6 @@ dev_dependencies:
|
||||
);
|
||||
});
|
||||
|
||||
// Tests whether using a deprecated webRenderer toggles a warningText.
|
||||
Future<void> testWebRendererDeprecationMessage(WebRendererMode webRenderer) async {
|
||||
testUsingContext(
|
||||
'Using the "${webRenderer.name}" renderer triggers a warningText.',
|
||||
() async {
|
||||
// Run the command so it parses the renderer, but ignore all errors.
|
||||
// We only care about the logger.
|
||||
try {
|
||||
final FakeFlutterTestRunner testRunner = FakeFlutterTestRunner(0);
|
||||
|
||||
final TestCommand testCommand = TestCommand(testRunner: testRunner);
|
||||
await createTestCommandRunner(testCommand).run(<String>[
|
||||
'test',
|
||||
'web',
|
||||
'--no-pub',
|
||||
'--platform=chrome',
|
||||
...webRenderer.toCliDartDefines,
|
||||
]);
|
||||
} on ToolExit catch (error) {
|
||||
expect(error, isA<ToolExit>());
|
||||
}
|
||||
expect(
|
||||
logger.warningText,
|
||||
contains('See: https://docs.flutter.dev/to/web-html-renderer-deprecation'),
|
||||
);
|
||||
},
|
||||
overrides: <Type, Generator>{
|
||||
FileSystem: () => fs,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
Logger: () => logger,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/// Do test all the deprecated WebRendererModes
|
||||
WebRendererMode.values
|
||||
.where((WebRendererMode mode) => mode.isDeprecated)
|
||||
.forEach(testWebRendererDeprecationMessage);
|
||||
|
||||
testUsingContext(
|
||||
'Can test in a pub workspace',
|
||||
() async {
|
||||
|
@ -236,14 +236,6 @@ void main() {
|
||||
);
|
||||
|
||||
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',
|
||||
@ -257,14 +249,6 @@ void main() {
|
||||
testWithoutContext(
|
||||
'Precompiled web DDC library bundle module system artifact paths are correct',
|
||||
() {
|
||||
expect(
|
||||
artifacts.getHostArtifact(HostArtifact.webPrecompiledDdcLibraryBundleSdk).path,
|
||||
'root/bin/cache/flutter_web_sdk/kernel/ddcLibraryBundle/dart_sdk.js',
|
||||
);
|
||||
expect(
|
||||
artifacts.getHostArtifact(HostArtifact.webPrecompiledDdcLibraryBundleSdkSourcemaps).path,
|
||||
'root/bin/cache/flutter_web_sdk/kernel/ddcLibraryBundle/dart_sdk.js.map',
|
||||
);
|
||||
expect(
|
||||
artifacts.getHostArtifact(HostArtifact.webPrecompiledDdcLibraryBundleCanvaskitSdk).path,
|
||||
'root/bin/cache/flutter_web_sdk/kernel/ddcLibraryBundle-canvaskit/dart_sdk.js',
|
||||
|
@ -13,39 +13,17 @@ void main() {
|
||||
dartDefines = <String>[];
|
||||
});
|
||||
|
||||
test('auto web-renderer with no dart-defines', () {
|
||||
dartDefines = WebRendererMode.auto.updateDartDefines(dartDefines);
|
||||
expect(dartDefines, <String>['FLUTTER_WEB_AUTO_DETECT=true']);
|
||||
});
|
||||
|
||||
test('canvaskit web-renderer with no dart-defines', () {
|
||||
dartDefines = WebRendererMode.canvaskit.updateDartDefines(dartDefines);
|
||||
expect(dartDefines, <String>['FLUTTER_WEB_USE_SKIA=true', 'FLUTTER_WEB_USE_SKWASM=false']);
|
||||
});
|
||||
|
||||
test('html web-renderer with no dart-defines', () {
|
||||
dartDefines = WebRendererMode.html.updateDartDefines(dartDefines);
|
||||
expect(dartDefines, <String>['FLUTTER_WEB_USE_SKIA=false', 'FLUTTER_WEB_USE_SKWASM=false']);
|
||||
});
|
||||
|
||||
test('auto web-renderer with existing dart-defines', () {
|
||||
dartDefines = <String>['FLUTTER_WEB_USE_SKIA=false'];
|
||||
dartDefines = WebRendererMode.auto.updateDartDefines(dartDefines);
|
||||
expect(dartDefines, <String>['FLUTTER_WEB_AUTO_DETECT=true']);
|
||||
});
|
||||
|
||||
test('canvaskit web-renderer with existing dart-defines', () {
|
||||
dartDefines = <String>['FLUTTER_WEB_USE_SKIA=false'];
|
||||
dartDefines = WebRendererMode.canvaskit.updateDartDefines(dartDefines);
|
||||
expect(dartDefines, <String>['FLUTTER_WEB_USE_SKIA=true', 'FLUTTER_WEB_USE_SKWASM=false']);
|
||||
});
|
||||
|
||||
test('html web-renderer with existing dart-defines', () {
|
||||
dartDefines = <String>['FLUTTER_WEB_USE_SKIA=true'];
|
||||
dartDefines = WebRendererMode.html.updateDartDefines(dartDefines);
|
||||
expect(dartDefines, <String>['FLUTTER_WEB_USE_SKIA=false', 'FLUTTER_WEB_USE_SKWASM=false']);
|
||||
});
|
||||
|
||||
test('skwasm web-renderer with existing dart-defines', () {
|
||||
dartDefines = <String>['FLUTTER_WEB_USE_SKWASM=false'];
|
||||
dartDefines = WebRendererMode.skwasm.updateDartDefines(dartDefines);
|
||||
|
@ -1236,7 +1236,6 @@ void main() {
|
||||
JsCompilerConfig(optimizationLevel: 0),
|
||||
JsCompilerConfig(noFrequencyBasedMinification: true),
|
||||
JsCompilerConfig(sourceMaps: false),
|
||||
JsCompilerConfig(renderer: WebRendererMode.html),
|
||||
|
||||
// All properties non-default
|
||||
JsCompilerConfig(
|
||||
@ -1246,7 +1245,6 @@ void main() {
|
||||
optimizationLevel: 0,
|
||||
noFrequencyBasedMinification: true,
|
||||
sourceMaps: false,
|
||||
renderer: WebRendererMode.html,
|
||||
),
|
||||
];
|
||||
|
||||
|
@ -807,7 +807,7 @@ void main() {
|
||||
chromiumLauncher: null,
|
||||
ddcModuleSystem: usesDdcModuleSystem,
|
||||
canaryFeatures: canaryFeatures,
|
||||
webRenderer: WebRendererMode.html,
|
||||
webRenderer: WebRendererMode.canvaskit,
|
||||
isWasm: false,
|
||||
useLocalCanvasKit: false,
|
||||
rootDirectory: globals.fs.currentDirectory,
|
||||
@ -822,12 +822,6 @@ void main() {
|
||||
globals.fs.currentDirectory.childDirectory('lib').childFile('web_entrypoint.dart')
|
||||
..createSync(recursive: true)
|
||||
..writeAsStringSync('GENERATED');
|
||||
final String webPrecompiledSdk =
|
||||
globals.artifacts!.getHostArtifact(HostArtifact.webPrecompiledDdcLibraryBundleSdk).path;
|
||||
final String webPrecompiledSdkSourcemaps =
|
||||
globals.artifacts!
|
||||
.getHostArtifact(HostArtifact.webPrecompiledDdcLibraryBundleSdkSourcemaps)
|
||||
.path;
|
||||
final String webPrecompiledCanvaskitSdk =
|
||||
globals.artifacts!
|
||||
.getHostArtifact(HostArtifact.webPrecompiledDdcLibraryBundleCanvaskitSdk)
|
||||
@ -836,18 +830,12 @@ void main() {
|
||||
globals.artifacts!
|
||||
.getHostArtifact(HostArtifact.webPrecompiledDdcLibraryBundleCanvaskitSdkSourcemaps)
|
||||
.path;
|
||||
globals.fs.file(webPrecompiledSdk)
|
||||
..createSync(recursive: true)
|
||||
..writeAsStringSync('HELLO');
|
||||
globals.fs.file(webPrecompiledSdkSourcemaps)
|
||||
..createSync(recursive: true)
|
||||
..writeAsStringSync('THERE');
|
||||
globals.fs.file(webPrecompiledCanvaskitSdk)
|
||||
..createSync(recursive: true)
|
||||
..writeAsStringSync('OL');
|
||||
..writeAsStringSync('HELLO');
|
||||
globals.fs.file(webPrecompiledCanvaskitSdkSourcemaps)
|
||||
..createSync(recursive: true)
|
||||
..writeAsStringSync('CHUM');
|
||||
..writeAsStringSync('THERE');
|
||||
|
||||
await webDevFS.update(
|
||||
mainUri: globals.fs.file(globals.fs.path.join('lib', 'main.dart')).uri,
|
||||
@ -872,7 +860,7 @@ void main() {
|
||||
expect(await webDevFS.webAssetServer.dartSourceContents('dart_sdk.js.map'), 'THERE');
|
||||
|
||||
// Update to the SDK.
|
||||
globals.fs.file(webPrecompiledSdk).writeAsStringSync('BELLOW');
|
||||
globals.fs.file(webPrecompiledCanvaskitSdk).writeAsStringSync('BELLOW');
|
||||
|
||||
// New SDK should be visible..
|
||||
expect(await webDevFS.webAssetServer.dartSourceContents('dart_sdk.js'), 'BELLOW');
|
||||
@ -1071,57 +1059,6 @@ void main() {
|
||||
await webDevFS.destroy();
|
||||
});
|
||||
|
||||
runInTestbed('Can start web server with auto detect enabled', () async {
|
||||
final String path = globals.fs.path.join('lib', 'main.dart');
|
||||
final File outputFile = globals.fs.file(path)..createSync(recursive: true);
|
||||
outputFile.parent.childFile('a.sources').writeAsStringSync('');
|
||||
outputFile.parent.childFile('a.json').writeAsStringSync('{}');
|
||||
outputFile.parent.childFile('a.map').writeAsStringSync('{}');
|
||||
|
||||
final WebDevFS webDevFS = WebDevFS(
|
||||
hostname: 'localhost',
|
||||
port: 0,
|
||||
tlsCertPath: null,
|
||||
tlsCertKeyPath: null,
|
||||
packagesFilePath: '.dart_tool/package_config.json',
|
||||
urlTunneller: null,
|
||||
useSseForDebugProxy: true,
|
||||
useSseForDebugBackend: true,
|
||||
useSseForInjectedClient: true,
|
||||
nullAssertions: true,
|
||||
nativeNullAssertions: true,
|
||||
buildInfo: const BuildInfo(
|
||||
BuildMode.debug,
|
||||
'',
|
||||
treeShakeIcons: false,
|
||||
dartDefines: <String>['FLUTTER_WEB_AUTO_DETECT=true'],
|
||||
packageConfigPath: '.dart_tool/package_config.json',
|
||||
),
|
||||
enableDwds: false,
|
||||
enableDds: false,
|
||||
entrypoint: Uri.base,
|
||||
testMode: true,
|
||||
expressionCompiler: null,
|
||||
extraHeaders: const <String, String>{},
|
||||
chromiumLauncher: null,
|
||||
ddcModuleSystem: usesDdcModuleSystem,
|
||||
canaryFeatures: canaryFeatures,
|
||||
webRenderer: WebRendererMode.auto,
|
||||
isWasm: false,
|
||||
useLocalCanvasKit: false,
|
||||
rootDirectory: globals.fs.currentDirectory,
|
||||
isWindows: false,
|
||||
);
|
||||
webDevFS.ddcModuleLoaderJS.createSync(recursive: true);
|
||||
webDevFS.stackTraceMapper.createSync(recursive: true);
|
||||
|
||||
await webDevFS.create();
|
||||
|
||||
expect(webDevFS.webAssetServer.webRenderer, WebRendererMode.auto);
|
||||
|
||||
await webDevFS.destroy();
|
||||
});
|
||||
|
||||
runInTestbed('Can start web server with tls connection', () async {
|
||||
final String dataPath = globals.fs.path.join(
|
||||
getFlutterRoot(),
|
||||
|
@ -927,7 +927,7 @@ void main() {
|
||||
chromiumLauncher: null,
|
||||
ddcModuleSystem: usesDdcModuleSystem,
|
||||
canaryFeatures: canaryFeatures,
|
||||
webRenderer: WebRendererMode.html,
|
||||
webRenderer: WebRendererMode.canvaskit,
|
||||
isWasm: false,
|
||||
useLocalCanvasKit: false,
|
||||
rootDirectory: globals.fs.currentDirectory,
|
||||
@ -939,17 +939,19 @@ void main() {
|
||||
|
||||
final Uri uri = await webDevFS.create();
|
||||
webDevFS.webAssetServer.entrypointCacheDirectory = globals.fs.currentDirectory;
|
||||
final String webPrecompiledSdk =
|
||||
globals.artifacts!.getHostArtifact(HostArtifact.webPrecompiledAmdSdk).path;
|
||||
final String webPrecompiledSdkSourcemaps =
|
||||
globals.artifacts!.getHostArtifact(HostArtifact.webPrecompiledAmdSdkSourcemaps).path;
|
||||
final String webPrecompiledCanvaskitSdk =
|
||||
globals.artifacts!.getHostArtifact(HostArtifact.webPrecompiledAmdCanvaskitSdk).path;
|
||||
final String webPrecompiledCanvaskitSdkSourcemaps =
|
||||
globals.artifacts!
|
||||
.getHostArtifact(HostArtifact.webPrecompiledAmdCanvaskitSdkSourcemaps)
|
||||
.path;
|
||||
globals.fs.currentDirectory.childDirectory('lib').childFile('web_entrypoint.dart')
|
||||
..createSync(recursive: true)
|
||||
..writeAsStringSync('GENERATED');
|
||||
globals.fs.file(webPrecompiledSdk)
|
||||
globals.fs.file(webPrecompiledCanvaskitSdk)
|
||||
..createSync(recursive: true)
|
||||
..writeAsStringSync('HELLO');
|
||||
globals.fs.file(webPrecompiledSdkSourcemaps)
|
||||
globals.fs.file(webPrecompiledCanvaskitSdkSourcemaps)
|
||||
..createSync(recursive: true)
|
||||
..writeAsStringSync('THERE');
|
||||
|
||||
@ -976,7 +978,7 @@ void main() {
|
||||
expect(await webDevFS.webAssetServer.dartSourceContents('dart_sdk.js.map'), 'THERE');
|
||||
|
||||
// Update to the SDK.
|
||||
globals.fs.file(webPrecompiledSdk).writeAsStringSync('BELLOW');
|
||||
globals.fs.file(webPrecompiledCanvaskitSdk).writeAsStringSync('BELLOW');
|
||||
|
||||
// New SDK should be visible..
|
||||
expect(await webDevFS.webAssetServer.dartSourceContents('dart_sdk.js'), 'BELLOW');
|
||||
@ -1034,7 +1036,7 @@ void main() {
|
||||
chromiumLauncher: null,
|
||||
ddcModuleSystem: usesDdcModuleSystem,
|
||||
canaryFeatures: canaryFeatures,
|
||||
webRenderer: WebRendererMode.html,
|
||||
webRenderer: WebRendererMode.canvaskit,
|
||||
isWasm: false,
|
||||
useLocalCanvasKit: false,
|
||||
rootDirectory: globals.fs.currentDirectory,
|
||||
@ -1049,10 +1051,6 @@ void main() {
|
||||
globals.fs.currentDirectory.childDirectory('lib').childFile('web_entrypoint.dart')
|
||||
..createSync(recursive: true)
|
||||
..writeAsStringSync('GENERATED');
|
||||
final String webPrecompiledSdk =
|
||||
globals.artifacts!.getHostArtifact(HostArtifact.webPrecompiledAmdSdk).path;
|
||||
final String webPrecompiledSdkSourcemaps =
|
||||
globals.artifacts!.getHostArtifact(HostArtifact.webPrecompiledAmdSdkSourcemaps).path;
|
||||
final String webPrecompiledCanvaskitSdk =
|
||||
globals.artifacts!.getHostArtifact(HostArtifact.webPrecompiledAmdCanvaskitSdk).path;
|
||||
final String webPrecompiledCanvaskitSdkSourcemaps =
|
||||
@ -1063,18 +1061,12 @@ void main() {
|
||||
globals.artifacts!.getHostArtifact(HostArtifact.flutterJsDirectory).path,
|
||||
'flutter.js',
|
||||
);
|
||||
globals.fs.file(webPrecompiledSdk)
|
||||
..createSync(recursive: true)
|
||||
..writeAsStringSync('HELLO');
|
||||
globals.fs.file(webPrecompiledSdkSourcemaps)
|
||||
..createSync(recursive: true)
|
||||
..writeAsStringSync('THERE');
|
||||
globals.fs.file(webPrecompiledCanvaskitSdk)
|
||||
..createSync(recursive: true)
|
||||
..writeAsStringSync('OL');
|
||||
..writeAsStringSync('HELLO');
|
||||
globals.fs.file(webPrecompiledCanvaskitSdkSourcemaps)
|
||||
..createSync(recursive: true)
|
||||
..writeAsStringSync('CHUM');
|
||||
..writeAsStringSync('THERE');
|
||||
globals.fs.file(flutterJs)
|
||||
..createSync(recursive: true)
|
||||
..writeAsStringSync('(flutter.js content)');
|
||||
@ -1102,7 +1094,7 @@ void main() {
|
||||
expect(await webDevFS.webAssetServer.dartSourceContents('dart_sdk.js.map'), 'THERE');
|
||||
|
||||
// Update to the SDK.
|
||||
globals.fs.file(webPrecompiledSdk).writeAsStringSync('BELLOW');
|
||||
globals.fs.file(webPrecompiledCanvaskitSdk).writeAsStringSync('BELLOW');
|
||||
|
||||
// New SDK should be visible..
|
||||
expect(await webDevFS.webAssetServer.dartSourceContents('dart_sdk.js'), 'BELLOW');
|
||||
@ -1307,60 +1299,6 @@ void main() {
|
||||
}),
|
||||
);
|
||||
|
||||
test(
|
||||
'Can start web server with auto detect enabled',
|
||||
() => testbed.run(() async {
|
||||
final File outputFile = globals.fs.file(globals.fs.path.join('lib', 'main.dart'))
|
||||
..createSync(recursive: true);
|
||||
outputFile.parent.childFile('a.sources').writeAsStringSync('');
|
||||
outputFile.parent.childFile('a.json').writeAsStringSync('{}');
|
||||
outputFile.parent.childFile('a.map').writeAsStringSync('{}');
|
||||
|
||||
final WebDevFS webDevFS = WebDevFS(
|
||||
hostname: 'localhost',
|
||||
port: 0,
|
||||
tlsCertPath: null,
|
||||
tlsCertKeyPath: null,
|
||||
packagesFilePath: '.dart_tool/package_config.json',
|
||||
urlTunneller: null,
|
||||
useSseForDebugProxy: true,
|
||||
useSseForDebugBackend: true,
|
||||
useSseForInjectedClient: true,
|
||||
nullAssertions: true,
|
||||
nativeNullAssertions: true,
|
||||
buildInfo: const BuildInfo(
|
||||
BuildMode.debug,
|
||||
'',
|
||||
treeShakeIcons: false,
|
||||
dartDefines: <String>['FLUTTER_WEB_AUTO_DETECT=true'],
|
||||
packageConfigPath: '.dart_tool/package_config.json',
|
||||
),
|
||||
enableDwds: false,
|
||||
enableDds: false,
|
||||
entrypoint: Uri.base,
|
||||
testMode: true,
|
||||
expressionCompiler: null,
|
||||
extraHeaders: const <String, String>{},
|
||||
chromiumLauncher: null,
|
||||
ddcModuleSystem: usesDdcModuleSystem,
|
||||
canaryFeatures: canaryFeatures,
|
||||
webRenderer: WebRendererMode.auto,
|
||||
isWasm: false,
|
||||
useLocalCanvasKit: false,
|
||||
rootDirectory: globals.fs.currentDirectory,
|
||||
isWindows: false,
|
||||
);
|
||||
webDevFS.requireJS.createSync(recursive: true);
|
||||
webDevFS.stackTraceMapper.createSync(recursive: true);
|
||||
|
||||
await webDevFS.create();
|
||||
|
||||
expect(webDevFS.webAssetServer.webRenderer, WebRendererMode.auto);
|
||||
|
||||
await webDevFS.destroy();
|
||||
}),
|
||||
);
|
||||
|
||||
test(
|
||||
'Can start web server with tls connection',
|
||||
() => testbed.run(() async {
|
||||
|
@ -63,7 +63,7 @@ String indexHtmlFlutterJsLoad = _generateFlutterJsIndexHtml('''
|
||||
builds: [
|
||||
{
|
||||
"compileTarget": "dartdevc",
|
||||
"renderer": "html",
|
||||
"renderer": "canvaskit",
|
||||
"mainJsPath": "main.dart.js",
|
||||
}
|
||||
]
|
||||
|
Loading…
x
Reference in New Issue
Block a user