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

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

Issue 218993016: Make MultipartRequest more closely adhere to browsers' behavior. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: code review Created 6 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « pkg/http/lib/src/multipart_request.dart ('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
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 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 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 multipart_test; 5 library multipart_test;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'dart:convert'; 8 import 'dart:convert';
9 import 'dart:io'; 9 import 'dart:io';
10 10
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 --{{boundary}}-- 86 --{{boundary}}--
87 ''')); 87 '''));
88 }); 88 });
89 89
90 test('with a unicode field name', () { 90 test('with a unicode field name', () {
91 var request = new http.MultipartRequest('POST', dummyUrl); 91 var request = new http.MultipartRequest('POST', dummyUrl);
92 request.fields['fïēld'] = 'value'; 92 request.fields['fïēld'] = 'value';
93 93
94 expect(request, bodyMatches(''' 94 expect(request, bodyMatches('''
95 --{{boundary}} 95 --{{boundary}}
96 content-disposition: form-data; name="f%C3%AF%C4%93ld" 96 content-disposition: form-data; name="fïēld"
97 97
98 value 98 value
99 --{{boundary}}-- 99 --{{boundary}}--
100 '''));
101 });
102
103 test('with a field name with newlines', () {
104 var request = new http.MultipartRequest('POST', dummyUrl);
105 request.fields['foo\nbar\rbaz\r\nbang'] = 'value';
106
107 expect(request, bodyMatches('''
108 --{{boundary}}
109 content-disposition: form-data; name="foo%0D%0Abar%0D%0Abaz%0D%0Abang"
110
111 value
112 --{{boundary}}--
113 '''));
114 });
115
116 test('with a field name with a quote', () {
117 var request = new http.MultipartRequest('POST', dummyUrl);
118 request.fields['foo"bar'] = 'value';
119
120 expect(request, bodyMatches('''
121 --{{boundary}}
122 content-disposition: form-data; name="foo%22bar"
123
124 value
125 --{{boundary}}--
100 ''')); 126 '''));
101 }); 127 });
102 128
103 test('with a unicode field value', () { 129 test('with a unicode field value', () {
104 var request = new http.MultipartRequest('POST', dummyUrl); 130 var request = new http.MultipartRequest('POST', dummyUrl);
105 request.fields['field'] = 'vⱥlūe'; 131 request.fields['field'] = 'vⱥlūe';
106 132
107 expect(request, bodyMatches(''' 133 expect(request, bodyMatches('''
108 --{{boundary}} 134 --{{boundary}}
109 content-disposition: form-data; name="field" 135 content-disposition: form-data; name="field"
110 content-type: text/plain; charset=utf-8 136 content-type: text/plain; charset=utf-8
111 137
112 vⱥlūe 138 vⱥlūe
113 --{{boundary}}-- 139 --{{boundary}}--
114 ''')); 140 '''));
115 }); 141 });
116 142
117 test('with a unicode filename', () { 143 test('with a unicode filename', () {
118 var request = new http.MultipartRequest('POST', dummyUrl); 144 var request = new http.MultipartRequest('POST', dummyUrl);
119 request.files.add(new http.MultipartFile.fromString('file', 'contents', 145 request.files.add(new http.MultipartFile.fromString('file', 'contents',
120 filename: 'fïlēname.txt')); 146 filename: 'fïlēname.txt'));
121 147
122 expect(request, bodyMatches(''' 148 expect(request, bodyMatches('''
123 --{{boundary}} 149 --{{boundary}}
124 content-type: text/plain; charset=utf-8 150 content-type: text/plain; charset=utf-8
125 content-disposition: form-data; name="file"; filename="f%C3%AFl%C4%93nam e.txt" 151 content-disposition: form-data; name="file"; filename="fïlēname.txt"
126 152
127 contents 153 contents
128 --{{boundary}}-- 154 --{{boundary}}--
155 '''));
156 });
157
158 test('with a filename with newlines', () {
159 var request = new http.MultipartRequest('POST', dummyUrl);
160 request.files.add(new http.MultipartFile.fromString('file', 'contents',
161 filename: 'foo\nbar\rbaz\r\nbang'));
162
163 expect(request, bodyMatches('''
164 --{{boundary}}
165 content-type: text/plain; charset=utf-8
166 content-disposition: form-data; name="file"; filename="foo%0D%0Abar%0D%0 Abaz%0D%0Abang"
167
168 contents
169 --{{boundary}}--
170 '''));
171 });
172
173 test('with a filename with a quote', () {
174 var request = new http.MultipartRequest('POST', dummyUrl);
175 request.files.add(new http.MultipartFile.fromString('file', 'contents',
176 filename: 'foo"bar'));
177
178 expect(request, bodyMatches('''
179 --{{boundary}}
180 content-type: text/plain; charset=utf-8
181 content-disposition: form-data; name="file"; filename="foo%22bar"
182
183 contents
184 --{{boundary}}--
129 ''')); 185 '''));
130 }); 186 });
131 187
132 test('with a string file with a content-type but no charset', () { 188 test('with a string file with a content-type but no charset', () {
133 var request = new http.MultipartRequest('POST', dummyUrl); 189 var request = new http.MultipartRequest('POST', dummyUrl);
134 var file = new http.MultipartFile.fromString('file', '{"hello": "world"}', 190 var file = new http.MultipartFile.fromString('file', '{"hello": "world"}',
135 contentType: new ContentType('application', 'json')); 191 contentType: new ContentType('application', 'json'));
136 request.files.add(file); 192 request.files.add(file);
137 193
138 expect(request, bodyMatches(''' 194 expect(request, bodyMatches('''
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
235 content-type: application/octet-stream 291 content-type: application/octet-stream
236 content-disposition: form-data; name="file"; filename="test-file" 292 content-disposition: form-data; name="file"; filename="test-file"
237 293
238 hello 294 hello
239 --{{boundary}}-- 295 --{{boundary}}--
240 ''')); 296 '''));
241 }), completes); 297 }), completes);
242 }); 298 });
243 }); 299 });
244 } 300 }
OLDNEW
« no previous file with comments | « pkg/http/lib/src/multipart_request.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698