1 // Builds a blob from a list of items.
2 // The 'contentType' argument is optional.
3 // If the 'builder' argument is not provided, create a new one.
4 function buildBlob(items
, contentType
)
6 if (contentType
=== undefined)
7 return new Blob(items
);
8 return new Blob(items
, {type
:contentType
});
11 // Reads a blob either asynchronously or synchronously.
12 function readBlobAsArrayBuffer(testFiles
, blob
)
15 _readBlobAsArrayBufferAsync(testFiles
, blob
);
17 _readBlobAsArrayBufferSync(testFiles
, blob
);
20 function readBlobAsBinaryString(testFiles
, blob
)
23 _readBlobAsBinaryStringAsync(testFiles
, blob
);
25 _readBlobAsBinaryStringSync(testFiles
, blob
);
28 function readBlobAsText(testFiles
, blob
, encoding
)
31 _readBlobAsTextAsync(testFiles
, blob
, encoding
);
33 _readBlobAsTextSync(testFiles
, blob
, encoding
);
36 function readBlobAsDataURL(testFiles
, blob
)
39 _readBlobAsDataURLAsync(testFiles
, blob
);
41 _readBlobAsDataURLSync(testFiles
, blob
);
44 // Reads a blob asynchronously.
45 function _readBlobAsArrayBufferAsync(testFiles
, blob
)
47 var reader
= createReaderAsync(testFiles
);
48 reader
.readAsArrayBuffer(blob
)
51 function _readBlobAsBinaryStringAsync(testFiles
, blob
)
53 var reader
= createReaderAsync(testFiles
);
54 reader
.readAsBinaryString(blob
)
57 function _readBlobAsTextAsync(testFiles
, blob
, encoding
)
59 var reader
= createReaderAsync(testFiles
);
60 reader
.readAsText(blob
, encoding
)
63 function _readBlobAsDataURLAsync(testFiles
, blob
)
65 var reader
= createReaderAsync(testFiles
);
66 reader
.readAsDataURL(blob
)
69 // Reads a blob synchronously.
70 function _readBlobAsArrayBufferSync(testFiles
, blob
)
72 var reader
= createReaderSync();
74 var result
= reader
.readAsArrayBuffer(blob
);
77 log("Received exception, name: " + error
.name
+ ", message: " + error
.message
);
81 var result
= reader
.readAsArrayBuffer(12345);
84 log("Received exception, name: " + error
.name
+ ", message: " + error
.message
);
87 runNextTest(testFiles
);
90 function _readBlobAsBinaryStringSync(testFiles
, blob
)
92 var reader
= createReaderSync();
94 var result
= reader
.readAsBinaryString(blob
);
97 log("Received exception, name: " + error
.name
+ ", message: " + error
.message
);
101 var result
= reader
.readAsBinaryString(12345);
104 log("Received exception, name: " + error
.name
+ ", message: " + error
.message
);
107 runNextTest(testFiles
);
110 function _readBlobAsTextSync(testFiles
, blob
, encoding
)
112 var reader
= createReaderSync();
114 var result
= reader
.readAsText(blob
, encoding
);
117 log("Received exception, name: " + error
.name
+ ", message: " + error
.message
);
121 var result
= reader
.readAsText(12345, encoding
);
124 log("Received exception, name: " + error
.name
+ ", message: " + error
.message
);
127 runNextTest(testFiles
);
130 function _readBlobAsDataURLSync(testFiles
, blob
)
132 var reader
= createReaderSync();
134 var result
= reader
.readAsDataURL(blob
);
137 log("Received exception, name: " + error
.name
+ ", message: " + error
.message
);
141 var result
= reader
.readAsDataURL(12345);
144 log("Received exception, name: " + error
.name
+ ", message: " + error
.message
);
147 runNextTest(testFiles
);
150 // Creates a reader for asynchronous reading.
151 function createReaderAsync(testFiles
)
153 var reader
= new FileReader();
155 reader
.onloadstart
= loadStarted
;
156 reader
.onload
= loaded
;
157 reader
.onabort
= logEvent
;
158 reader
.onloadend = function(event
) { loadEnded(testFiles
, event
); }
159 reader
.onerror
= loadFailed
;
161 log("readyState: " + reader
.readyState
);
165 // Creates a reader for synchronous reading.
166 function createReaderSync()
168 return new FileReaderSync();
171 // 'result' can be either an ArrayBuffer object or a string.
172 function logResult(result
)
174 if (result
=== null) {
178 if (typeof result
== 'object') {
179 log("result size: " + result
.byteLength
);
180 result
= new Uint8Array(result
, 0, result
.byteLength
);
182 log("result size: " + result
.length
);
184 var resultOutput
= _isASCIIString(result
) ? _toString(result
) : _toHexadecimal(result
);
185 log("result: " + resultOutput
);
188 function logEvent(event
)
190 log("Received " + event
.type
+ " event");
193 function loadStarted(event
)
196 log("readyState: " + event
.target
.readyState
);
199 function loaded(event
)
202 log("readyState: " + event
.target
.readyState
);
204 var result
= event
.target
.result
;
208 function loadFailed(event
)
211 log("readyState: " + event
.target
.readyState
);
212 log("error name: " + event
.target
.error
.name
);
213 logResult(event
.target
.result
);
216 function loadEnded(testFiles
, event
)
219 runNextTest(testFiles
);
224 // 'value' can be either an ArrayBufferView object or a string.
225 function _toString(value
)
227 if (typeof value
== 'string')
230 for (var i
= 0; i
< value
.length
; ++i
)
231 result
+= String
.fromCharCode(value
[i
]);
235 // 'value' can be either an ArrayBufferView object or a string.
236 function _isASCIIString(value
)
238 for (var i
= 0; i
< value
.length
; ++i
) {
239 if (_getElementAt(value
, i
) >= 128)
245 // 'value' can be either an ArrayBufferView object or a string.
246 function _toHexadecimal(value
)
249 for (var i
= 0; i
< value
.length
; ++i
) {
250 var hex
= "0x" + (_getElementAt(value
, i
) & 0xFF).toString(16);
258 function _getElementAt(value
, i
)
260 return (typeof value
== 'string') ? value
.charCodeAt(i
) : value
[i
];