blob: 5bdf78a074031f2beabaff9cda632b4e13c63032 [file] [log] [blame]
// Copyright (c) 2012, 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 'dart:collection' show Queue;
import 'package:http/http.dart' as http;
import 'package:http/testing.dart';
import 'package:oauth2/oauth2.dart' as oauth2;
import 'package:test/test.dart';
class ExpectClient extends MockClient {
final Queue<MockClientHandler> _handlers;
ExpectClient._(MockClientHandler fn)
: _handlers = new Queue<MockClientHandler>(),
super(fn);
factory ExpectClient() {
var client;
client = new ExpectClient._((request) =>
client._handleRequest(request));
return client;
}
void expectRequest(MockClientHandler fn) {
var completer = new Completer();
expect(completer.future, completes);
_handlers.add((request) {
completer.complete(null);
return fn(request);
});
}
Future<http.Response> _handleRequest(http.Request request) {
if (_handlers.isEmpty) {
return new Future.value(new http.Response('not found', 404));
} else {
return _handlers.removeFirst()(request);
}
}
}
/// A matcher for AuthorizationExceptions.
const isAuthorizationException = const _AuthorizationException();
/// A matcher for functions that throw AuthorizationException.
const Matcher throwsAuthorizationException =
const Throws(isAuthorizationException);
class _AuthorizationException extends TypeMatcher {
const _AuthorizationException() : super("AuthorizationException");
bool matches(item, Map matchState) =>
item is oauth2.AuthorizationException;
}
/// A matcher for ExpirationExceptions.
const isExpirationException = const _ExpirationException();
/// A matcher for functions that throw ExpirationException.
const Matcher throwsExpirationException =
const Throws(isExpirationException);
class _ExpirationException extends TypeMatcher {
const _ExpirationException() : super("ExpirationException");
bool matches(item, Map matchState) =>
item is oauth2.ExpirationException;
}