Skip to content

Commit f278b51

Browse files
authored
Cleanup tests (#490)
- Move screenshot test over to package:dwds where it belongs - No longer manually create a debug service but make use of public package:dwds APIs Towards #475
1 parent 128c2c8 commit f278b51

File tree

6 files changed

+57
-101
lines changed

6 files changed

+57
-101
lines changed

dwds/lib/src/dwds_vm_client.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ class DwdsVmClient {
5656
return {'result': Success().toJson()};
5757
}
5858
});
59-
await client.registerService('hotRestart', 'WebDev fullReload');
59+
await client.registerService('hotRestart', 'DWDS fullReload');
6060

6161
client.registerServiceCallback('fullReload', (_) async {
6262
await chromeProxyService.tabConnection.page.enable();
@@ -65,15 +65,15 @@ class DwdsVmClient {
6565
await chromeProxyService.tabConnection.sendCommand('Page.reload');
6666
return {'result': Success().toJson()};
6767
});
68-
await client.registerService('fullReload', 'WebDev');
68+
await client.registerService('fullReload', 'DWDS');
6969

70-
client.registerServiceCallback('ext.webdev.screenshot', (_) async {
70+
client.registerServiceCallback('ext.dwds.screenshot', (_) async {
7171
await chromeProxyService.tabConnection.page.enable();
7272
var response = await chromeProxyService.tabConnection.page
7373
.sendCommand('Page.captureScreenshot');
7474
return {'result': response.result};
7575
});
76-
await client.registerService('ext.webdev.screenshot', 'WebDev');
76+
await client.registerService('ext.dwds.screenshot', 'DWDS');
7777

7878
return DwdsVmClient(client, requestController, responseController);
7979
}

dwds/test/debug_service_test.dart

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,11 @@
44

55
import 'dart:io';
66

7-
import 'package:dwds/src/services/debug_service.dart';
87
import 'package:test/test.dart';
98

109
import 'fixtures/context.dart';
1110

1211
final context = TestContext();
13-
DebugService get debugService => context.debugService;
1412

1513
void main() {
1614
setUpAll(() async {
@@ -23,12 +21,11 @@ void main() {
2321

2422
test('Refuses connections without the auth token', () async {
2523
expect(
26-
WebSocket.connect(
27-
'ws://${debugService.hostname}:${debugService.port}/ws'),
24+
WebSocket.connect('ws://localhost:${context.debugConnection.port}/ws'),
2825
throwsA(isA<WebSocketException>()));
2926
});
3027

3128
test('Accepts connections with the auth token', () async {
32-
expect(WebSocket.connect('${debugService.wsUri}/ws'), completes);
29+
expect(WebSocket.connect('${context.debugConnection.wsUri}/ws'), completes);
3330
});
3431
}

dwds/test/fixtures/context.dart

Lines changed: 21 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import 'package:build_daemon/data/build_status.dart';
1010
import 'package:build_daemon/data/build_target.dart';
1111
import 'package:dwds/dwds.dart';
1212
import 'package:dwds/src/services/chrome_proxy_service.dart';
13-
import 'package:dwds/src/services/debug_service.dart';
1413
import 'package:dwds/src/utilities/shared.dart';
1514
import 'package:http/http.dart' as http;
1615
import 'package:path/path.dart' as p;
@@ -23,14 +22,14 @@ import 'utilities.dart';
2322

2423
class TestContext {
2524
String appUrl;
26-
DebugService debugService;
27-
ChromeProxyService get chromeProxyService =>
28-
debugService.chromeProxyService as ChromeProxyService;
2925
WipConnection tabConnection;
3026
TestServer testServer;
3127
BuildDaemonClient daemonClient;
3228
WebDriver webDriver;
3329
Process chromeDriver;
30+
AppConnection appConnection;
31+
DebugConnection debugConnection;
32+
ChromeProxyService chromeProxyService;
3433
int port;
3534

3635
/// Top level directory in which we run the test server..
@@ -64,15 +63,6 @@ class TestContext {
6463

6564
daemonClient = await connectClient(
6665
workingDirectory, [], (log) => printOnFailure(log.toString()));
67-
testServer = await TestServer.start(
68-
'localhost',
69-
port,
70-
daemonPort(workingDirectory),
71-
pathToServe,
72-
ReloadConfiguration.none,
73-
false,
74-
daemonClient.buildResults,
75-
);
7666
daemonClient.registerBuildTarget(
7767
DefaultBuildTarget((b) => b..target = pathToServe));
7868
daemonClient.startBuild();
@@ -82,7 +72,6 @@ class TestContext {
8272
.any((result) => result.status == BuildStatus.succeeded))
8373
.timeout(Duration(seconds: 60));
8474

85-
appUrl = 'http://localhost:$port/$path';
8675
var debugPort = await findUnusedPort();
8776
var capabilities = Capabilities.chrome
8877
..addAll({
@@ -92,33 +81,35 @@ class TestContext {
9281
});
9382
webDriver =
9483
await createDriver(spec: WebDriverSpec.JsonWire, desired: capabilities);
95-
await webDriver.get(appUrl);
9684
var connection = ChromeConnection('localhost', debugPort);
85+
86+
testServer = await TestServer.start(
87+
'localhost',
88+
port,
89+
daemonPort(workingDirectory),
90+
pathToServe,
91+
ReloadConfiguration.none,
92+
false,
93+
daemonClient.buildResults,
94+
() async => connection,
95+
);
96+
97+
appUrl = 'http://localhost:$port/$path';
98+
await webDriver.get(appUrl);
9799
var tab = await connection.getTab((t) => t.url == appUrl);
98100
tabConnection = await tab.connect();
99101
await tabConnection.runtime.enable();
100102
await tabConnection.debugger.enable();
101103

102-
// Check if the app is already loaded, look for the top level
103-
// `registerExtension` variable which we set as the last step.
104-
var result = await tabConnection.runtime
105-
.evaluate('(window.registerExtension !== undefined).toString();');
106-
if (result.value != 'true') {
107-
// If it wasn't already loaded, then wait for the 'Page Ready' log.
108-
await tabConnection.runtime.onConsoleAPICalled.firstWhere((event) =>
109-
event.type == 'debug' && event.args[0].value == 'Page Ready');
110-
}
104+
appConnection = await testServer.dwds.connectedApps.first;
105+
debugConnection = await testServer.dwds.debugConnection(appConnection);
111106

112107
var assetHandler = (String path) async {
113108
var result = await http.get('http://localhost:$port/$path');
114109
return result.body;
115110
};
116-
117-
var instanceId =
118-
await tabConnection.runtime.evaluate(r'window.$dartAppInstanceId');
119-
120-
debugService = await DebugService.start(
121-
'localhost', connection, assetHandler, instanceId.value.toString());
111+
chromeProxyService = await ChromeProxyService.create(
112+
connection, assetHandler, appConnection.request.instanceId);
122113
}
123114

124115
Future<Null> tearDown() async {

dwds/test/fixtures/server.dart

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import 'package:dwds/dwds.dart';
99
import 'package:http_multi_server/http_multi_server.dart';
1010
import 'package:shelf/shelf.dart';
1111
import 'package:shelf/shelf_io.dart' as shelf_io;
12+
import 'package:test/test.dart';
13+
import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart';
1214

1315
class TestServer {
1416
final HttpServer _server;
@@ -46,6 +48,7 @@ class TestServer {
4648
ReloadConfiguration reload,
4749
bool startDevTools,
4850
Stream<BuildResults> buildResults,
51+
Future<ChromeConnection> Function() chromeConnection,
4952
) async {
5053
var pipeline = const Pipeline();
5154

@@ -58,8 +61,8 @@ class TestServer {
5861
applicationTarget: target,
5962
assetServerPort: assetServerPort,
6063
buildResults: filteredBuildResults,
61-
chromeConnection: () async => null,
62-
logWriter: (level, message) => print(message),
64+
chromeConnection: chromeConnection,
65+
logWriter: (level, message) => printOnFailure(message),
6366
reloadConfiguration: reload,
6467
serveDevTools: startDevTools,
6568
verbose: true,

dwds/test/screenshot_test.dart

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
2+
// for details. All rights reserved. Use of this source code is governed by a
3+
// BSD-style license that can be found in the LICENSE file.
4+
5+
import 'package:test/test.dart';
6+
7+
import 'fixtures/context.dart';
8+
9+
final context = TestContext();
10+
11+
void main() {
12+
setUpAll(() async {
13+
await context.setUp();
14+
});
15+
16+
tearDownAll(() async {
17+
await context.tearDown();
18+
});
19+
20+
test('can take screenshots', () async {
21+
var response = await context.debugConnection.vmService
22+
.callServiceExtension('ext.dwds.screenshot');
23+
expect(response.json['data'], isNotNull);
24+
});
25+
}

webdev/test/serve/screenshot_test.dart

Lines changed: 0 additions & 60 deletions
This file was deleted.

0 commit comments

Comments
 (0)