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

Side by Side Diff: mojo/public/dart/third_party/shelf/test/create_middleware_test.dart

Issue 1346773002: Stop running pub get at gclient sync time and fix build bugs (Closed) Base URL: git@github.com:domokit/mojo.git@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
OLDNEW
(Empty)
1 // Copyright (c) 2014, 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 library shelf.create_middleware_test;
6
7 import 'dart:async';
8
9 import 'package:shelf/shelf.dart';
10 import 'package:test/test.dart';
11
12 import 'test_util.dart';
13
14 void main() {
15 test('forwards the request and response if both handlers are null', () {
16 var handler = const Pipeline()
17 .addMiddleware(createMiddleware())
18 .addHandler((request) {
19 return syncHandler(request, headers: {'from': 'innerHandler'});
20 });
21
22 return makeSimpleRequest(handler).then((response) {
23 expect(response.headers['from'], 'innerHandler');
24 });
25 });
26
27 group('requestHandler', () {
28 test('sync null response forwards to inner handler', () {
29 var handler = const Pipeline()
30 .addMiddleware(createMiddleware(requestHandler: (request) => null))
31 .addHandler(syncHandler);
32
33 return makeSimpleRequest(handler).then((response) {
34 expect(response.headers['from'], isNull);
35 });
36 });
37
38 test('async null response forwards to inner handler', () {
39 var handler = const Pipeline()
40 .addMiddleware(createMiddleware(
41 requestHandler: (request) => new Future.value(null)))
42 .addHandler(syncHandler);
43
44 return makeSimpleRequest(handler).then((response) {
45 expect(response.headers['from'], isNull);
46 });
47 });
48
49 test('sync response is returned', () {
50 var handler = const Pipeline()
51 .addMiddleware(createMiddleware(
52 requestHandler: (request) => _middlewareResponse))
53 .addHandler(_failHandler);
54
55 return makeSimpleRequest(handler).then((response) {
56 expect(response.headers['from'], 'middleware');
57 });
58 });
59
60 test('async response is returned', () {
61 var handler = const Pipeline()
62 .addMiddleware(createMiddleware(
63 requestHandler: (request) =>
64 new Future.value(_middlewareResponse)))
65 .addHandler(_failHandler);
66
67 return makeSimpleRequest(handler).then((response) {
68 expect(response.headers['from'], 'middleware');
69 });
70 });
71
72 group('with responseHandler', () {
73 test('with sync result, responseHandler is not called', () {
74 var middleware = createMiddleware(
75 requestHandler: (request) => _middlewareResponse,
76 responseHandler: (response) => fail('should not be called'));
77
78 var handler =
79 const Pipeline().addMiddleware(middleware).addHandler(syncHandler);
80
81 return makeSimpleRequest(handler).then((response) {
82 expect(response.headers['from'], 'middleware');
83 });
84 });
85
86 test('with async result, responseHandler is not called', () {
87 var middleware = createMiddleware(
88 requestHandler: (request) => new Future.value(_middlewareResponse),
89 responseHandler: (response) => fail('should not be called'));
90 var handler =
91 const Pipeline().addMiddleware(middleware).addHandler(syncHandler);
92
93 return makeSimpleRequest(handler).then((response) {
94 expect(response.headers['from'], 'middleware');
95 });
96 });
97 });
98 });
99
100 group('responseHandler', () {
101 test('innerHandler sync response is seen, replaced value continues', () {
102 var handler = const Pipeline()
103 .addMiddleware(createMiddleware(responseHandler: (response) {
104 expect(response.headers['from'], 'handler');
105 return _middlewareResponse;
106 })).addHandler((request) {
107 return syncHandler(request, headers: {'from': 'handler'});
108 });
109
110 return makeSimpleRequest(handler).then((response) {
111 expect(response.headers['from'], 'middleware');
112 });
113 });
114
115 test('innerHandler async response is seen, async value continues', () {
116 var handler = const Pipeline()
117 .addMiddleware(createMiddleware(responseHandler: (response) {
118 expect(response.headers['from'], 'handler');
119 return new Future.value(_middlewareResponse);
120 })).addHandler((request) {
121 return new Future(
122 () => syncHandler(request, headers: {'from': 'handler'}));
123 });
124
125 return makeSimpleRequest(handler).then((response) {
126 expect(response.headers['from'], 'middleware');
127 });
128 });
129 });
130
131 group('error handling', () {
132 test('sync error thrown by requestHandler bubbles down', () {
133 var handler = const Pipeline()
134 .addMiddleware(createMiddleware(
135 requestHandler: (request) => throw 'middleware error'))
136 .addHandler(_failHandler);
137
138 expect(makeSimpleRequest(handler), throwsA('middleware error'));
139 });
140
141 test('async error thrown by requestHandler bubbles down', () {
142 var handler = const Pipeline()
143 .addMiddleware(createMiddleware(
144 requestHandler: (request) =>
145 new Future.error('middleware error')))
146 .addHandler(_failHandler);
147
148 expect(makeSimpleRequest(handler), throwsA('middleware error'));
149 });
150
151 test('throw from responseHandler does not hit error handler', () {
152 var middleware = createMiddleware(responseHandler: (response) {
153 throw 'middleware error';
154 }, errorHandler: (e, s) => fail('should never get here'));
155
156 var handler =
157 const Pipeline().addMiddleware(middleware).addHandler(syncHandler);
158
159 expect(makeSimpleRequest(handler), throwsA('middleware error'));
160 });
161
162 test('requestHandler throw does not hit errorHandlers', () {
163 var middleware = createMiddleware(requestHandler: (request) {
164 throw 'middleware error';
165 }, errorHandler: (e, s) => fail('should never get here'));
166
167 var handler =
168 const Pipeline().addMiddleware(middleware).addHandler(syncHandler);
169
170 expect(makeSimpleRequest(handler), throwsA('middleware error'));
171 });
172
173 test('inner handler throws, is caught by errorHandler with response', () {
174 var middleware = createMiddleware(errorHandler: (error, stack) {
175 expect(error, 'bad handler');
176 return _middlewareResponse;
177 });
178
179 var handler = const Pipeline()
180 .addMiddleware(middleware)
181 .addHandler((request) {
182 throw 'bad handler';
183 });
184
185 return makeSimpleRequest(handler).then((response) {
186 expect(response.headers['from'], 'middleware');
187 });
188 });
189
190 test('inner handler throws, is caught by errorHandler and rethrown', () {
191 var middleware = createMiddleware(errorHandler: (error, stack) {
192 expect(error, 'bad handler');
193 throw error;
194 });
195
196 var handler = const Pipeline()
197 .addMiddleware(middleware)
198 .addHandler((request) {
199 throw 'bad handler';
200 });
201
202 expect(makeSimpleRequest(handler), throwsA('bad handler'));
203 });
204
205 test('error thrown by inner handler without a middleware errorHandler is '
206 'rethrown', () {
207 var middleware = createMiddleware();
208
209 var handler = const Pipeline()
210 .addMiddleware(middleware)
211 .addHandler((request) {
212 throw 'bad handler';
213 });
214
215 expect(makeSimpleRequest(handler), throwsA('bad handler'));
216 });
217
218 test("doesn't handle HijackException", () {
219 var middleware = createMiddleware(errorHandler: (error, stack) {
220 fail("error handler shouldn't be called");
221 });
222
223 var handler = const Pipeline()
224 .addMiddleware(middleware)
225 .addHandler((request) => throw const HijackException());
226
227 expect(makeSimpleRequest(handler),
228 throwsA(new isInstanceOf<HijackException>()));
229 });
230 });
231 }
232
233 _failHandler(Request request) => fail('should never get here');
234
235 final Response _middlewareResponse =
236 new Response.ok('middleware content', headers: {'from': 'middleware'});
OLDNEW
« no previous file with comments | « mojo/public/dart/third_party/shelf/test/cascade_test.dart ('k') | mojo/public/dart/third_party/shelf/test/hijack_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698