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

Side by Side Diff: pkg/shelf/test/cascade_test.dart

Issue 814113004: Pull args, intl, logging, shelf, and source_maps out of the SDK. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Also csslib. Created 6 years 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 | Annotate | Revision Log
« no previous file with comments | « pkg/shelf/pubspec.yaml ('k') | pkg/shelf/test/create_middleware_test.dart » ('j') | 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) 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.cascade_test;
6
7 import 'package:shelf/shelf.dart';
8 import 'package:shelf/src/util.dart';
9 import 'package:unittest/unittest.dart';
10
11 import 'test_util.dart';
12
13 void main() {
14 group('a cascade with several handlers', () {
15 var handler;
16 setUp(() {
17 handler = new Cascade().add((request) {
18 if (request.headers['one'] == 'false') {
19 return new Response.notFound('handler 1');
20 } else {
21 return new Response.ok('handler 1');
22 }
23 }).add((request) {
24 if (request.headers['two'] == 'false') {
25 return new Response.notFound('handler 2');
26 } else {
27 return new Response.ok('handler 2');
28 }
29 }).add((request) {
30 if (request.headers['three'] == 'false') {
31 return new Response.notFound('handler 3');
32 } else {
33 return new Response.ok('handler 3');
34 }
35 }).handler;
36 });
37
38 test('the first response should be returned if it matches', () {
39 return makeSimpleRequest(handler).then((response) {
40 expect(response.statusCode, equals(200));
41 expect(response.readAsString(), completion(equals('handler 1')));
42 });
43 });
44
45 test("the second response should be returned if it matches and the first "
46 "doesn't", () {
47 return syncFuture(() {
48 return handler(new Request('GET', LOCALHOST_URI,
49 headers: {'one': 'false'}));
50 }).then((response) {
51 expect(response.statusCode, equals(200));
52 expect(response.readAsString(), completion(equals('handler 2')));
53 });
54 });
55
56 test("the third response should be returned if it matches and the first "
57 "two don't", () {
58 return syncFuture(() {
59 return handler(new Request('GET', LOCALHOST_URI,
60 headers: {'one': 'false', 'two': 'false'}));
61 }).then((response) {
62 expect(response.statusCode, equals(200));
63 expect(response.readAsString(), completion(equals('handler 3')));
64 });
65 });
66
67 test("the third response should be returned if no response matches", () {
68 return syncFuture(() {
69 return handler(new Request('GET', LOCALHOST_URI,
70 headers: {'one': 'false', 'two': 'false', 'three': 'false'}));
71 }).then((response) {
72 expect(response.statusCode, equals(404));
73 expect(response.readAsString(), completion(equals('handler 3')));
74 });
75 });
76 });
77
78 test('a 404 response triggers a cascade by default', () {
79 var handler = new Cascade()
80 .add((_) => new Response.notFound('handler 1'))
81 .add((_) => new Response.ok('handler 2'))
82 .handler;
83
84 return makeSimpleRequest(handler).then((response) {
85 expect(response.statusCode, equals(200));
86 expect(response.readAsString(), completion(equals('handler 2')));
87 });
88 });
89
90 test('a 405 response triggers a cascade by default', () {
91 var handler = new Cascade()
92 .add((_) => new Response(405))
93 .add((_) => new Response.ok('handler 2'))
94 .handler;
95
96 return makeSimpleRequest(handler).then((response) {
97 expect(response.statusCode, equals(200));
98 expect(response.readAsString(), completion(equals('handler 2')));
99 });
100 });
101
102 test('[statusCodes] controls which statuses cause cascading', () {
103 var handler = new Cascade(statusCodes: [302, 403])
104 .add((_) => new Response.found('/'))
105 .add((_) => new Response.forbidden('handler 2'))
106 .add((_) => new Response.notFound('handler 3'))
107 .add((_) => new Response.ok('handler 4'))
108 .handler;
109
110 return makeSimpleRequest(handler).then((response) {
111 expect(response.statusCode, equals(404));
112 expect(response.readAsString(), completion(equals('handler 3')));
113 });
114 });
115
116 test('[shouldCascade] controls which responses cause cascading', () {
117 var handler = new Cascade(
118 shouldCascade: (response) => response.statusCode % 2 == 1)
119 .add((_) => new Response.movedPermanently('/'))
120 .add((_) => new Response.forbidden('handler 2'))
121 .add((_) => new Response.notFound('handler 3'))
122 .add((_) => new Response.ok('handler 4'))
123 .handler;
124
125 return makeSimpleRequest(handler).then((response) {
126 expect(response.statusCode, equals(404));
127 expect(response.readAsString(), completion(equals('handler 3')));
128 });
129 });
130
131 group('errors', () {
132 test('getting the handler for an empty cascade fails', () {
133 expect(() => new Cascade().handler, throwsStateError);
134 });
135
136 test('passing [statusCodes] and [shouldCascade] at the same time fails',
137 () {
138 expect(() => new Cascade(
139 statusCodes: [404, 405], shouldCascade: (_) => false),
140 throwsArgumentError);
141 });
142 });
143 }
OLDNEW
« no previous file with comments | « pkg/shelf/pubspec.yaml ('k') | pkg/shelf/test/create_middleware_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698