| // META: title=Blob constructor |
| // META: script=../support/Blob.js |
| 'use strict'; |
| |
| var test_error = { |
| name: "test", |
| message: "test error", |
| }; |
| |
| test(function() { |
| var args = [ |
| document.createElement("div"), |
| window, |
| ]; |
| args.forEach(function(arg) { |
| assert_throws_js(TypeError, function() { |
| new Blob(arg); |
| }, "Should throw for argument " + format_value(arg) + "."); |
| }); |
| }, "Passing platform objects for blobParts should throw a TypeError."); |
| |
| test(function() { |
| var element = document.createElement("div"); |
| element.appendChild(document.createElement("div")); |
| element.appendChild(document.createElement("p")); |
| var list = element.children; |
| Object.defineProperty(list, "length", { |
| get: function() { throw test_error; } |
| }); |
| assert_throws_exactly(test_error, function() { |
| new Blob(list); |
| }); |
| }, "A platform object that supports indexed properties should be treated as a sequence for the blobParts argument (overwritten 'length'.)"); |
| |
| test_blob(function() { |
| var select = document.createElement("select"); |
| select.appendChild(document.createElement("option")); |
| return new Blob(select); |
| }, { |
| expected: "[object HTMLOptionElement]", |
| type: "", |
| desc: "Passing an platform object that supports indexed properties as the blobParts array should work (select)." |
| }); |
| |
| test_blob(function() { |
| var elm = document.createElement("div"); |
| elm.setAttribute("foo", "bar"); |
| return new Blob(elm.attributes); |
| }, { |
| expected: "[object Attr]", |
| type: "", |
| desc: "Passing an platform object that supports indexed properties as the blobParts array should work (attributes)." |
| }); |