blob: 79058611e243a76e2ad94b977bbc865c6a3496f3 [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.
@TestOn('vm')
import 'dart:async';
import 'dart:io';
import 'package:http/http.dart' as http;
import 'package:shelf/shelf_io.dart';
import 'package:test/test.dart';
import 'test_util.dart';
void main() {
IOServer server;
setUp(() async {
try {
server = await IOServer.bind(InternetAddress.LOOPBACK_IP_V6, 0);
} on SocketException catch (_) {
server = await IOServer.bind(InternetAddress.LOOPBACK_IP_V4, 0);
}
});
tearDown(() => server.close());
test("serves HTTP requests with the mounted handler", () async {
server.mount(syncHandler);
expect(await http.read(server.url), equals('Hello from /'));
});
test("delays HTTP requests until a handler is mounted", () async {
expect(http.read(server.url), completion(equals('Hello from /')));
await new Future.delayed(Duration.zero);
server.mount(asyncHandler);
});
test("disallows more than one handler from being mounted", () async {
server.mount((_) {});
expect(() => server.mount((_) {}), throwsStateError);
expect(() => server.mount((_) {}), throwsStateError);
});
}