| OLD | NEW |
| (Empty) |
| 1 description("Test the Blob constructor."); | |
| 2 | |
| 3 // Test the diffrent ways you can construct a Blob. | |
| 4 shouldBeTrue("(new Blob()) instanceof window.Blob"); | |
| 5 shouldBeTrue("(new Blob([])) instanceof window.Blob"); | |
| 6 shouldBeTrue("(new Blob(['hello'])) instanceof window.Blob"); | |
| 7 shouldBeTrue("(new Blob(['hello'], {})) instanceof window.Blob"); | |
| 8 shouldBeTrue("(new Blob(['hello'], {type:'text/html'})) instanceof window.Blob")
; | |
| 9 shouldBeTrue("(new Blob(['hello'], {type:'text/html', endings:'native'})) instan
ceof window.Blob"); | |
| 10 shouldBeTrue("(new Blob(['hello'], {type:'text/html', endings:'transparent'})) i
nstanceof window.Blob"); | |
| 11 | |
| 12 // Test invalid blob parts | |
| 13 shouldThrow("new Blob('hello')", "'TypeError: First argument of the constructor
is not of type Array'"); | |
| 14 shouldThrow("new Blob(0)", "'TypeError: First argument of the constructor is not
of type Array'"); | |
| 15 | |
| 16 // Test valid blob parts. | |
| 17 shouldBeTrue("(new Blob([])) instanceof window.Blob"); | |
| 18 shouldBeTrue("(new Blob(['stringPrimitive'])) instanceof window.Blob"); | |
| 19 shouldBeTrue("(new Blob([String('stringObject')])) instanceof window.Blob"); | |
| 20 shouldBeTrue("(new Blob([new Blob])) instanceof window.Blob"); | |
| 21 shouldBeTrue("(new Blob([new Blob([new Blob])])) instanceof window.Blob"); | |
| 22 | |
| 23 // Test some conversions to string in the parts array. | |
| 24 shouldBe("(new Blob([12])).size", "2"); | |
| 25 shouldBe("(new Blob([[]])).size", "0"); // [].toString() is the empty st
ring | |
| 26 shouldBe("(new Blob([{}])).size", "15");; // {}.toString() is the string "
[object Object]" | |
| 27 shouldBe("(new Blob([document])).size", "21"); // document.toString() is the st
ring "[object HTMLDocument]" | |
| 28 | |
| 29 var toStringingObj = { toString: function() { return "A string"; } }; | |
| 30 shouldBe("(new Blob([toStringingObj])).size", "8"); | |
| 31 | |
| 32 var throwingObj = { toString: function() { throw "Error"; } }; | |
| 33 shouldThrow("new Blob([throwingObj])", "'Error'"); | |
| 34 | |
| 35 // Test some invalid property bags | |
| 36 shouldBeTrue("(new Blob([], {unknownKey:'value'})) instanceof window.Blob");
// Ignore invalid keys | |
| 37 shouldThrow("new Blob([], {endings:'illegalValue'})", "'TypeError: The endings p
roperty must be either \"transparent\" or \"native\"'"); | |
| 38 shouldThrow("new Blob([], {endings:throwingObj})", "'Error'"); | |
| 39 shouldThrow("new Blob([], {type:throwingObj})", "'Error'"); | |
| 40 shouldThrow("new Blob([], {type:'hello\u00EE'})", "'SyntaxError: type must consi
st of ASCII characters'"); | |
| 41 | |
| 42 // Test that order of property bag evaluation is lexigraphical | |
| 43 var throwingObj1 = { toString: function() { throw "Error 1"; } }; | |
| 44 var throwingObj2 = { toString: function() { throw "Error 2"; } }; | |
| 45 shouldThrow("new Blob([], {endings:throwingObj1, type:throwingObj2})", "'Error 1
'"); | |
| 46 shouldThrow("new Blob([], {type:throwingObj2, endings:throwingObj1})", "'Error 1
'"); | |
| 47 shouldThrow("new Blob([], {type:throwingObj2, endings:'illegal'})", "'TypeError:
The endings property must be either \"transparent\" or \"native\"'"); | |
| 48 | |
| 49 // Test various non-object literals being used as property bags | |
| 50 shouldThrow("(new Blob([], null)) instanceof window.Blob", "'TypeError: Second a
rgument of the constructor is not of type Object'"); | |
| 51 shouldThrow("(new Blob([], undefined)) instanceof window.Blob", "'TypeError: Sec
ond argument of the constructor is not of type Object'"); | |
| 52 shouldThrow("(new Blob([], 123)) instanceof window.Blob", "'TypeError: Second ar
gument of the constructor is not of type Object'"); | |
| 53 shouldThrow("(new Blob([], 123.4)) instanceof window.Blob", "'TypeError: Second
argument of the constructor is not of type Object'"); | |
| 54 shouldThrow("(new Blob([], true)) instanceof window.Blob", "'TypeError: Second a
rgument of the constructor is not of type Object'"); | |
| 55 shouldThrow("(new Blob([], 'abc')) instanceof window.Blob", "'TypeError: Second
argument of the constructor is not of type Object'"); | |
| 56 shouldBeTrue("(new Blob([], [])) instanceof window.Blob"); | |
| 57 shouldBeTrue("(new Blob([], /abc/)) instanceof window.Blob"); | |
| 58 shouldBeTrue("(new Blob([], function () {})) instanceof window.Blob"); | |
| 59 | |
| 60 // Test that the type/size is correctly added to the Blob | |
| 61 shouldBe("(new Blob([], {type:'text/html'})).type", "'text/html'"); | |
| 62 shouldBe("(new Blob([], {type:'text/html'})).size", "0"); | |
| 63 shouldBe("(new Blob([], {type:'text/plain;charset=UTF-8'})).type", "'text/plain;
charset=utf-8'"); | |
| 64 | |
| 65 // Odds and ends | |
| 66 shouldBe("window.Blob.length", "2"); | |
| 67 | |
| 68 // Test ArrayBufferView Parameters | |
| 69 shouldBe("new Blob([new DataView(new ArrayBuffer(100))]).size", "100"); | |
| 70 shouldBe("new Blob([new Uint8Array(100)]).size", "100"); | |
| 71 shouldBe("new Blob([new Uint8ClampedArray(100)]).size", "100"); | |
| 72 shouldBe("new Blob([new Uint16Array(100)]).size", "200"); | |
| 73 shouldBe("new Blob([new Uint32Array(100)]).size", "400"); | |
| 74 shouldBe("new Blob([new Int8Array(100)]).size", "100"); | |
| 75 shouldBe("new Blob([new Int16Array(100)]).size", "200"); | |
| 76 shouldBe("new Blob([new Int32Array(100)]).size", "400"); | |
| 77 shouldBe("new Blob([new Float32Array(100)]).size", "400"); | |
| 78 shouldBe("new Blob([new Float64Array(100)]).size", "800"); | |
| 79 shouldBe("new Blob([new Float64Array(100), new Int32Array(100), new Uint8Array(1
00), new DataView(new ArrayBuffer(100))]).size", "1400"); | |
| 80 shouldBe("new Blob([new Blob([new Int32Array(100)]), new Uint8Array(100), new Fl
oat32Array(100), new DataView(new ArrayBuffer(100))]).size", "1000"); | |
| 81 | |
| 82 // Test ArrayBuffer Parameters | |
| 83 shouldBe("new Blob([(new DataView(new ArrayBuffer(100))).buffer]).size", "100"); | |
| 84 shouldBe("new Blob([(new Uint8Array(100)).buffer]).size", "100"); | |
| 85 shouldBe("new Blob([(new Uint8ClampedArray(100)).buffer]).size", "100"); | |
| 86 shouldBe("new Blob([(new Uint16Array(100)).buffer]).size", "200"); | |
| 87 shouldBe("new Blob([(new Uint32Array(100)).buffer]).size", "400"); | |
| 88 shouldBe("new Blob([(new Int8Array(100)).buffer]).size", "100"); | |
| 89 shouldBe("new Blob([(new Int16Array(100)).buffer]).size", "200"); | |
| 90 shouldBe("new Blob([(new Int32Array(100)).buffer]).size", "400"); | |
| 91 shouldBe("new Blob([(new Float32Array(100)).buffer]).size", "400"); | |
| 92 shouldBe("new Blob([(new Float64Array(100)).buffer]).size", "800"); | |
| 93 shouldBe("new Blob([(new Float64Array(100)).buffer, (new Int32Array(100)).buffer
, (new Uint8Array(100)).buffer, (new DataView(new ArrayBuffer(100))).buffer]).si
ze", "1400"); | |
| 94 shouldBe("new Blob([new Blob([(new Int32Array(100)).buffer]), (new Uint8Array(10
0)).buffer, (new Float32Array(100)).buffer, (new DataView(new ArrayBuffer(100)))
.buffer]).size", "1000"); | |
| OLD | NEW |