Unverified Commit 69a29646 authored by Jonah Williams's avatar Jonah Williams Committed by GitHub

Allow skipping webOnlyInitializePlatform in Flutter for Web (#40301)

parent 9d70c85f
...@@ -101,7 +101,11 @@ final List<core.BuilderApplication> builders = <core.BuilderApplication>[ ...@@ -101,7 +101,11 @@ final List<core.BuilderApplication> builders = <core.BuilderApplication>[
<BuilderFactory>[ <BuilderFactory>[
(BuilderOptions options) { (BuilderOptions options) {
final bool hasPlugins = options.config['hasPlugins'] == true; final bool hasPlugins = options.config['hasPlugins'] == true;
return FlutterWebShellBuilder(hasPlugins: hasPlugins); final bool initializePlatform = options.config['initializePlatform'] == true;
return FlutterWebShellBuilder(
hasPlugins: hasPlugins,
initializePlatform: initializePlatform,
);
} }
], ],
core.toRoot(), core.toRoot(),
...@@ -360,10 +364,13 @@ void setStackTraceMapper(StackTraceMapper mapper) { ...@@ -360,10 +364,13 @@ void setStackTraceMapper(StackTraceMapper mapper) {
/// A shell builder which generates the web specific entrypoint. /// A shell builder which generates the web specific entrypoint.
class FlutterWebShellBuilder implements Builder { class FlutterWebShellBuilder implements Builder {
const FlutterWebShellBuilder({this.hasPlugins = false}); const FlutterWebShellBuilder({this.hasPlugins = false, this.initializePlatform = true});
final bool hasPlugins; final bool hasPlugins;
/// Whether to call webOnlyInitializePlatform.
final bool initializePlatform;
@override @override
Future<void> build(BuildStep buildStep) async { Future<void> build(BuildStep buildStep) async {
final AssetId dartEntrypointId = buildStep.inputId; final AssetId dartEntrypointId = buildStep.inputId;
...@@ -383,7 +390,9 @@ import "${path.url.basename(buildStep.inputId.path)}" as entrypoint; ...@@ -383,7 +390,9 @@ import "${path.url.basename(buildStep.inputId.path)}" as entrypoint;
Future<void> main() async { Future<void> main() async {
registerPlugins(webPluginRegistry); registerPlugins(webPluginRegistry);
await ui.webOnlyInitializePlatform(); if ($initializePlatform) {
await ui.webOnlyInitializePlatform();
}
entrypoint.main(); entrypoint.main();
} }
'''); ''');
...@@ -394,7 +403,9 @@ import 'dart:ui' as ui; ...@@ -394,7 +403,9 @@ import 'dart:ui' as ui;
import "${path.url.basename(buildStep.inputId.path)}" as entrypoint; import "${path.url.basename(buildStep.inputId.path)}" as entrypoint;
Future<void> main() async { Future<void> main() async {
await ui.webOnlyInitializePlatform(); if ($initializePlatform) {
await ui.webOnlyInitializePlatform();
}
entrypoint.main(); entrypoint.main();
} }
'''); ''');
......
...@@ -168,6 +168,7 @@ class ResidentWebRunner extends ResidentRunner { ...@@ -168,6 +168,7 @@ class ResidentWebRunner extends ResidentRunner {
target: target, target: target,
flutterProject: flutterProject, flutterProject: flutterProject,
buildInfo: debuggingOptions.buildInfo, buildInfo: debuggingOptions.buildInfo,
initializePlatform: debuggingOptions.initializePlatform,
hostname: debuggingOptions.hostname, hostname: debuggingOptions.hostname,
port: debuggingOptions.port, port: debuggingOptions.port,
skipDwds: device is WebServerDevice, skipDwds: device is WebServerDevice,
......
...@@ -16,6 +16,9 @@ import 'package:path/path.dart' as path; ...@@ -16,6 +16,9 @@ import 'package:path/path.dart' as path;
import '../base/file_system.dart'; import '../base/file_system.dart';
import '../build_info.dart'; import '../build_info.dart';
import '../convert.dart'; import '../convert.dart';
import '../platform_plugins.dart';
import '../plugins.dart';
import '../project.dart';
import '../web/compile.dart'; import '../web/compile.dart';
import 'web_fs.dart'; import 'web_fs.dart';
...@@ -28,18 +31,23 @@ class BuildRunnerWebCompilationProxy extends WebCompilationProxy { ...@@ -28,18 +31,23 @@ class BuildRunnerWebCompilationProxy extends WebCompilationProxy {
Directory projectDirectory, Directory projectDirectory,
String testOutputDir, String testOutputDir,
BuildMode mode, BuildMode mode,
String projectName String projectName,
bool initializePlatform,
}) async { }) async {
// Create the .dart_tool directory if it doesn't exist. // Create the .dart_tool directory if it doesn't exist.
projectDirectory projectDirectory
.childDirectory('.dart_tool') .childDirectory('.dart_tool')
.createSync(); .createSync();
final FlutterProject flutterProject = FlutterProject.fromDirectory(projectDirectory);
final bool hasWebPlugins = findPlugins(flutterProject)
.any((Plugin p) => p.platforms.containsKey(WebPlugin.kConfigKey));
final BuildDaemonClient client = await buildDaemonCreator.startBuildDaemon( final BuildDaemonClient client = await buildDaemonCreator.startBuildDaemon(
projectDirectory.path, projectDirectory.path,
release: mode == BuildMode.release, release: mode == BuildMode.release,
profile: mode == BuildMode.profile, profile: mode == BuildMode.profile,
hasPlugins: false, hasPlugins: hasWebPlugins,
includeTests: true, includeTests: true,
initializePlatform: initializePlatform,
); );
client.startBuild(); client.startBuild();
bool success = true; bool success = true;
......
...@@ -75,6 +75,7 @@ typedef WebFsFactory = Future<WebFs> Function({ ...@@ -75,6 +75,7 @@ typedef WebFsFactory = Future<WebFs> Function({
@required FlutterProject flutterProject, @required FlutterProject flutterProject,
@required BuildInfo buildInfo, @required BuildInfo buildInfo,
@required bool skipDwds, @required bool skipDwds,
@required bool initializePlatform,
@required String hostname, @required String hostname,
@required String port, @required String port,
}); });
...@@ -142,6 +143,7 @@ class WebFs { ...@@ -142,6 +143,7 @@ class WebFs {
@required FlutterProject flutterProject, @required FlutterProject flutterProject,
@required BuildInfo buildInfo, @required BuildInfo buildInfo,
@required bool skipDwds, @required bool skipDwds,
@required bool initializePlatform,
@required String hostname, @required String hostname,
@required String port, @required String port,
}) async { }) async {
...@@ -149,11 +151,16 @@ class WebFs { ...@@ -149,11 +151,16 @@ class WebFs {
if (!flutterProject.dartTool.existsSync()) { if (!flutterProject.dartTool.existsSync()) {
flutterProject.dartTool.createSync(recursive: true); flutterProject.dartTool.createSync(recursive: true);
} }
final bool hasWebPlugins = findPlugins(flutterProject)
final bool hasWebPlugins = findPlugins(flutterProject).any((Plugin p) => p.platforms.containsKey(WebPlugin.kConfigKey)); .any((Plugin p) => p.platforms.containsKey(WebPlugin.kConfigKey));
// Start the build daemon and run an initial build. // Start the build daemon and run an initial build.
final BuildDaemonClient client = await buildDaemonCreator final BuildDaemonClient client = await buildDaemonCreator
.startBuildDaemon(fs.currentDirectory.path, release: buildInfo.isRelease, profile: buildInfo.isProfile, hasPlugins: hasWebPlugins); .startBuildDaemon(fs.currentDirectory.path,
release: buildInfo.isRelease,
profile: buildInfo.isProfile,
hasPlugins: hasWebPlugins,
initializePlatform: initializePlatform,
);
client.startBuild(); client.startBuild();
// Only provide relevant build results // Only provide relevant build results
final Stream<BuildResult> filteredBuildResults = client.buildResults final Stream<BuildResult> filteredBuildResults = client.buildResults
...@@ -340,11 +347,14 @@ class BuildDaemonCreator { ...@@ -340,11 +347,14 @@ class BuildDaemonCreator {
static const String _ignoredLine3 = 'have your dependencies specified fully in your pubspec.yaml'; static const String _ignoredLine3 = 'have your dependencies specified fully in your pubspec.yaml';
/// Start a build daemon and register the web targets. /// Start a build daemon and register the web targets.
///
/// [initializePlatform] controls whether we should invoke [webOnlyInitializePlatform].
Future<BuildDaemonClient> startBuildDaemon(String workingDirectory, { Future<BuildDaemonClient> startBuildDaemon(String workingDirectory, {
bool release = false, bool release = false,
bool profile = false, bool profile = false,
bool hasPlugins = false, bool hasPlugins = false,
bool includeTests = false, bool includeTests = false,
bool initializePlatform = true,
}) async { }) async {
try { try {
final BuildDaemonClient client = await _connectClient( final BuildDaemonClient client = await _connectClient(
...@@ -352,6 +362,7 @@ class BuildDaemonCreator { ...@@ -352,6 +362,7 @@ class BuildDaemonCreator {
release: release, release: release,
profile: profile, profile: profile,
hasPlugins: hasPlugins, hasPlugins: hasPlugins,
initializePlatform: initializePlatform,
); );
_registerBuildTargets(client, includeTests); _registerBuildTargets(client, includeTests);
return client; return client;
...@@ -384,7 +395,7 @@ class BuildDaemonCreator { ...@@ -384,7 +395,7 @@ class BuildDaemonCreator {
Future<BuildDaemonClient> _connectClient( Future<BuildDaemonClient> _connectClient(
String workingDirectory, String workingDirectory,
{ bool release, bool profile, bool hasPlugins } { bool release, bool profile, bool hasPlugins, bool initializePlatform }
) { ) {
final String flutterToolsPackages = fs.path.join(Cache.flutterRoot, 'packages', 'flutter_tools', '.packages'); final String flutterToolsPackages = fs.path.join(Cache.flutterRoot, 'packages', 'flutter_tools', '.packages');
final String buildScript = fs.path.join(Cache.flutterRoot, 'packages', 'flutter_tools', 'lib', 'src', 'build_runner', 'build_script.dart'); final String buildScript = fs.path.join(Cache.flutterRoot, 'packages', 'flutter_tools', 'lib', 'src', 'build_runner', 'build_script.dart');
...@@ -406,6 +417,7 @@ class BuildDaemonCreator { ...@@ -406,6 +417,7 @@ class BuildDaemonCreator {
'--define', 'flutter_tools:entrypoint=profile=$profile', '--define', 'flutter_tools:entrypoint=profile=$profile',
'--define', 'flutter_tools:shell=flutterWebSdk=$flutterWebSdk', '--define', 'flutter_tools:shell=flutterWebSdk=$flutterWebSdk',
'--define', 'flutter_tools:shell=hasPlugins=$hasPlugins', '--define', 'flutter_tools:shell=hasPlugins=$hasPlugins',
'--define', 'flutter_tools:shell=initializePlatform=$initializePlatform'
], ],
logHandler: (ServerLog serverLog) { logHandler: (ServerLog serverLog) {
switch (serverLog.level) { switch (serverLog.level) {
......
...@@ -18,6 +18,12 @@ class BuildWebCommand extends BuildSubCommand { ...@@ -18,6 +18,12 @@ class BuildWebCommand extends BuildSubCommand {
usesTargetOption(); usesTargetOption();
usesPubOption(); usesPubOption();
addBuildModeFlags(); addBuildModeFlags();
argParser.addFlag('web-initialize-platform',
defaultsTo: true,
negatable: true,
hide: true,
help: 'Whether to automatically invoke webOnlyInitializePlatform.',
);
} }
@override @override
...@@ -44,7 +50,7 @@ class BuildWebCommand extends BuildSubCommand { ...@@ -44,7 +50,7 @@ class BuildWebCommand extends BuildSubCommand {
final FlutterProject flutterProject = FlutterProject.current(); final FlutterProject flutterProject = FlutterProject.current();
final String target = argResults['target']; final String target = argResults['target'];
final BuildInfo buildInfo = getBuildInfo(); final BuildInfo buildInfo = getBuildInfo();
await buildWeb(flutterProject, target, buildInfo); await buildWeb(flutterProject, target, buildInfo, argResults['web-initialize-platform']);
return null; return null;
} }
} }
...@@ -169,6 +169,12 @@ class RunCommand extends RunCommandBase { ...@@ -169,6 +169,12 @@ class RunCommand extends RunCommandBase {
hide: !verboseHelp, hide: !verboseHelp,
help: 'No longer require an authentication code to connect to the VM ' help: 'No longer require an authentication code to connect to the VM '
'service (not recommended).') 'service (not recommended).')
..addFlag('web-initialize-platform',
negatable: true,
defaultsTo: true,
hide: true,
help: 'Whether to automatically invoke webOnlyInitializePlatform.'
)
..addOption(FlutterOptions.kExtraFrontEndOptions, hide: true) ..addOption(FlutterOptions.kExtraFrontEndOptions, hide: true)
..addOption(FlutterOptions.kExtraGenSnapshotOptions, hide: true) ..addOption(FlutterOptions.kExtraGenSnapshotOptions, hide: true)
..addMultiOption(FlutterOptions.kEnableExperiment, ..addMultiOption(FlutterOptions.kEnableExperiment,
...@@ -274,7 +280,10 @@ class RunCommand extends RunCommandBase { ...@@ -274,7 +280,10 @@ class RunCommand extends RunCommandBase {
DebuggingOptions _createDebuggingOptions() { DebuggingOptions _createDebuggingOptions() {
final BuildInfo buildInfo = getBuildInfo(); final BuildInfo buildInfo = getBuildInfo();
if (buildInfo.isRelease) { if (buildInfo.isRelease) {
return DebuggingOptions.disabled(buildInfo); return DebuggingOptions.disabled(
buildInfo,
initializePlatform: argResults['web-initialize-platform'],
);
} else { } else {
return DebuggingOptions.enabled( return DebuggingOptions.enabled(
buildInfo, buildInfo,
...@@ -289,6 +298,7 @@ class RunCommand extends RunCommandBase { ...@@ -289,6 +298,7 @@ class RunCommand extends RunCommandBase {
dumpSkpOnShaderCompilation: argResults['dump-skp-on-shader-compilation'], dumpSkpOnShaderCompilation: argResults['dump-skp-on-shader-compilation'],
observatoryPort: observatoryPort, observatoryPort: observatoryPort,
verboseSystemLogs: argResults['verbose-system-logs'], verboseSystemLogs: argResults['verbose-system-logs'],
initializePlatform: argResults['web-initialize-platform'],
hostname: featureFlags.isWebEnabled ? argResults['web-hostname'] : '', hostname: featureFlags.isWebEnabled ? argResults['web-hostname'] : '',
port: featureFlags.isWebEnabled ? argResults['web-port'] : '', port: featureFlags.isWebEnabled ? argResults['web-port'] : '',
); );
......
...@@ -484,11 +484,12 @@ class DebuggingOptions { ...@@ -484,11 +484,12 @@ class DebuggingOptions {
this.useTestFonts = false, this.useTestFonts = false,
this.verboseSystemLogs = false, this.verboseSystemLogs = false,
this.observatoryPort, this.observatoryPort,
this.initializePlatform = true,
this.hostname, this.hostname,
this.port, this.port,
}) : debuggingEnabled = true; }) : debuggingEnabled = true;
DebuggingOptions.disabled(this.buildInfo) DebuggingOptions.disabled(this.buildInfo, { this.initializePlatform = true })
: debuggingEnabled = false, : debuggingEnabled = false,
useTestFonts = false, useTestFonts = false,
startPaused = false, startPaused = false,
...@@ -517,6 +518,8 @@ class DebuggingOptions { ...@@ -517,6 +518,8 @@ class DebuggingOptions {
final bool dumpSkpOnShaderCompilation; final bool dumpSkpOnShaderCompilation;
final bool useTestFonts; final bool useTestFonts;
final bool verboseSystemLogs; final bool verboseSystemLogs;
/// Whether to invoke webOnlyInitializePlatform in Flutter for web.
final bool initializePlatform;
final int observatoryPort; final int observatoryPort;
final String port; final String port;
final String hostname; final String hostname;
......
...@@ -70,6 +70,7 @@ Future<int> runTests( ...@@ -70,6 +70,7 @@ Future<int> runTests(
projectDirectory: flutterProject.directory, projectDirectory: flutterProject.directory,
testOutputDir: tempBuildDir, testOutputDir: tempBuildDir,
projectName: flutterProject.manifest.appName, projectName: flutterProject.manifest.appName,
initializePlatform: true,
); );
if (!result) { if (!result) {
throwToolExit('Failed to compile tests'); throwToolExit('Failed to compile tests');
......
...@@ -18,7 +18,7 @@ import '../reporting/reporting.dart'; ...@@ -18,7 +18,7 @@ import '../reporting/reporting.dart';
/// The [WebCompilationProxy] instance. /// The [WebCompilationProxy] instance.
WebCompilationProxy get webCompilationProxy => context.get<WebCompilationProxy>(); WebCompilationProxy get webCompilationProxy => context.get<WebCompilationProxy>();
Future<void> buildWeb(FlutterProject flutterProject, String target, BuildInfo buildInfo) async { Future<void> buildWeb(FlutterProject flutterProject, String target, BuildInfo buildInfo, bool initializePlatform) async {
if (!flutterProject.web.existsSync()) { if (!flutterProject.web.existsSync()) {
throwToolExit('Missing index.html.'); throwToolExit('Missing index.html.');
} }
...@@ -32,6 +32,7 @@ Future<void> buildWeb(FlutterProject flutterProject, String target, BuildInfo bu ...@@ -32,6 +32,7 @@ Future<void> buildWeb(FlutterProject flutterProject, String target, BuildInfo bu
projectDirectory: FlutterProject.current().directory, projectDirectory: FlutterProject.current().directory,
mode: buildInfo.mode, mode: buildInfo.mode,
projectName: flutterProject.manifest.appName, projectName: flutterProject.manifest.appName,
initializePlatform: initializePlatform,
); );
if (result) { if (result) {
// Places assets adjacent to the web stuff. // Places assets adjacent to the web stuff.
...@@ -84,6 +85,7 @@ class WebCompilationProxy { ...@@ -84,6 +85,7 @@ class WebCompilationProxy {
@required String projectName, @required String projectName,
String testOutputDir, String testOutputDir,
BuildMode mode, BuildMode mode,
bool initializePlatform,
}) async { }) async {
throw UnimplementedError(); throw UnimplementedError();
} }
......
// Copyright 2019 The Chromium 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:build/build.dart';
import 'package:flutter_tools/src/build_runner/build_script.dart';
import 'package:mockito/mockito.dart';
import '../../src/common.dart';
void main() {
MockBuildStep mockBuildStep;
AssetId inputId;
setUp(() {
mockBuildStep = MockBuildStep();
inputId = AssetId('hello_world', 'lib/main.dart');
when(mockBuildStep.inputId).thenReturn(inputId);
when(mockBuildStep.readAsString(any)).thenAnswer((Invocation invocation) async {
return 'void main() { }';
});
});
test('FlutterWebShellBuilder correctly configures platform', () async {
const FlutterWebShellBuilder builder = FlutterWebShellBuilder(
hasPlugins: false,
initializePlatform: true,
);
await builder.build(mockBuildStep);
verify(mockBuildStep.writeAsString(any, argThat(contains('if (true) '
'{\n await ui.webOnlyInitializePlatform')))).called(1);
});
test('FlutterWebShellBuilder correctly configures does not platform', () async {
const FlutterWebShellBuilder builder = FlutterWebShellBuilder(
hasPlugins: false,
initializePlatform: false,
);
await builder.build(mockBuildStep);
verify(mockBuildStep.writeAsString(any, argThat(contains('if (false) '
'{\n await ui.webOnlyInitializePlatform')))).called(1);
});
test('FlutterWebShellBuilder correctly configures plugins', () async {
const FlutterWebShellBuilder builder = FlutterWebShellBuilder(
hasPlugins: true,
initializePlatform: true,
);
await builder.build(mockBuildStep);
verify(mockBuildStep.writeAsString(any,
argThat(contains('registerPlugins(webPluginRegistry)')))).called(1);
});
test('FlutterWebShellBuilder correctly does not configure plugins', () async {
const FlutterWebShellBuilder builder = FlutterWebShellBuilder(
hasPlugins: false,
initializePlatform: true,
);
await builder.build(mockBuildStep);
verify(mockBuildStep.writeAsString(any,
argThat(isNot(contains('registerPlugins(webPluginRegistry)'))))).called(1);
});
}
class MockBuildStep extends Mock implements BuildStep {}
...@@ -43,7 +43,8 @@ void main() { ...@@ -43,7 +43,8 @@ void main() {
when(mockWebCompilationProxy.initialize( when(mockWebCompilationProxy.initialize(
projectName: anyNamed('projectName'), projectName: anyNamed('projectName'),
projectDirectory: anyNamed('projectDirectory'), projectDirectory: anyNamed('projectDirectory'),
mode: anyNamed('mode') mode: anyNamed('mode'),
initializePlatform: anyNamed('initializePlatform')
)).thenAnswer((Invocation invocation) { )).thenAnswer((Invocation invocation) {
final String path = fs.path.join('.dart_tool', 'build', 'flutter_web', 'foo', 'lib', 'main_web_entrypoint.dart.js'); final String path = fs.path.join('.dart_tool', 'build', 'flutter_web', 'foo', 'lib', 'main_web_entrypoint.dart.js');
fs.file(path).createSync(recursive: true); fs.file(path).createSync(recursive: true);
...@@ -65,6 +66,7 @@ void main() { ...@@ -65,6 +66,7 @@ void main() {
FlutterProject.current(), FlutterProject.current(),
fs.path.join('lib', 'main.dart'), fs.path.join('lib', 'main.dart'),
BuildInfo.debug, BuildInfo.debug,
false,
), throwsA(isInstanceOf<ToolExit>())); ), throwsA(isInstanceOf<ToolExit>()));
})); }));
...@@ -86,6 +88,7 @@ void main() { ...@@ -86,6 +88,7 @@ void main() {
FlutterProject.current(), FlutterProject.current(),
fs.path.join('lib', 'main.dart'), fs.path.join('lib', 'main.dart'),
BuildInfo.debug, BuildInfo.debug,
false,
); );
})); }));
......
...@@ -43,6 +43,7 @@ void main() { ...@@ -43,6 +43,7 @@ void main() {
@required FlutterProject flutterProject, @required FlutterProject flutterProject,
@required BuildInfo buildInfo, @required BuildInfo buildInfo,
@required bool skipDwds, @required bool skipDwds,
@required bool initializePlatform,
@required String hostname, @required String hostname,
@required String port, @required String port,
}) async { }) async {
...@@ -102,7 +103,6 @@ void main() { ...@@ -102,7 +103,6 @@ void main() {
} }
class MockWebDevice extends Mock implements Device {} class MockWebDevice extends Mock implements Device {}
class MockBuildDaemonCreator extends Mock implements BuildDaemonCreator {} class MockBuildDaemonCreator extends Mock implements BuildDaemonCreator {}
class MockFlutterWebFs extends Mock implements WebFs {} class MockFlutterWebFs extends Mock implements WebFs {}
......
...@@ -52,6 +52,7 @@ void main() { ...@@ -52,6 +52,7 @@ void main() {
@required FlutterProject flutterProject, @required FlutterProject flutterProject,
@required BuildInfo buildInfo, @required BuildInfo buildInfo,
@required bool skipDwds, @required bool skipDwds,
@required bool initializePlatform,
@required String hostname, @required String hostname,
@required String port, @required String port,
}) async { }) async {
......
...@@ -26,20 +26,23 @@ void main() { ...@@ -26,20 +26,23 @@ void main() {
MockHttpMultiServer mockHttpMultiServer; MockHttpMultiServer mockHttpMultiServer;
MockBuildDaemonClient mockBuildDaemonClient; MockBuildDaemonClient mockBuildDaemonClient;
MockOperatingSystemUtils mockOperatingSystemUtils; MockOperatingSystemUtils mockOperatingSystemUtils;
bool lastInitializePlatform;
dynamic lastAddress; dynamic lastAddress;
int lastPort; int lastPort;
setUp(() { setUp(() {
lastAddress = null; lastAddress = null;
lastPort = null; lastPort = null;
lastInitializePlatform = null;
mockBuildDaemonCreator = MockBuildDaemonCreator(); mockBuildDaemonCreator = MockBuildDaemonCreator();
mockChromeLauncher = MockChromeLauncher(); mockChromeLauncher = MockChromeLauncher();
mockHttpMultiServer = MockHttpMultiServer(); mockHttpMultiServer = MockHttpMultiServer();
mockBuildDaemonClient = MockBuildDaemonClient(); mockBuildDaemonClient = MockBuildDaemonClient();
mockOperatingSystemUtils = MockOperatingSystemUtils(); mockOperatingSystemUtils = MockOperatingSystemUtils();
mockDwds = MockDwds(); mockDwds = MockDwds();
when(mockBuildDaemonCreator.startBuildDaemon(any, release: anyNamed('release'))) when(mockBuildDaemonCreator.startBuildDaemon(any, release: anyNamed('release'), initializePlatform: anyNamed('initializePlatform')))
.thenAnswer((Invocation _) async { .thenAnswer((Invocation invocation) async {
lastInitializePlatform = invocation.namedArguments[#initializePlatform];
return mockBuildDaemonClient; return mockBuildDaemonClient;
}); });
when(mockOperatingSystemUtils.findFreePort()).thenAnswer((Invocation _) async { when(mockOperatingSystemUtils.findFreePort()).thenAnswer((Invocation _) async {
...@@ -89,6 +92,7 @@ void main() { ...@@ -89,6 +92,7 @@ void main() {
target: fs.path.join('lib', 'main.dart'), target: fs.path.join('lib', 'main.dart'),
buildInfo: BuildInfo.debug, buildInfo: BuildInfo.debug,
flutterProject: flutterProject, flutterProject: flutterProject,
initializePlatform: true,
hostname: null, hostname: null,
port: null, port: null,
); );
...@@ -98,6 +102,27 @@ void main() { ...@@ -98,6 +102,27 @@ void main() {
// .dart_tool directory is created. // .dart_tool directory is created.
expect(flutterProject.dartTool.existsSync(), true); expect(flutterProject.dartTool.existsSync(), true);
expect(lastInitializePlatform, true);
}));
test('Can create webFs from mocked interfaces with initializePlatform', () => testbed.run(() async {
final FlutterProject flutterProject = FlutterProject.current();
await WebFs.start(
skipDwds: false,
target: fs.path.join('lib', 'main.dart'),
buildInfo: BuildInfo.debug,
flutterProject: flutterProject,
initializePlatform: false,
hostname: null,
port: null,
);
// The build daemon is told to build once.
verify(mockBuildDaemonClient.startBuild()).called(1);
// .dart_tool directory is created.
expect(flutterProject.dartTool.existsSync(), true);
expect(lastInitializePlatform, false);
})); }));
test('Uses provided port number and hostname.', () => testbed.run(() async { test('Uses provided port number and hostname.', () => testbed.run(() async {
...@@ -107,6 +132,7 @@ void main() { ...@@ -107,6 +132,7 @@ void main() {
target: fs.path.join('lib', 'main.dart'), target: fs.path.join('lib', 'main.dart'),
buildInfo: BuildInfo.debug, buildInfo: BuildInfo.debug,
flutterProject: flutterProject, flutterProject: flutterProject,
initializePlatform: false,
hostname: 'foo', hostname: 'foo',
port: '1234', port: '1234',
); );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment