| // 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 'package:shelf/shelf.dart'; |
| import 'package:test/test.dart'; |
| |
| import 'test_util.dart'; |
| |
| void main() { |
| test("passes the URL to the server", () { |
| var serverHandler = new ServerHandler(LOCALHOST_URI); |
| expect(serverHandler.server.url, equals(LOCALHOST_URI)); |
| }); |
| |
| test("pipes a request from ServerHandler.handler to a mounted handler", |
| () async { |
| var serverHandler = new ServerHandler(LOCALHOST_URI); |
| serverHandler.server.mount(asyncHandler); |
| |
| var response = await makeSimpleRequest(serverHandler.handler); |
| expect(response.statusCode, equals(200)); |
| expect(response.readAsString(), completion(equals('Hello from /'))); |
| }); |
| |
| test("waits until the server's handler is mounted to service a request", |
| () async { |
| var serverHandler = new ServerHandler(LOCALHOST_URI); |
| var future = makeSimpleRequest(serverHandler.handler); |
| await new Future.delayed(Duration.ZERO); |
| |
| serverHandler.server.mount(syncHandler); |
| var response = await future; |
| expect(response.statusCode, equals(200)); |
| expect(response.readAsString(), completion(equals('Hello from /'))); |
| }); |
| |
| test("stops servicing requests after Server.close is called", () { |
| var serverHandler = new ServerHandler(LOCALHOST_URI); |
| serverHandler.server.mount(expectAsync((_) {}, count: 0)); |
| serverHandler.server.close(); |
| |
| expect(makeSimpleRequest(serverHandler.handler), throwsStateError); |
| }); |
| |
| test("calls onClose when Server.close is called", () async { |
| var onCloseCalled = false; |
| var completer = new Completer(); |
| var serverHandler = new ServerHandler(LOCALHOST_URI, onClose: () { |
| onCloseCalled = true; |
| return completer.future; |
| }); |
| |
| var closeDone = false; |
| serverHandler.server.close().then((_) { |
| closeDone = true; |
| }); |
| expect(onCloseCalled, isTrue); |
| await new Future.delayed(Duration.ZERO); |
| |
| expect(closeDone, isFalse); |
| completer.complete(); |
| await new Future.delayed(Duration.ZERO); |
| |
| expect(closeDone, isTrue); |
| }); |
| |
| test("doesn't allow Server.mount to be called multiple times", () { |
| var serverHandler = new ServerHandler(LOCALHOST_URI); |
| serverHandler.server.mount((_) {}); |
| expect(() => serverHandler.server.mount((_) {}), throwsStateError); |
| expect(() => serverHandler.server.mount((_) {}), throwsStateError); |
| }); |
| } |