| Index: pkg/oauth2/test/utils_test.dart
|
| diff --git a/pkg/oauth2/test/utils_test.dart b/pkg/oauth2/test/utils_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..1650f2240c1820ec0cbb8dac062dd1305768a13c
|
| --- /dev/null
|
| +++ b/pkg/oauth2/test/utils_test.dart
|
| @@ -0,0 +1,106 @@
|
| +// 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.
|
| +
|
| +library utils_test;
|
| +
|
| +import '../../unittest/lib/unittest.dart';
|
| +import '../lib/src/utils.dart';
|
| +
|
| +
|
| +// A matcher that matches a Pair.
|
| +Matcher pairOf(Matcher firstMatcher, Matcher lastMatcher) =>
|
| + new _PairMatcher(firstMatcher, lastMatcher);
|
| +
|
| +class _PairMatcher extends BaseMatcher {
|
| + final Matcher _firstMatcher;
|
| + final Matcher _lastMatcher;
|
| +
|
| + _PairMatcher(this._firstMatcher, this._lastMatcher);
|
| +
|
| + bool matches(item, MatchState matchState) {
|
| + if (item is! Pair) return false;
|
| + return _firstMatcher.matches(item.first, matchState) &&
|
| + _lastMatcher.matches(item.last, matchState);
|
| + }
|
| +
|
| + Description describe(Description description) {
|
| + description.addAll("(", ", ", ")", [_firstMatcher, _lastMatcher]);
|
| + }
|
| +}
|
| +
|
| +
|
| +void main() {
|
| + group('parseAuthenticateHeader', () {
|
| + test("parses a scheme", () {
|
| + expect(parseAuthenticateHeader('bearer'),
|
| + pairOf(equals('bearer'), equals({})));
|
| + });
|
| +
|
| + test("lower-cases the scheme", () {
|
| + expect(parseAuthenticateHeader('BeaRer'),
|
| + pairOf(equals('bearer'), equals({})));
|
| + });
|
| +
|
| + test("parses a scheme with trailing whitespace", () {
|
| + expect(parseAuthenticateHeader('bearer '),
|
| + pairOf(equals('bearer'), equals({})));
|
| + });
|
| +
|
| + test("parses a scheme with one param", () {
|
| + expect(parseAuthenticateHeader('bearer foo="bar"'),
|
| + pairOf(equals('bearer'), equals({'foo': 'bar'})));
|
| + });
|
| +
|
| + test("parses a scheme with several params", () {
|
| + var header = 'bearer foo="bar", bar="baz" ,baz="qux"';
|
| + expect(parseAuthenticateHeader(header),
|
| + pairOf(equals('bearer'), equals({
|
| + 'foo': 'bar',
|
| + 'bar': 'baz',
|
| + 'baz': 'qux'
|
| + })));
|
| + });
|
| +
|
| + test("lower-cases parameter names but not values", () {
|
| + expect(parseAuthenticateHeader('bearer FoO="bAr"'),
|
| + pairOf(equals('bearer'), equals({'foo': 'bAr'})));
|
| + });
|
| +
|
| + test("allows empty values", () {
|
| + expect(parseAuthenticateHeader('bearer foo=""'),
|
| + pairOf(equals('bearer'), equals({'foo': ''})));
|
| + });
|
| +
|
| + test("won't parse an empty string", () {
|
| + expect(() => parseAuthenticateHeader(''),
|
| + throwsFormatException);
|
| + });
|
| +
|
| + test("won't parse a token without a value", () {
|
| + expect(() => parseAuthenticateHeader('bearer foo'),
|
| + throwsFormatException);
|
| +
|
| + expect(() => parseAuthenticateHeader('bearer foo='),
|
| + throwsFormatException);
|
| + });
|
| +
|
| + test("won't parse a token without a value", () {
|
| + expect(() => parseAuthenticateHeader('bearer foo'),
|
| + throwsFormatException);
|
| +
|
| + expect(() => parseAuthenticateHeader('bearer foo='),
|
| + throwsFormatException);
|
| + });
|
| +
|
| + test("won't parse a trailing comma", () {
|
| + expect(() => parseAuthenticateHeader('bearer foo="bar",'),
|
| + throwsFormatException);
|
| + });
|
| +
|
| + test("won't parse a multiple params without a comma", () {
|
| + expect(() => parseAuthenticateHeader('bearer foo="bar" bar="baz"'),
|
| + throwsFormatException);
|
| + });
|
| + });
|
| +}
|
|
|