@@ -154,3 +154,114 @@ describe('create blob using FormData', (report, done) => {
154
154
done ( )
155
155
} )
156
156
} )
157
+
158
+ // since 0.9.2
159
+ // test case from :
160
+ // https://github.com/w3c/web-platform-tests/blob/master/FileAPI/blob/Blob-slice.html
161
+ describe ( '#89 Blob.slice test' , ( report , done ) => {
162
+
163
+ let blob1 , blob2
164
+ let count = 0
165
+ let testData
166
+
167
+ Blob
168
+ . build ( [ "squiggle" ] )
169
+ . then ( ( b ) => {
170
+ blob1 = b
171
+ return Blob . build ( [ "steak" ] , { type : "content/type" } )
172
+ } )
173
+ . then ( ( b ) => {
174
+ blob2 = b
175
+ setTestData ( )
176
+ startTest ( )
177
+ } )
178
+
179
+ function setTestData ( ) {
180
+ testData = [
181
+ [
182
+ [ "PASSSTRING" ] ,
183
+ [ { start : - 6 , contents : "STRING" } ,
184
+ { start : - 12 , contents : "PASSSTRING" } ,
185
+ { start : 4 , contents : "STRING" } ,
186
+ { start : 12 , contents : "" } ,
187
+ { start : 0 , end : - 6 , contents : "PASS" } ,
188
+ { start : 0 , end : - 12 , contents : "" } ,
189
+ { start : 0 , end : 4 , contents : "PASS" } ,
190
+ { start : 0 , end : 12 , contents : "PASSSTRING" } ,
191
+ { start : 7 , end : 4 , contents : "" } ]
192
+ ] ,
193
+ // Test 3 strings
194
+ [
195
+ [ "foo" , "bar" , "baz" ] ,
196
+ [ { start : 0 , end : 9 , contents : "foobarbaz" } ,
197
+ { start : 0 , end : 3 , contents : "foo" } ,
198
+ { start : 3 , end : 9 , contents : "barbaz" } ,
199
+ { start : 6 , end : 9 , contents : "baz" } ,
200
+ { start : 6 , end : 12 , contents : "baz" } ,
201
+ { start : 0 , end : 9 , contents : "foobarbaz" } ,
202
+ { start : 0 , end : 11 , contents : "foobarbaz" } ,
203
+ { start : 10 , end : 15 , contents : "" } ]
204
+ ] ,
205
+ // Test string, Blob, string
206
+ [
207
+ [ "foo" , blob1 , "baz" ] ,
208
+ [ { start : 0 , end : 3 , contents : "foo" } ,
209
+ { start : 3 , end : 11 , contents : "squiggle" } ,
210
+ { start : 2 , end : 4 , contents : "os" } ,
211
+ { start : 10 , end : 12 , contents : "eb" } ]
212
+ ] ,
213
+ // Test blob, string, blob
214
+ [
215
+ [ blob1 , "foo" , blob1 ] ,
216
+ [ { start : 0 , end : 8 , contents : "squiggle" } ,
217
+ { start : 7 , end : 9 , contents : "ef" } ,
218
+ { start : 10 , end : 12 , contents : "os" } ,
219
+ { start : 1 , end : 4 , contents : "qui" } ,
220
+ { start : 12 , end : 15 , contents : "qui" } ,
221
+ { start : 40 , end : 60 , contents : "" } ]
222
+ ] ,
223
+ // Test blobs all the way down
224
+ [
225
+ [ blob2 , blob1 , blob2 ] ,
226
+ [ { start : 0 , end : 5 , contents : "steak" } ,
227
+ { start : 5 , end : 13 , contents : "squiggle" } ,
228
+ { start : 13 , end : 18 , contents : "steak" } ,
229
+ { start : 1 , end : 3 , contents : "te" } ,
230
+ { start : 6 , end : 10 , contents : "quig" } ]
231
+ ]
232
+ ]
233
+ }
234
+
235
+ function startTest ( ) {
236
+ Promise . all ( testData . map ( assert ) ) . then ( done )
237
+ }
238
+
239
+ function assert ( d ) :Promise {
240
+ let content = d [ 0 ]
241
+ let assertions = d [ 1 ]
242
+ console . log ( 'create blob content = ' , content )
243
+ Blob . build ( content ) . then ( ( b ) => {
244
+ for ( let i in assertions ) {
245
+ let args = assertions [ i ]
246
+ let target = b . slice ( args . start , args . end )
247
+ target . onCreated ( ( b2 ) => {
248
+ let raw = null
249
+ fs . readFile ( b . blobPath , 'utf8' ) . then ( ( data ) => {
250
+ raw = data
251
+ fs . readFile ( b2 . blobPath , 'utf8' )
252
+ . then ( function ( actual ) {
253
+ console . log ( '---' )
254
+ console . log ( 'raw' , data )
255
+ console . log ( 'expect' , this . contents )
256
+ console . log ( 'actual' , actual )
257
+ report ( < Assert key = { `assertion ${ ++ count } ` } expect = { this . contents } actual = { actual } /> )
258
+ } . bind ( args ) )
259
+ } )
260
+
261
+ } )
262
+ }
263
+ } )
264
+
265
+ }
266
+
267
+ } )
0 commit comments