blob: f42b3612db684898b279896a5152f2910420a15d [file] [log] [blame]
// 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:pedantic/pedantic.dart';
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 = ServerHandler(localhostUri);
expect(serverHandler.server.url, equals(localhostUri));
});
test('pipes a request from ServerHandler.handler to a mounted handler',
() async {
var serverHandler = ServerHandler(localhostUri);
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 = ServerHandler(localhostUri);
var future = makeSimpleRequest(serverHandler.handler);
await 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 = ServerHandler(localhostUri);
serverHandler.server.mount(expectAsync1((_) => null, count: 0));
serverHandler.server.close();
expect(makeSimpleRequest(serverHandler.handler), throwsStateError);
});
test('calls onClose when Server.close is called', () async {
var onCloseCalled = false;
var completer = Completer();
var serverHandler = ServerHandler(localhostUri, onClose: () {
onCloseCalled = true;
return completer.future;
});
var closeDone = false;
unawaited(serverHandler.server.close().then((_) {
closeDone = true;
}));
expect(onCloseCalled, isTrue);
await Future.delayed(Duration.zero);
expect(closeDone, isFalse);
completer.complete();
await Future.delayed(Duration.zero);
expect(closeDone, isTrue);
});
test("doesn't allow Server.mount to be called multiple times", () {
var serverHandler = ServerHandler(localhostUri);
serverHandler.server.mount((_) => null);
expect(() => serverHandler.server.mount((_) => null), throwsStateError);
expect(() => serverHandler.server.mount((_) => null), throwsStateError);
});
}