| // 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' as shelf; |
| import 'package:test/src/util/path_handler.dart'; |
| import 'package:test/test.dart'; |
| |
| void main() { |
| var handler; |
| setUp(() => handler = new PathHandler()); |
| |
| _handle(request) => new Future.sync(() => handler.handler(request)); |
| |
| test("returns a 404 for a root URL", () async { |
| var request = new shelf.Request("GET", Uri.parse("http://localhost/")); |
| expect((await _handle(request)).statusCode, equals(404)); |
| }); |
| |
| test("returns a 404 for an unregistered URL", () async { |
| var request = new shelf.Request("GET", Uri.parse("http://localhost/foo")); |
| expect((await _handle(request)).statusCode, equals(404)); |
| }); |
| |
| test("runs a handler for an exact URL", () async { |
| var request = new shelf.Request("GET", Uri.parse("http://localhost/foo")); |
| handler.add("foo", expectAsync1((request) { |
| expect(request.handlerPath, equals('/foo')); |
| expect(request.url.path, isEmpty); |
| return new shelf.Response.ok("good job!"); |
| })); |
| |
| var response = await _handle(request); |
| expect(response.statusCode, equals(200)); |
| expect(response.readAsString(), completion(equals("good job!"))); |
| }); |
| |
| test("runs a handler for a suffix", () async { |
| var request = new shelf.Request( |
| "GET", Uri.parse("http://localhost/foo/bar")); |
| handler.add("foo", expectAsync1((request) { |
| expect(request.handlerPath, equals('/foo/')); |
| expect(request.url.path, 'bar'); |
| return new shelf.Response.ok("good job!"); |
| })); |
| |
| var response = await _handle(request); |
| expect(response.statusCode, equals(200)); |
| expect(response.readAsString(), completion(equals("good job!"))); |
| }); |
| |
| test("runs the longest matching handler", () async { |
| var request = new shelf.Request( |
| "GET", Uri.parse("http://localhost/foo/bar/baz")); |
| |
| handler.add("foo", expectAsync1((_) {}, count: 0)); |
| handler.add("foo/bar", expectAsync1((request) { |
| expect(request.handlerPath, equals('/foo/bar/')); |
| expect(request.url.path, 'baz'); |
| return new shelf.Response.ok("good job!"); |
| })); |
| handler.add("foo/bar/baz/bang", expectAsync1((_) {}, count: 0)); |
| |
| var response = await _handle(request); |
| expect(response.statusCode, equals(200)); |
| expect(response.readAsString(), completion(equals("good job!"))); |
| }); |
| } |