Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Side by Side Diff: test/authentication_challenge_test.dart

Issue 1307353003: Add an AuthenticationChallenge class. (Closed) Base URL: git@github.com:dart-lang/http_parser@master
Patch Set: Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« lib/src/authentication_challenge.dart ('K') | « pubspec.yaml ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 import 'package:http_parser/http_parser.dart';
6 import 'package:test/test.dart';
7
8 void main() {
9 group("parse", () {
10 _singleChallengeTests(
11 (challenge) => new AuthenticationChallenge.parse(challenge));
12 });
13
14 group("parseHeader", () {
15 group("with a single challenge", () {
16 _singleChallengeTests((challenge) {
17 var challenges = AuthenticationChallenge.parseHeader(challenge);
18 expect(challenges, hasLength(1));
19 return challenges.single;
20 });
21 });
22
23 test("parses multiple challenges", () {
24 var challenges = AuthenticationChallenge.parseHeader(
25 "scheme1 realm=fblthp, scheme2 realm=asdfg");
26 expect(challenges, hasLength(2));
27 expect(challenges.first.scheme, equals("scheme1"));
28 expect(challenges.first.parameters, equals({"realm": "fblthp"}));
29 expect(challenges.last.scheme, equals("scheme2"));
30 expect(challenges.last.parameters, equals({"realm": "asdfg"}));
31 });
32
33 test("parses multiple challenges with multiple parameters", () {
34 var challenges = AuthenticationChallenge.parseHeader(
35 "scheme1 realm=fblthp, foo=bar, scheme2 realm=asdfg, baz=bang");
36 expect(challenges, hasLength(2));
37
38 expect(challenges.first.scheme, equals("scheme1"));
39 expect(challenges.first.parameters, equals({
40 "realm": "fblthp",
41 "foo": "bar"
42 }));
43
44 expect(challenges.last.scheme, equals("scheme2"));
45 expect(challenges.last.parameters, equals({
46 "realm": "asdfg",
47 "baz": "bang"
48 }));
49 });
50 });
51 }
52
53 /// Tests to run for parsing a single challenge.
54 ///
55 /// These are run on both [AuthenticationChallenge.parse] and
56 /// [AuthenticationChallenge.parseHeader], since they use almost entirely
57 /// separate code paths.
58 void _singleChallengeTests(
59 AuthenticationChallenge parseChallenge(String challenge)) {
60 test("parses a simple challenge", () {
61 var challenge = parseChallenge("scheme realm=fblthp");
62 expect(challenge.scheme, equals("scheme"));
63 expect(challenge.parameters, equals({"realm": "fblthp"}));
64 });
65
66 test("parses multiple parameters", () {
67 var challenge = parseChallenge("scheme realm=fblthp, foo=bar, baz=qux");
68 expect(challenge.scheme, equals("scheme"));
69 expect(challenge.parameters, equals({
70 "realm": "fblthp",
71 "foo": "bar",
72 "baz": "qux"
73 }));
74 });
75
76 test("parses quoted string parameters", () {
77 var challenge = parseChallenge('scheme realm="fblthp, foo=bar", baz="qux"');
78 expect(challenge.scheme, equals("scheme"));
79 expect(challenge.parameters, equals({
80 "realm": "fblthp, foo=bar",
81 "baz": "qux"
82 }));
83 });
84
85 test("normalizes the case of the scheme", () {
86 var challenge = parseChallenge("ScHeMe realm=fblthp");
87 expect(challenge.scheme, equals("scheme"));
88 expect(challenge.parameters, equals({"realm": "fblthp"}));
89 });
90
91 test("normalizes the case of the parameter name", () {
92 var challenge = parseChallenge("scheme ReAlM=fblthp");
93 expect(challenge.scheme, equals("scheme"));
94 expect(challenge.parameters, containsPair("realm", "fblthp"));
95 });
Bob Nystrom 2015/08/25 21:28:59 Test that it doesn't normalize the parameter value
nweiz 2015/08/25 22:02:08 Done.
96
97 test("allows extra whitespace", () {
98 var challenge = parseChallenge(
99 " scheme\t \trealm\t = \tfblthp\t, \tfoo\t\r\n =\tbar\t");
100 expect(challenge.scheme, equals("scheme"));
101 expect(challenge.parameters, equals({
102 "realm": "fblthp",
103 "foo": "bar"
104 }));
105 });
106
107 test("allows an empty parameter", () {
108 var challenge = parseChallenge(
109 "scheme realm=fblthp, , foo=bar");
110 expect(challenge.scheme, equals("scheme"));
111 expect(challenge.parameters, equals({
112 "realm": "fblthp",
113 "foo": "bar"
114 }));
115 });
Bob Nystrom 2015/08/25 21:28:59 What about a trailing comma?
nweiz 2015/08/25 22:02:08 Done.
116
117 test("disallows only a scheme", () {
118 expect(() => parseChallenge("scheme"),
119 throwsFormatException);
120 });
121
122 test("disallows a valueless parameter", () {
123 expect(() => parseChallenge("scheme realm"),
124 throwsFormatException);
125 expect(() => parseChallenge("scheme realm="),
126 throwsFormatException);
127 expect(() => parseChallenge("scheme realm, foo=bar"),
128 throwsFormatException);
129 });
130
131 test("requires a space after the scheme", () {
132 expect(() => parseChallenge("scheme\trealm"),
133 throwsFormatException);
134 expect(() => parseChallenge("scheme\r\n\trealm="),
135 throwsFormatException);
136 });
137
138 test("disallows junk after the parameters", () {
139 expect(() => parseChallenge("scheme realm=fblthp foo"),
140 throwsFormatException);
141 expect(() => parseChallenge("scheme realm=fblthp, foo=bar baz"),
142 throwsFormatException);
143 });
144 }
OLDNEW
« lib/src/authentication_challenge.dart ('K') | « pubspec.yaml ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698