OLD | NEW |
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 Loading... |
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 Loading... |
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 } |
OLD | NEW |