| Index: test/runner/browser/safari_test.dart
|
| diff --git a/test/runner/browser/safari_test.dart b/test/runner/browser/safari_test.dart
|
| index 254a0fc865ae569dd296daec54c554f851d0ef8d..85d4f56f048212d16dcdd49f0be5bc0fda323478 100644
|
| --- a/test/runner/browser/safari_test.dart
|
| +++ b/test/runner/browser/safari_test.dart
|
| @@ -4,138 +4,48 @@
|
|
|
| @TestOn("vm && mac-os")
|
|
|
| -import 'dart:async';
|
| -
|
| -import 'package:test/test.dart';
|
| +import 'package:scheduled_test/descriptor.dart' as d;
|
| +import 'package:scheduled_test/scheduled_stream.dart';
|
| +import 'package:scheduled_test/scheduled_test.dart';
|
| import 'package:test/src/runner/browser/safari.dart';
|
| -import 'package:test/src/util/io.dart';
|
| -import 'package:shelf/shelf.dart' as shelf;
|
| -import 'package:shelf/shelf_io.dart' as shelf_io;
|
| -import 'package:shelf_web_socket/shelf_web_socket.dart';
|
|
|
| import '../../io.dart';
|
| import '../../utils.dart';
|
| +import 'code_server.dart';
|
|
|
| void main() {
|
| - group("running JavaScript", () {
|
| - // The JavaScript to serve in the server. We use actual JavaScript here to
|
| - // avoid the pain of compiling to JS in a test
|
| - var javaScript;
|
| -
|
| - var servePage = (request) {
|
| - var path = request.url.path;
|
| -
|
| - // We support both shelf 0.5.x and 0.6.x. The former has a leading "/"
|
| - // here, the latter does not.
|
| - if (path.startsWith("/")) path = path.substring(1);
|
| -
|
| - if (path.isEmpty) {
|
| - return new shelf.Response.ok("""
|
| -<!doctype html>
|
| -<html>
|
| -<head>
|
| - <script src="index.js"></script>
|
| -</head>
|
| -</html>
|
| -""", headers: {'content-type': 'text/html'});
|
| - } else if (path == "index.js") {
|
| - return new shelf.Response.ok(javaScript,
|
| - headers: {'content-type': 'application/javascript'});
|
| - } else {
|
| - return new shelf.Response.notFound(null);
|
| - }
|
| - };
|
| -
|
| - var server;
|
| - var webSockets;
|
| - setUp(() async {
|
| - var webSocketsController = new StreamController();
|
| - webSockets = webSocketsController.stream;
|
| -
|
| - server = await shelf_io.serve(
|
| - new shelf.Cascade()
|
| - .add(webSocketHandler(webSocketsController.add))
|
| - .add(servePage).handler,
|
| - 'localhost', 0);
|
| - });
|
| + useSandbox();
|
|
|
| - tearDown(() {
|
| - if (server != null) server.close();
|
| + test("starts Safari with the given URL", () {
|
| + var server = new CodeServer();
|
|
|
| - javaScript = null;
|
| - server = null;
|
| - webSockets = null;
|
| + schedule(() async {
|
| + var safari = new Safari(await server.url);
|
| + currentSchedule.onComplete.schedule(
|
| + () async => (await safari).close());
|
| });
|
|
|
| - test("starts Safari with the given URL", () async {
|
| - javaScript = '''
|
| + server.handleJavaScript('''
|
| var webSocket = new WebSocket(window.location.href.replace("http://", "ws://"));
|
| webSocket.addEventListener("open", function() {
|
| webSocket.send("loaded!");
|
| });
|
| -''';
|
| - var safari = new Safari(baseUrlForAddress(server.address, server.port));
|
| -
|
| - try {
|
| - var message = await (await webSockets.first).first;
|
| - expect(message, equals("loaded!"));
|
| - } finally {
|
| - safari.close();
|
| - }
|
| - });
|
| +''');
|
|
|
| - test("doesn't preserve state across runs", () {
|
| - javaScript = '''
|
| -localStorage.setItem("data", "value");
|
| + var webSocket = server.handleWebSocket();
|
|
|
| -var webSocket = new WebSocket(window.location.href.replace("http://", "ws://"));
|
| -webSocket.addEventListener("open", function() {
|
| - webSocket.send("done");
|
| -});
|
| -''';
|
| - var safari = new Safari(baseUrlForAddress(server.address, server.port));
|
| -
|
| - var first = true;
|
| - webSockets.listen(expectAsync((webSocket) {
|
| - if (first) {
|
| - // The first request will set local storage data. We can't kill the
|
| - // old safari and start a new one until we're sure that that has
|
| - // finished.
|
| - webSocket.first.then((_) {
|
| - safari.close();
|
| -
|
| - javaScript = '''
|
| -var webSocket = new WebSocket(window.location.href.replace("http://", "ws://"));
|
| -webSocket.addEventListener("open", function() {
|
| - webSocket.send(localStorage.getItem("data"));
|
| -});
|
| -''';
|
| - safari = new Safari(baseUrlForAddress(server.address, server.port));
|
| - first = false;
|
| - });
|
| - } else {
|
| - // The second request will return the local storage data. This should
|
| - // be null, indicating that no data was saved between runs.
|
| - expect(
|
| - webSocket.first
|
| - .then((message) => expect(message, equals('null')))
|
| - .whenComplete(safari.close),
|
| - completes);
|
| - }
|
| - }, count: 2));
|
| + schedule(() async {
|
| + expect(await (await webSocket).first, equals("loaded!"));
|
| });
|
| });
|
|
|
| test("a process can be killed synchronously after it's started", () async {
|
| - var server = await shelf_io.serve(
|
| - expectAsync((_) {}, count: 0), 'localhost', 0);
|
| + var server = new CodeServer();
|
|
|
| - try {
|
| - var safari = new Safari(baseUrlForAddress(server.address, server.port));
|
| + schedule(() async {
|
| + var safari = new Safari(await server.url);
|
| await safari.close();
|
| - } finally {
|
| - server.close();
|
| - }
|
| + });
|
| });
|
|
|
| test("reports an error in onExit", () {
|
| @@ -144,4 +54,32 @@ webSocket.addEventListener("open", function() {
|
| expect(safari.onExit, throwsA(isApplicationException(startsWith(
|
| "Failed to run Safari: $noSuchFileMessage"))));
|
| });
|
| +
|
| + test("can run successful tests", () {
|
| + d.file("test.dart", """
|
| +import 'package:test/test.dart';
|
| +
|
| +void main() {
|
| + test("success", () {});
|
| +}
|
| +""").create();
|
| +
|
| + var test = runTest(["-p", "safari", "test.dart"]);
|
| + test.stdout.expect(consumeThrough(contains("+1: All tests passed!")));
|
| + test.shouldExit(0);
|
| + });
|
| +
|
| + test("can run failing tests", () {
|
| + d.file("test.dart", """
|
| +import 'package:test/test.dart';
|
| +
|
| +void main() {
|
| + test("failure", () => throw new TestFailure("oh no"));
|
| +}
|
| +""").create();
|
| +
|
| + var test = runTest(["-p", "safari", "test.dart"]);
|
| + test.stdout.expect(consumeThrough(contains("-1: Some tests failed.")));
|
| + test.shouldExit(1);
|
| + });
|
| }
|
|
|