Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(47)

Unified Diff: LayoutTests/fast/files/blob-constructor.html

Issue 57483002: Implement File constructor. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebased against master, updated patch. Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: LayoutTests/fast/files/blob-constructor.html
diff --git a/LayoutTests/fast/files/blob-constructor.html b/LayoutTests/fast/files/blob-constructor.html
index 08e22a96739c4f1b2f45f579b9a57f9b03740df7..a808cdf15f98af5ed43b6f359b2f64e905f59f0f 100644
--- a/LayoutTests/fast/files/blob-constructor.html
+++ b/LayoutTests/fast/files/blob-constructor.html
@@ -1,9 +1,107 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
+<!DOCTYPE html>
+
<script src="../../resources/js-test.js"></script>
-</head>
-<body>
-<script src="script-tests/blob-constructor.js"></script>
kinuko 2013/11/14 05:41:06 (It's fine for this CL, but it'd have been probabl
pwnall-personal 2013/11/14 14:31:19 I'm really sorry about that, and appreciate you re
-</body>
-</html>
+<script>
+description("Test the Blob constructor.");
+
+// Test the diffrent ways you can construct a Blob.
+shouldBeTrue("(new Blob()) instanceof window.Blob");
+shouldBeTrue("(new Blob([])) instanceof window.Blob");
+shouldBeTrue("(new Blob(['hello'])) instanceof window.Blob");
+shouldBeTrue("(new Blob(['hello'], {})) instanceof window.Blob");
+shouldBeTrue("(new Blob(['hello'], {type:'text/html'})) instanceof window.Blob");
+shouldBeTrue("(new Blob(['hello'], {type:'text/html', endings:'native'})) instanceof window.Blob");
+shouldBeTrue("(new Blob(['hello'], {type:'text/html', endings:'transparent'})) instanceof window.Blob");
+
+// Test invalid blob parts
+shouldThrow("new Blob('hello')", '"TypeError: Failed to construct \'Blob\': The 1st argument is neither an array, nor does it have indexed properties."');
+shouldThrow("new Blob(0)", '"TypeError: Failed to construct \'Blob\': The 1st argument is neither an array, nor does it have indexed properties."');
+
+// Test valid blob parts.
+shouldBeTrue("(new Blob([])) instanceof window.Blob");
+shouldBeTrue("(new Blob(['stringPrimitive'])) instanceof window.Blob");
+shouldBeTrue("(new Blob([String('stringObject')])) instanceof window.Blob");
+shouldBeTrue("(new Blob([new Blob])) instanceof window.Blob");
+shouldBeTrue("(new Blob([new Blob([new Blob])])) instanceof window.Blob");
+
+// Test some conversions to string in the parts array.
+shouldBe("(new Blob([12])).size", "2");
+shouldBe("(new Blob([[]])).size", "0"); // [].toString() is the empty string
+shouldBe("(new Blob([{}])).size", "15");; // {}.toString() is the string "[object Object]"
+shouldBe("(new Blob([document])).size", "21"); // document.toString() is the string "[object HTMLDocument]"
+
+var toStringingObj = { toString: function() { return "A string"; } };
+shouldBe("(new Blob([toStringingObj])).size", "8");
+
+var throwingObj = { toString: function() { throw "Error"; } };
+shouldThrow("new Blob([throwingObj])", "'Error'");
+
+// Test some invalid property bags
+shouldBeTrue("(new Blob([], {unknownKey:'value'})) instanceof window.Blob"); // Ignore invalid keys
+shouldThrow("new Blob([], {endings:'illegalValue'})", "'TypeError: Failed to construct \\'Blob\\': The \"endings\" property must be either \"transparent\" or \"native\".'");
+shouldThrow("new Blob([], {endings:throwingObj})", "'Error'");
+shouldThrow("new Blob([], {type:throwingObj})", "'Error'");
+shouldThrow("new Blob([], {type:'hello\u00EE'})", "'SyntaxError: Failed to construct \\'Blob\\': The \"type\" property must consist of ASCII characters.'");
+
+// Test that order of property bag evaluation is lexigraphical
+var throwingObj1 = { toString: function() { throw "Error 1"; } };
+var throwingObj2 = { toString: function() { throw "Error 2"; } };
+shouldThrow("new Blob([], {endings:throwingObj1, type:throwingObj2})", "'Error 1'");
+shouldThrow("new Blob([], {type:throwingObj2, endings:throwingObj1})", "'Error 1'");
+shouldThrow("new Blob([], {type:throwingObj2, endings:'illegal'})", "'TypeError: Failed to construct \\'Blob\\': The \"endings\" property must be either \"transparent\" or \"native\".'");
+
+// Test various non-object literals being used as property bags
+shouldThrow("(new Blob([], null)) instanceof window.Blob", "'TypeError: Failed to construct \\'Blob\\': The 2nd argument is not of type Object.'");
+shouldThrow("(new Blob([], undefined)) instanceof window.Blob", "'TypeError: Failed to construct \\'Blob\\': The 2nd argument is not of type Object.'");
+shouldThrow("(new Blob([], 123)) instanceof window.Blob", "'TypeError: Failed to construct \\'Blob\\': The 2nd argument is not of type Object.'");
+shouldThrow("(new Blob([], 123.4)) instanceof window.Blob", "'TypeError: Failed to construct \\'Blob\\': The 2nd argument is not of type Object.'");
+shouldThrow("(new Blob([], true)) instanceof window.Blob", "'TypeError: Failed to construct \\'Blob\\': The 2nd argument is not of type Object.'");
+shouldThrow("(new Blob([], 'abc')) instanceof window.Blob", "'TypeError: Failed to construct \\'Blob\\': The 2nd argument is not of type Object.'");
+shouldBeTrue("(new Blob([], [])) instanceof window.Blob");
+shouldBeTrue("(new Blob([], /abc/)) instanceof window.Blob");
+shouldBeTrue("(new Blob([], function () {})) instanceof window.Blob");
+
+// Test that the type/size is correctly added to the Blob
+shouldBe("(new Blob([], {type:'text/html'})).type", "'text/html'");
+shouldBe("(new Blob([], {type:'text/html'})).size", "0");
+shouldBe("(new Blob([], {type:'text/plain;charset=UTF-8'})).type", "'text/plain;charset=utf-8'");
+
+// Test the number of expected arguments in the Blob constructor.
+shouldBe("window.Blob.length", "0");
+
+// Test ArrayBufferView Parameters
+shouldBe("new Blob([new DataView(new ArrayBuffer(100))]).size", "100");
+shouldBe("new Blob([new Uint8Array(100)]).size", "100");
+shouldBe("new Blob([new Uint8ClampedArray(100)]).size", "100");
+shouldBe("new Blob([new Uint16Array(100)]).size", "200");
+shouldBe("new Blob([new Uint32Array(100)]).size", "400");
+shouldBe("new Blob([new Int8Array(100)]).size", "100");
+shouldBe("new Blob([new Int16Array(100)]).size", "200");
+shouldBe("new Blob([new Int32Array(100)]).size", "400");
+shouldBe("new Blob([new Float32Array(100)]).size", "400");
+shouldBe("new Blob([new Float64Array(100)]).size", "800");
+shouldBe("new Blob([new Float64Array(100), new Int32Array(100), new Uint8Array(100), new DataView(new ArrayBuffer(100))]).size", "1400");
+shouldBe("new Blob([new Blob([new Int32Array(100)]), new Uint8Array(100), new Float32Array(100), new DataView(new ArrayBuffer(100))]).size", "1000");
+
+// Test ArrayBuffer Parameters
+shouldBe("new Blob([(new DataView(new ArrayBuffer(100))).buffer]).size", "100");
+shouldBe("new Blob([(new Uint8Array(100)).buffer]).size", "100");
+shouldBe("new Blob([(new Uint8ClampedArray(100)).buffer]).size", "100");
+shouldBe("new Blob([(new Uint16Array(100)).buffer]).size", "200");
+shouldBe("new Blob([(new Uint32Array(100)).buffer]).size", "400");
+shouldBe("new Blob([(new Int8Array(100)).buffer]).size", "100");
+shouldBe("new Blob([(new Int16Array(100)).buffer]).size", "200");
+shouldBe("new Blob([(new Int32Array(100)).buffer]).size", "400");
+shouldBe("new Blob([(new Float32Array(100)).buffer]).size", "400");
+shouldBe("new Blob([(new Float64Array(100)).buffer]).size", "800");
+shouldBe("new Blob([(new Float64Array(100)).buffer, (new Int32Array(100)).buffer, (new Uint8Array(100)).buffer, (new DataView(new ArrayBuffer(100))).buffer]).size", "1400");
+shouldBe("new Blob([new Blob([(new Int32Array(100)).buffer]), (new Uint8Array(100)).buffer, (new Float32Array(100)).buffer, (new DataView(new ArrayBuffer(100))).buffer]).size", "1000");
+
+// Test passing blob parts in sequences.
+shouldBeTrue("new Blob({length: 0}) instanceof window.Blob");
+shouldBe("new Blob({length: 0}).size", "0");
+shouldBe("new Blob({length: 1, 0: 'string'}).size", "6");
+shouldBe("new Blob({length: 2, 0: new Uint8Array(100), 1: new Int16Array(100)}).size", "300");
+shouldBe("new Blob({length: 1, 0: 'string'}, {type: 'text/html'}).type", "'text/html'");
+shouldThrow("new Blob({length: 0}, {endings:'illegal'})", "'TypeError: Failed to construct \\'Blob\\': The \"endings\" property must be either \"transparent\" or \"native\".'");
+</script>
« no previous file with comments | « no previous file | LayoutTests/fast/files/blob-constructor-expected.txt » ('j') | LayoutTests/fast/files/file-constructor.html » ('J')

Powered by Google App Engine
This is Rietveld 408576698