diff --git a/html/semantics/forms/the-input-element/files.html b/html/semantics/forms/the-input-element/files.html index 107b86c08aa6ba..93088330d378cb 100644 --- a/html/semantics/forms/the-input-element/files.html +++ b/html/semantics/forms/the-input-element/files.html @@ -31,9 +31,14 @@ types.forEach(function(type) { test(function() { - var input = document.createElement("input"); + 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); }); @@ -45,4 +50,22 @@ 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(new TypeError(), () => i1.files = [], "files cannot be set to an array"); + assert_throws(new TypeError(), () => i1.files = [new File([], "x")], "files cannot be set to an array (even when it contains File objects)"); +}, "setting .files");