@@ -154,3 +154,114 @@ describe('create blob using FormData', (report, done) => {
154154 done ( )
155155 } )
156156} )
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