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

Side by Side Diff: pkg/http/test/multipart_test.dart

Issue 810223002: Remove the http package from the repo. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: 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
OLDNEW
(Empty)
1 // Copyright (c) 2013, 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 multipart_test;
6
7 import 'dart:async';
8
9 import 'package:http/http.dart' as http;
10 import 'package:http_parser/http_parser.dart';
11 import 'package:unittest/unittest.dart';
12
13 import 'utils.dart';
14
15 void main() {
16 test('empty', () {
17 var request = new http.MultipartRequest('POST', dummyUrl);
18 expect(request, bodyMatches('''
19 --{{boundary}}--
20 '''));
21 });
22
23 test('with fields and files', () {
24 var request = new http.MultipartRequest('POST', dummyUrl);
25 request.fields['field1'] = 'value1';
26 request.fields['field2'] = 'value2';
27 request.files.add(new http.MultipartFile.fromString("file1", "contents1",
28 filename: "filename1.txt"));
29 request.files.add(new http.MultipartFile.fromString("file2", "contents2"));
30
31 expect(request, bodyMatches('''
32 --{{boundary}}
33 content-disposition: form-data; name="field1"
34
35 value1
36 --{{boundary}}
37 content-disposition: form-data; name="field2"
38
39 value2
40 --{{boundary}}
41 content-type: text/plain; charset=utf-8
42 content-disposition: form-data; name="file1"; filename="filename1.txt"
43
44 contents1
45 --{{boundary}}
46 content-type: text/plain; charset=utf-8
47 content-disposition: form-data; name="file2"
48
49 contents2
50 --{{boundary}}--
51 '''));
52 });
53
54 test('with a unicode field name', () {
55 var request = new http.MultipartRequest('POST', dummyUrl);
56 request.fields['fïēld'] = 'value';
57
58 expect(request, bodyMatches('''
59 --{{boundary}}
60 content-disposition: form-data; name="fïēld"
61
62 value
63 --{{boundary}}--
64 '''));
65 });
66
67 test('with a field name with newlines', () {
68 var request = new http.MultipartRequest('POST', dummyUrl);
69 request.fields['foo\nbar\rbaz\r\nbang'] = 'value';
70
71 expect(request, bodyMatches('''
72 --{{boundary}}
73 content-disposition: form-data; name="foo%0D%0Abar%0D%0Abaz%0D%0Abang"
74
75 value
76 --{{boundary}}--
77 '''));
78 });
79
80 test('with a field name with a quote', () {
81 var request = new http.MultipartRequest('POST', dummyUrl);
82 request.fields['foo"bar'] = 'value';
83
84 expect(request, bodyMatches('''
85 --{{boundary}}
86 content-disposition: form-data; name="foo%22bar"
87
88 value
89 --{{boundary}}--
90 '''));
91 });
92
93 test('with a unicode field value', () {
94 var request = new http.MultipartRequest('POST', dummyUrl);
95 request.fields['field'] = 'vⱥlūe';
96
97 expect(request, bodyMatches('''
98 --{{boundary}}
99 content-disposition: form-data; name="field"
100 content-type: text/plain; charset=utf-8
101
102 vⱥlūe
103 --{{boundary}}--
104 '''));
105 });
106
107 test('with a unicode filename', () {
108 var request = new http.MultipartRequest('POST', dummyUrl);
109 request.files.add(new http.MultipartFile.fromString('file', 'contents',
110 filename: 'fïlēname.txt'));
111
112 expect(request, bodyMatches('''
113 --{{boundary}}
114 content-type: text/plain; charset=utf-8
115 content-disposition: form-data; name="file"; filename="fïlēname.txt"
116
117 contents
118 --{{boundary}}--
119 '''));
120 });
121
122 test('with a filename with newlines', () {
123 var request = new http.MultipartRequest('POST', dummyUrl);
124 request.files.add(new http.MultipartFile.fromString('file', 'contents',
125 filename: 'foo\nbar\rbaz\r\nbang'));
126
127 expect(request, bodyMatches('''
128 --{{boundary}}
129 content-type: text/plain; charset=utf-8
130 content-disposition: form-data; name="file"; filename="foo%0D%0Abar%0D%0 Abaz%0D%0Abang"
131
132 contents
133 --{{boundary}}--
134 '''));
135 });
136
137 test('with a filename with a quote', () {
138 var request = new http.MultipartRequest('POST', dummyUrl);
139 request.files.add(new http.MultipartFile.fromString('file', 'contents',
140 filename: 'foo"bar'));
141
142 expect(request, bodyMatches('''
143 --{{boundary}}
144 content-type: text/plain; charset=utf-8
145 content-disposition: form-data; name="file"; filename="foo%22bar"
146
147 contents
148 --{{boundary}}--
149 '''));
150 });
151
152 test('with a string file with a content-type but no charset', () {
153 var request = new http.MultipartRequest('POST', dummyUrl);
154 var file = new http.MultipartFile.fromString('file', '{"hello": "world"}',
155 contentType: new MediaType('application', 'json'));
156 request.files.add(file);
157
158 expect(request, bodyMatches('''
159 --{{boundary}}
160 content-type: application/json; charset=utf-8
161 content-disposition: form-data; name="file"
162
163 {"hello": "world"}
164 --{{boundary}}--
165 '''));
166 });
167
168 test('with a file with a iso-8859-1 body', () {
169 var request = new http.MultipartRequest('POST', dummyUrl);
170 // "Ã¥" encoded as ISO-8859-1 and then read as UTF-8 results in "å".
171 var file = new http.MultipartFile.fromString('file', 'non-ascii: "Ã¥"',
172 contentType: new MediaType('text', 'plain', {'charset': 'iso-8859-1'}));
173 request.files.add(file);
174
175 expect(request, bodyMatches('''
176 --{{boundary}}
177 content-type: text/plain; charset=iso-8859-1
178 content-disposition: form-data; name="file"
179
180 non-ascii: "å"
181 --{{boundary}}--
182 '''));
183 });
184
185 test('with a stream file', () {
186 var request = new http.MultipartRequest('POST', dummyUrl);
187 var controller = new StreamController(sync: true);
188 request.files.add(new http.MultipartFile('file', controller.stream, 5));
189
190 expect(request, bodyMatches('''
191 --{{boundary}}
192 content-type: application/octet-stream
193 content-disposition: form-data; name="file"
194
195 hello
196 --{{boundary}}--
197 '''));
198
199 controller.add([104, 101, 108, 108, 111]);
200 controller.close();
201 });
202
203 test('with an empty stream file', () {
204 var request = new http.MultipartRequest('POST', dummyUrl);
205 var controller = new StreamController(sync: true);
206 request.files.add(new http.MultipartFile('file', controller.stream, 0));
207
208 expect(request, bodyMatches('''
209 --{{boundary}}
210 content-type: application/octet-stream
211 content-disposition: form-data; name="file"
212
213
214 --{{boundary}}--
215 '''));
216
217 controller.close();
218 });
219
220 test('with a byte file', () {
221 var request = new http.MultipartRequest('POST', dummyUrl);
222 var file = new http.MultipartFile.fromBytes(
223 'file', [104, 101, 108, 108, 111]);
224 request.files.add(file);
225
226 expect(request, bodyMatches('''
227 --{{boundary}}
228 content-type: application/octet-stream
229 content-disposition: form-data; name="file"
230
231 hello
232 --{{boundary}}--
233 '''));
234 });
235 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698