123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- goog.setTestOnly('goog.testing.fs.Blob');
- goog.provide('goog.testing.fs.Blob');
- goog.require('goog.crypt');
- goog.require('goog.crypt.base64');
- goog.testing.fs.Blob = function(opt_data, opt_type) {
-
- this.type = opt_type || '';
-
- this.data_ = [];
-
- this.size = 0;
- this.setDataInternal(opt_data || '');
- };
- goog.testing.fs.Blob.prototype.slice = function(
- opt_start, opt_end, opt_contentType) {
- var relativeStart;
- if (goog.isNumber(opt_start)) {
- relativeStart = (opt_start < 0) ? Math.max(this.size + opt_start, 0) :
- Math.min(opt_start, this.size);
- } else {
- relativeStart = 0;
- }
- var relativeEnd;
- if (goog.isNumber(opt_end)) {
- relativeEnd = (opt_end < 0) ? Math.max(this.size + opt_end, 0) :
- Math.min(opt_end, this.size);
- } else {
- relativeEnd = this.size;
- }
- var span = Math.max(relativeEnd - relativeStart, 0);
- var blob = new goog.testing.fs.Blob(
- this.data_.slice(relativeStart, relativeStart + span), opt_contentType);
- return blob;
- };
- goog.testing.fs.Blob.prototype.toString = function() {
- return goog.crypt.utf8ByteArrayToString(this.data_);
- };
- goog.testing.fs.Blob.prototype.toArrayBuffer = function() {
- var buf = new ArrayBuffer(this.data_.length);
- var arr = new Uint8Array(buf);
- for (var i = 0; i < this.data_.length; i++) {
- arr[i] = this.data_[i];
- }
- return buf;
- };
- goog.testing.fs.Blob.prototype.toDataUrl = function() {
- return 'data:' + this.type + ';base64,' +
- goog.crypt.base64.encodeByteArray(this.data_);
- };
- goog.testing.fs.Blob.prototype.setDataInternal = function(data) {
- this.data_ = [];
- if (typeof data === 'string') {
- this.appendString_(data);
- } else if (data instanceof Array) {
- for (var i = 0; i < data.length; i++) {
- if (typeof data[i] === 'string') {
- this.appendString_(data[i]);
- } else if (typeof data[i] === 'number') {
- this.appendByte_(data[i]);
- } else if (data[i] instanceof Uint8Array) {
- this.appendUint8_(data[i]);
- }
- }
- }
- this.size = this.data_.length;
- };
- goog.testing.fs.Blob.prototype.appendString_ = function(data) {
- Array.prototype.push.apply(
- this.data_, goog.crypt.stringToUtf8ByteArray(data));
- };
- goog.testing.fs.Blob.prototype.appendByte_ = function(data) {
- this.data_.push(data);
- };
- goog.testing.fs.Blob.prototype.appendUint8_ = function(data) {
- for (var i = 0; i < data.length; i++) {
- this.data_.push(data[i]);
- }
- };
|