| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 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 | 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. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library shelf.create_middleware_test; | 5 library shelf.create_middleware_test; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 | 8 |
| 9 import 'package:shelf/shelf.dart'; | 9 import 'package:shelf/shelf.dart'; |
| 10 import 'package:unittest/unittest.dart'; | 10 import 'package:unittest/unittest.dart'; |
| 11 | 11 |
| 12 import 'test_util.dart'; | 12 import 'test_util.dart'; |
| 13 | 13 |
| 14 void main() { | 14 void main() { |
| 15 test('forwards the request and response if both handlers are null', () { | 15 test('forwards the request and response if both handlers are null', () { |
| 16 var handler = const Pipeline() | 16 var handler = const Pipeline() |
| 17 .addMiddleware(createMiddleware()) | 17 .addMiddleware(createMiddleware()) |
| 18 .addHandler((request) { | 18 .addHandler((request) { |
| 19 return syncHandler(request, headers: {'from' : 'innerHandler'}); | 19 return syncHandler(request, headers: {'from': 'innerHandler'}); |
| 20 }); | 20 }); |
| 21 | 21 |
| 22 return makeSimpleRequest(handler).then((response) { | 22 return makeSimpleRequest(handler).then((response) { |
| 23 expect(response.headers['from'], 'innerHandler'); | 23 expect(response.headers['from'], 'innerHandler'); |
| 24 }); | 24 }); |
| 25 }); | 25 }); |
| 26 | 26 |
| 27 group('requestHandler', () { | 27 group('requestHandler', () { |
| 28 test('sync null response forwards to inner handler', () { | 28 test('sync null response forwards to inner handler', () { |
| 29 var handler = const Pipeline() | 29 var handler = const Pipeline() |
| 30 .addMiddleware(createMiddleware(requestHandler: (request) => null)) | 30 .addMiddleware(createMiddleware(requestHandler: (request) => null)) |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 93 | 93 |
| 94 return makeSimpleRequest(handler).then((response) { | 94 return makeSimpleRequest(handler).then((response) { |
| 95 expect(response.headers['from'], 'middleware'); | 95 expect(response.headers['from'], 'middleware'); |
| 96 }); | 96 }); |
| 97 }); | 97 }); |
| 98 }); | 98 }); |
| 99 }); | 99 }); |
| 100 | 100 |
| 101 group('responseHandler', () { | 101 group('responseHandler', () { |
| 102 test('innerHandler sync response is seen, replaced value continues', () { | 102 test('innerHandler sync response is seen, replaced value continues', () { |
| 103 var handler = const Pipeline().addMiddleware(createMiddleware( | 103 var handler = const Pipeline() |
| 104 responseHandler: (response) { | 104 .addMiddleware(createMiddleware(responseHandler: (response) { |
| 105 expect(response.headers['from'], 'handler'); | 105 expect(response.headers['from'], 'handler'); |
| 106 return _middlewareResponse; | 106 return _middlewareResponse; |
| 107 })).addHandler((request) { | 107 })).addHandler((request) { |
| 108 return syncHandler(request, headers: {'from' : 'handler'} ); | 108 return syncHandler(request, headers: {'from': 'handler'}); |
| 109 }); | 109 }); |
| 110 | 110 |
| 111 return makeSimpleRequest(handler).then((response) { | 111 return makeSimpleRequest(handler).then((response) { |
| 112 expect(response.headers['from'], 'middleware'); | 112 expect(response.headers['from'], 'middleware'); |
| 113 }); | 113 }); |
| 114 }); | 114 }); |
| 115 | 115 |
| 116 test('innerHandler async response is seen, async value continues', () { | 116 test('innerHandler async response is seen, async value continues', () { |
| 117 var handler = const Pipeline().addMiddleware( | 117 var handler = const Pipeline() |
| 118 createMiddleware(responseHandler: (response) { | 118 .addMiddleware(createMiddleware(responseHandler: (response) { |
| 119 expect(response.headers['from'], 'handler'); | 119 expect(response.headers['from'], 'handler'); |
| 120 return new Future.value(_middlewareResponse); | 120 return new Future.value(_middlewareResponse); |
| 121 })).addHandler((request) { | 121 })).addHandler((request) { |
| 122 return new Future(() => syncHandler( | 122 return new Future( |
| 123 request, headers: {'from' : 'handler'} )); | 123 () => syncHandler(request, headers: {'from': 'handler'})); |
| 124 }); | 124 }); |
| 125 | 125 |
| 126 return makeSimpleRequest(handler).then((response) { | 126 return makeSimpleRequest(handler).then((response) { |
| 127 expect(response.headers['from'], 'middleware'); | 127 expect(response.headers['from'], 'middleware'); |
| 128 }); | 128 }); |
| 129 }); | 129 }); |
| 130 }); | 130 }); |
| 131 | 131 |
| 132 group('error handling', () { | 132 group('error handling', () { |
| 133 test('sync error thrown by requestHandler bubbles down', () { | 133 test('sync error thrown by requestHandler bubbles down', () { |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 188 expect(response.headers['from'], 'middleware'); | 188 expect(response.headers['from'], 'middleware'); |
| 189 }); | 189 }); |
| 190 }); | 190 }); |
| 191 | 191 |
| 192 test('inner handler throws, is caught by errorHandler and rethrown', () { | 192 test('inner handler throws, is caught by errorHandler and rethrown', () { |
| 193 var middleware = createMiddleware(errorHandler: (error, stack) { | 193 var middleware = createMiddleware(errorHandler: (error, stack) { |
| 194 expect(error, 'bad handler'); | 194 expect(error, 'bad handler'); |
| 195 throw error; | 195 throw error; |
| 196 }); | 196 }); |
| 197 | 197 |
| 198 var handler = const Pipeline().addMiddleware(middleware) | 198 var handler = const Pipeline() |
| 199 .addMiddleware(middleware) |
| 199 .addHandler((request) { | 200 .addHandler((request) { |
| 200 throw 'bad handler'; | 201 throw 'bad handler'; |
| 201 }); | 202 }); |
| 202 | 203 |
| 203 expect(makeSimpleRequest(handler), throwsA('bad handler')); | 204 expect(makeSimpleRequest(handler), throwsA('bad handler')); |
| 204 }); | 205 }); |
| 205 | 206 |
| 206 test('error thrown by inner handler without a middleware errorHandler is ' | 207 test('error thrown by inner handler without a middleware errorHandler is ' |
| 207 'rethrown', () { | 208 'rethrown', () { |
| 208 var middleware = createMiddleware(); | 209 var middleware = createMiddleware(); |
| 209 | 210 |
| 210 var handler = const Pipeline().addMiddleware(middleware) | 211 var handler = const Pipeline() |
| 212 .addMiddleware(middleware) |
| 211 .addHandler((request) { | 213 .addHandler((request) { |
| 212 throw 'bad handler'; | 214 throw 'bad handler'; |
| 213 }); | 215 }); |
| 214 | 216 |
| 215 expect(makeSimpleRequest(handler), throwsA('bad handler')); | 217 expect(makeSimpleRequest(handler), throwsA('bad handler')); |
| 216 }); | 218 }); |
| 217 | 219 |
| 218 test("doesn't handle HijackException", () { | 220 test("doesn't handle HijackException", () { |
| 219 var middleware = createMiddleware(errorHandler: (error, stack) { | 221 var middleware = createMiddleware(errorHandler: (error, stack) { |
| 220 fail("error handler shouldn't be called"); | 222 fail("error handler shouldn't be called"); |
| 221 }); | 223 }); |
| 222 | 224 |
| 223 var handler = const Pipeline().addMiddleware(middleware) | 225 var handler = const Pipeline() |
| 226 .addMiddleware(middleware) |
| 224 .addHandler((request) => throw const HijackException()); | 227 .addHandler((request) => throw const HijackException()); |
| 225 | 228 |
| 226 expect(makeSimpleRequest(handler), | 229 expect(makeSimpleRequest(handler), |
| 227 throwsA(new isInstanceOf<HijackException>())); | 230 throwsA(new isInstanceOf<HijackException>())); |
| 228 }); | 231 }); |
| 229 }); | 232 }); |
| 230 } | 233 } |
| 231 | 234 |
| 232 _failHandler(Request request) => fail('should never get here'); | 235 _failHandler(Request request) => fail('should never get here'); |
| 233 | 236 |
| 234 final Response _middlewareResponse = | 237 final Response _middlewareResponse = |
| 235 new Response.ok('middleware content', headers: {'from': 'middleware'}); | 238 new Response.ok('middleware content', headers: {'from': 'middleware'}); |
| OLD | NEW |