| Index: mojo/public/dart/third_party/shelf_static/test/test_util.dart
|
| diff --git a/mojo/public/dart/third_party/shelf_static/test/test_util.dart b/mojo/public/dart/third_party/shelf_static/test/test_util.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..b96abce5bc79236e78dacc83927531fa8939acfc
|
| --- /dev/null
|
| +++ b/mojo/public/dart/third_party/shelf_static/test/test_util.dart
|
| @@ -0,0 +1,65 @@
|
| +// 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.
|
| +
|
| +library shelf_static.test_util;
|
| +
|
| +import 'dart:async';
|
| +
|
| +import 'package:path/path.dart' as p;
|
| +import 'package:shelf/shelf.dart';
|
| +import 'package:shelf_static/src/util.dart';
|
| +import 'package:test/test.dart';
|
| +
|
| +final p.Context _ctx = p.url;
|
| +
|
| +/// Makes a simple GET request to [handler] and returns the result.
|
| +Future<Response> makeRequest(Handler handler, String path,
|
| + {String handlerPath, Map<String, String> headers}) {
|
| + var rootedHandler = _rootHandler(handlerPath, handler);
|
| + return new Future.sync(() => rootedHandler(_fromPath(path, headers)));
|
| +}
|
| +
|
| +Request _fromPath(String path, Map<String, String> headers) =>
|
| + new Request('GET', Uri.parse('http://localhost' + path), headers: headers);
|
| +
|
| +Handler _rootHandler(String path, Handler handler) {
|
| + if (path == null || path.isEmpty) {
|
| + return handler;
|
| + }
|
| +
|
| + return (Request request) {
|
| + if (!_ctx.isWithin("/$path", request.requestedUri.path)) {
|
| + return new Response.notFound('not found');
|
| + }
|
| + assert(request.handlerPath == '/');
|
| +
|
| + var relativeRequest = request.change(path: path);
|
| +
|
| + return handler(relativeRequest);
|
| + };
|
| +}
|
| +
|
| +Matcher atSameTimeToSecond(value) =>
|
| + new _SecondResolutionDateTimeMatcher(value);
|
| +
|
| +class _SecondResolutionDateTimeMatcher extends Matcher {
|
| + final DateTime _target;
|
| +
|
| + _SecondResolutionDateTimeMatcher(DateTime target)
|
| + : this._target = toSecondResolution(target);
|
| +
|
| + bool matches(item, Map matchState) {
|
| + if (item is! DateTime) return false;
|
| +
|
| + return datesEqualToSecond(_target, item);
|
| + }
|
| +
|
| + Description describe(Description descirption) => descirption.add(
|
| + 'Must be at the same moment as $_target with resolution '
|
| + 'to the second.');
|
| +}
|
| +
|
| +bool datesEqualToSecond(DateTime d1, DateTime d2) {
|
| + return toSecondResolution(d1).isAtSameMomentAs(toSecondResolution(d2));
|
| +}
|
|
|