2019-08-05 23:51:57 +00:00
|
|
|
// 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_daemon/client.dart';
|
|
|
|
import 'package:build_daemon/data/build_status.dart';
|
|
|
|
import 'package:dwds/dwds.dart';
|
|
|
|
import 'package:flutter_tools/src/base/file_system.dart';
|
|
|
|
import 'package:flutter_tools/src/base/os.dart';
|
|
|
|
import 'package:flutter_tools/src/build_info.dart';
|
|
|
|
import 'package:flutter_tools/src/project.dart';
|
|
|
|
import 'package:flutter_tools/src/web/chrome.dart';
|
2019-08-08 23:36:27 +00:00
|
|
|
import 'package:flutter_tools/src/build_runner/web_fs.dart';
|
2019-08-05 23:51:57 +00:00
|
|
|
import 'package:http_multi_server/http_multi_server.dart';
|
|
|
|
import 'package:meta/meta.dart';
|
|
|
|
import 'package:mockito/mockito.dart';
|
|
|
|
|
|
|
|
import '../../src/common.dart';
|
|
|
|
import '../../src/testbed.dart';
|
|
|
|
|
|
|
|
void main() {
|
|
|
|
Testbed testbed;
|
|
|
|
MockBuildDaemonCreator mockBuildDaemonCreator;
|
|
|
|
MockDwds mockDwds;
|
|
|
|
MockChromeLauncher mockChromeLauncher;
|
|
|
|
MockHttpMultiServer mockHttpMultiServer;
|
|
|
|
MockBuildDaemonClient mockBuildDaemonClient;
|
|
|
|
MockOperatingSystemUtils mockOperatingSystemUtils;
|
2019-09-13 17:20:30 +00:00
|
|
|
bool lastInitializePlatform;
|
2019-09-12 15:58:49 +00:00
|
|
|
dynamic lastAddress;
|
|
|
|
int lastPort;
|
2019-08-05 23:51:57 +00:00
|
|
|
|
|
|
|
setUp(() {
|
2019-09-12 15:58:49 +00:00
|
|
|
lastAddress = null;
|
|
|
|
lastPort = null;
|
2019-09-13 17:20:30 +00:00
|
|
|
lastInitializePlatform = null;
|
2019-08-05 23:51:57 +00:00
|
|
|
mockBuildDaemonCreator = MockBuildDaemonCreator();
|
|
|
|
mockChromeLauncher = MockChromeLauncher();
|
|
|
|
mockHttpMultiServer = MockHttpMultiServer();
|
|
|
|
mockBuildDaemonClient = MockBuildDaemonClient();
|
|
|
|
mockOperatingSystemUtils = MockOperatingSystemUtils();
|
|
|
|
mockDwds = MockDwds();
|
2019-09-13 17:20:30 +00:00
|
|
|
when(mockBuildDaemonCreator.startBuildDaemon(any, release: anyNamed('release'), initializePlatform: anyNamed('initializePlatform')))
|
|
|
|
.thenAnswer((Invocation invocation) async {
|
|
|
|
lastInitializePlatform = invocation.namedArguments[#initializePlatform];
|
2019-08-05 23:51:57 +00:00
|
|
|
return mockBuildDaemonClient;
|
|
|
|
});
|
|
|
|
when(mockOperatingSystemUtils.findFreePort()).thenAnswer((Invocation _) async {
|
|
|
|
return 1234;
|
|
|
|
});
|
|
|
|
when(mockBuildDaemonClient.buildResults).thenAnswer((Invocation _) {
|
|
|
|
return const Stream<BuildResults>.empty();
|
|
|
|
});
|
|
|
|
when(mockBuildDaemonCreator.assetServerPort(any)).thenReturn(4321);
|
|
|
|
testbed = Testbed(
|
2019-09-03 17:37:34 +00:00
|
|
|
setup: () {
|
|
|
|
// Create an empty .packages file so we can read it when we check for
|
|
|
|
// plugins on WebFs.start()
|
|
|
|
fs.file('.packages').createSync();
|
|
|
|
},
|
2019-08-05 23:51:57 +00:00
|
|
|
overrides: <Type, Generator>{
|
|
|
|
OperatingSystemUtils: () => mockOperatingSystemUtils,
|
|
|
|
BuildDaemonCreator: () => mockBuildDaemonCreator,
|
|
|
|
ChromeLauncher: () => mockChromeLauncher,
|
|
|
|
HttpMultiServerFactory: () => (dynamic address, int port) async {
|
2019-09-12 15:58:49 +00:00
|
|
|
lastAddress = address;
|
|
|
|
lastPort = port;
|
2019-08-05 23:51:57 +00:00
|
|
|
return mockHttpMultiServer;
|
|
|
|
},
|
|
|
|
DwdsFactory: () => ({
|
|
|
|
@required int applicationPort,
|
|
|
|
@required int assetServerPort,
|
|
|
|
@required String applicationTarget,
|
|
|
|
@required Stream<BuildResult> buildResults,
|
|
|
|
@required ConnectionProvider chromeConnection,
|
|
|
|
String hostname,
|
|
|
|
ReloadConfiguration reloadConfiguration,
|
|
|
|
bool serveDevTools,
|
|
|
|
LogWriter logWriter,
|
|
|
|
bool verbose,
|
|
|
|
bool enableDebugExtension}) async {
|
|
|
|
return mockDwds;
|
|
|
|
},
|
|
|
|
}
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
test('Can create webFs from mocked interfaces', () => testbed.run(() async {
|
2019-08-30 04:31:57 +00:00
|
|
|
final FlutterProject flutterProject = FlutterProject.current();
|
2019-08-05 23:51:57 +00:00
|
|
|
await WebFs.start(
|
2019-09-11 02:29:31 +00:00
|
|
|
skipDwds: false,
|
2019-08-05 23:51:57 +00:00
|
|
|
target: fs.path.join('lib', 'main.dart'),
|
|
|
|
buildInfo: BuildInfo.debug,
|
2019-08-30 04:31:57 +00:00
|
|
|
flutterProject: flutterProject,
|
2019-09-13 17:20:30 +00:00
|
|
|
initializePlatform: true,
|
2019-09-12 15:58:49 +00:00
|
|
|
hostname: null,
|
|
|
|
port: null,
|
2019-08-05 23:51:57 +00:00
|
|
|
);
|
|
|
|
|
|
|
|
// The build daemon is told to build once.
|
|
|
|
verify(mockBuildDaemonClient.startBuild()).called(1);
|
|
|
|
|
2019-08-30 04:31:57 +00:00
|
|
|
// .dart_tool directory is created.
|
|
|
|
expect(flutterProject.dartTool.existsSync(), true);
|
2019-09-13 17:20:30 +00:00
|
|
|
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);
|
2019-08-05 23:51:57 +00:00
|
|
|
}));
|
2019-09-12 15:58:49 +00:00
|
|
|
|
|
|
|
test('Uses provided port number and hostname.', () => 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,
|
2019-09-13 17:20:30 +00:00
|
|
|
initializePlatform: false,
|
2019-09-12 15:58:49 +00:00
|
|
|
hostname: 'foo',
|
|
|
|
port: '1234',
|
|
|
|
);
|
|
|
|
|
|
|
|
expect(lastPort, 1234);
|
|
|
|
expect(lastAddress, contains('foo'));
|
|
|
|
}));
|
2019-08-05 23:51:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
class MockBuildDaemonCreator extends Mock implements BuildDaemonCreator {}
|
|
|
|
class MockBuildDaemonClient extends Mock implements BuildDaemonClient {}
|
|
|
|
class MockDwds extends Mock implements Dwds {}
|
|
|
|
class MockHttpMultiServer extends Mock implements HttpMultiServer {}
|
|
|
|
class MockChromeLauncher extends Mock implements ChromeLauncher {}
|
|
|
|
class MockOperatingSystemUtils extends Mock implements OperatingSystemUtils {}
|
|
|
|
|