| Index: mojo/public/dart/third_party/test/test/runner/browser/code_server.dart
|
| diff --git a/mojo/public/dart/third_party/test/test/runner/browser/code_server.dart b/mojo/public/dart/third_party/test/test/runner/browser/code_server.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..9b114cd9d25dc446beab58b29b8112f3f609d7ba
|
| --- /dev/null
|
| +++ b/mojo/public/dart/third_party/test/test/runner/browser/code_server.dart
|
| @@ -0,0 +1,87 @@
|
| +// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
|
| +// for details. All rights reserved. Use of this source code is governed by a
|
| +// BSD-style license that can be found in the LICENSE file.
|
| +
|
| +import 'dart:async';
|
| +import 'dart:io';
|
| +
|
| +import 'package:shelf/shelf.dart' as shelf;
|
| +import 'package:shelf_web_socket/shelf_web_socket.dart';
|
| +import 'package:scheduled_test/scheduled_server.dart';
|
| +
|
| +/// A class that schedules a server to serve Dart and/or JS code and receive
|
| +/// WebSocket connections.
|
| +///
|
| +/// This uses [ScheduledServer] under the hood, and has similar semantics: its
|
| +/// `handle*` methods all schedule a handler that must be hit before the
|
| +/// schedule will continue.
|
| +class CodeServer {
|
| + /// The underlying server.
|
| + final ScheduledServer _server;
|
| +
|
| + /// The URL of the server (including the port), once it's actually
|
| + /// instantiated.
|
| + Future<Uri> get url => _server.url;
|
| +
|
| + /// The port of the server, once it's actually instantiated.
|
| + Future<int> get port => _server.port;
|
| +
|
| + CodeServer()
|
| + : _server = new ScheduledServer("code server") {
|
| + _server.handleUnscheduled("GET", "/favicon.ico",
|
| + (_) => new shelf.Response.notFound(null));
|
| + }
|
| +
|
| + /// Sets up a handler for the root of the server, "/", that serves a basic
|
| + /// HTML page with a script tag that will run [dart].
|
| + void handleDart(String dart) {
|
| + _server.handle("GET", "/", (_) {
|
| + return new shelf.Response.ok("""
|
| +<!doctype html>
|
| +<html>
|
| +<head>
|
| + <script type="application/dart" src="index.dart"></script>
|
| +</head>
|
| +</html>
|
| +""", headers: {'content-type': 'text/html'});
|
| + });
|
| +
|
| + _server.handle("GET", "/index.dart", (_) {
|
| + return new shelf.Response.ok('''
|
| +import "dart:html";
|
| +
|
| +main() async {
|
| + $dart
|
| +}
|
| +''', headers: {'content-type': 'application/dart'});
|
| + });
|
| + }
|
| +
|
| + /// Sets up a handler for the root of the server, "/", that serves a basic
|
| + /// HTML page with a script tag that will run [javaScript].
|
| + void handleJavaScript(String javaScript) {
|
| + _server.handle("GET", "/", (_) {
|
| + return new shelf.Response.ok("""
|
| +<!doctype html>
|
| +<html>
|
| +<head>
|
| + <script src="index.js"></script>
|
| +</head>
|
| +</html>
|
| +""", headers: {'content-type': 'text/html'});
|
| + });
|
| +
|
| + _server.handle("GET", "/index.js", (_) {
|
| + return new shelf.Response.ok(javaScript,
|
| + headers: {'content-type': 'application/javascript'});
|
| + });
|
| + }
|
| +
|
| + /// Handles a WebSocket connection to the root of the server, and returns a
|
| + /// future that will complete to the WebSocket.
|
| + Future<WebSocket> handleWebSocket() {
|
| + var completer = new Completer();
|
| + _server.handle("GET", "/", webSocketHandler(completer.complete));
|
| + return completer.future;
|
| + }
|
| +}
|
|
|