| <!doctype html> |
| <meta charset=utf-8> |
| <title>HTMLInputElement#files</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <div id=log></div> |
| <script> |
| var types = [ |
| "hidden", |
| "text", |
| "search", |
| "tel", |
| "url", |
| "email", |
| "password", |
| "date", |
| "month", |
| "week", |
| "time", |
| "datetime-local", |
| "number", |
| "range", |
| "color", |
| "checkbox", |
| "radio", |
| "submit", |
| "image", |
| "reset", |
| "button", |
| ]; |
| |
| types.forEach(function(type) { |
| test(function() { |
| const input = document.createElement("input"), |
| input2 = document.createElement("input"); |
| input.type = type; |
| input2.type = "file"; |
| assert_equals(input.files, null, "files should be null"); |
| |
| input.files = input2.files; |
| assert_equals(input.files, null, "files should remain null as it cannot be set when it does not apply"); |
| }, "files for input type=" + type); |
| }); |
| |
| test(function() { |
| var input = document.createElement("input"); |
| input.type = "file"; |
| assert_not_equals(input.files, null); |
| assert_true(input.files instanceof FileList, "files should be a FileList"); |
| var files = input.files; |
| assert_equals(input.files, files, "files should return the same object"); |
| }, "files for input type=file"); |
| |
| test(() => { |
| const i1 = document.createElement("input"), |
| i2 = document.createElement("input"); |
| i1.type = "file"; |
| i2.type = "file"; |
| |
| const files = i2.files; |
| i1.files = i2.files; |
| assert_equals(i1.files, files, "FileList should not be copied"); |
| assert_equals(i2.files, files, "FileList can be shared across input elements"); |
| |
| i1.files = null; |
| assert_equals(i1.files, files, "files cannot be set to null"); |
| |
| assert_throws_js(TypeError, () => i1.files = [], "files cannot be set to an array"); |
| assert_throws_js(TypeError, () => i1.files = [new File([], "x")], "files cannot be set to an array (even when it contains File objects)"); |
| }, "setting <input type=file>.files"); |
| </script> |