| <!DOCTYPE html> <!-- webkit-test-runner [ ModelElementEnabled=true ] --> |
| <script src="../resources/testharness.js"></script> |
| <script src="../resources/testharnessreport.js"></script> |
| <script> |
| |
| const makeSource = (src, type) => { |
| const source = document.createElement("source"); |
| source.src = src; |
| if (type) |
| source.type = type; |
| return source; |
| } |
| |
| test(() => { |
| assert_idl_attribute(document.createElement("model"), "currentSrc"); |
| }, "The HTMLModelElement interface has a currentSrc property."); |
| |
| test(() => { |
| assert_readonly(document.createElement("model"), "currentSrc"); |
| }, "The currentSrc property is read-only."); |
| |
| test(() => { |
| assert_equals(document.createElement("model").currentSrc, ""); |
| }, "The currentSrc property is the empty string when no <source> is provided."); |
| |
| test(() => { |
| const model = document.createElement("model"); |
| model.appendChild(makeSource("")); |
| assert_equals(model.currentSrc, ""); |
| }, "The currentSrc property is the empty string when a <source> is provided with no src attribute."); |
| |
| test(() => { |
| const model = document.createElement("model"); |
| const source = model.appendChild(makeSource("model.usdz")); |
| assert_equals(model.currentSrc, source.src); |
| }, "The currentSrc property is the empty string when a <source> is provided."); |
| |
| test(() => { |
| const model = document.createElement("model"); |
| const source = model.appendChild(makeSource("")); |
| assert_equals(model.currentSrc, ""); |
| |
| source.src = "model.usdz"; |
| assert_equals(model.currentSrc, source.src); |
| }, "Changing the src attribute of a <source> changes the currentSrc property."); |
| |
| test(() => { |
| const model = document.createElement("model"); |
| const source = model.appendChild(makeSource("model.usdz")); |
| assert_equals(model.currentSrc, source.src); |
| |
| source.remove(); |
| assert_equals(model.currentSrc, ""); |
| }, "Removing the <source> changes the currentSrc property."); |
| |
| test(() => { |
| const model = document.createElement("model"); |
| const firstSource = model.appendChild(makeSource("model-1.usdz")); |
| const secondSource = model.appendChild(makeSource("model-2.usdz")); |
| assert_equals(model.currentSrc, firstSource.src); |
| }, "currentSrc returns the src value for the first <source> element."); |
| |
| test(() => { |
| const model = document.createElement("model"); |
| const firstSource = model.appendChild(makeSource("model-1.usdz")); |
| const secondSource = model.appendChild(makeSource("model-2.usdz")); |
| assert_equals(model.currentSrc, firstSource.src); |
| |
| firstSource.remove(); |
| assert_equals(model.currentSrc, secondSource.src); |
| }, "Removing a <source> element updates currentSrc."); |
| |
| test(() => { |
| const model = document.createElement("model"); |
| const initialSource = model.appendChild(makeSource("model-initial.usdz")); |
| assert_equals(model.currentSrc, initialSource.src); |
| |
| const secondSource = model.insertBefore(makeSource("model-initial.usdz"), initialSource); |
| assert_equals(model.currentSrc, secondSource.src); |
| }, "Adding a <source> before the current <source> updates currentSrc."); |
| |
| test(() => { |
| assert_idl_attribute(document.createElement("model"), "src"); |
| }, "The HTMLModelElement interface has a src property."); |
| |
| test(() => { |
| const model = document.createElement("model"); |
| model.setAttribute("src", "some-model.usdz"); |
| assert_true(model.src.endsWith("/some-model.usdz")); |
| }, "HTMLModelElement src property reflects src attribute value as a resolved URL."); |
| |
| test(() => { |
| const model = document.createElement("model"); |
| model.src = "some-model.usdz"; |
| assert_equals(model.getAttribute("src"), "some-model.usdz"); |
| }, "<model> src attribute reflects HTMLModelElement src property."); |
| |
| test(() => { |
| const model = document.createElement("model"); |
| model.src = "model.usdz"; |
| assert_equals(model.currentSrc, model.src); |
| }, "Changing the src attribute of a <model> changes the currentSrc property."); |
| |
| test(() => { |
| const model = document.createElement("model"); |
| model.appendChild(makeSource("model-child.usdz")); |
| model.src = "model-attr.usdz"; |
| assert_equals(model.currentSrc, model.src); |
| }, "A non-empty src attribute takes precedence over a <source> child."); |
| |
| test(() => { |
| const model = document.createElement("model"); |
| const source = model.appendChild(makeSource("model-child.usdz")); |
| model.src = ""; |
| assert_true(model.hasAttribute("src")); |
| assert_equals(model.currentSrc, source.src); |
| }, "An empty src attribute does not take precedence over a <source> child."); |
| |
| test(() => { |
| const model = document.createElement("model"); |
| const source = model.appendChild(makeSource("model-child.usdz")); |
| model.src = "model-attr.usdz"; |
| assert_equals(model.currentSrc, model.src); |
| model.src = ""; |
| assert_equals(model.currentSrc, source.src); |
| }, "Removing a src attribute selects the first matching <source> child."); |
| |
| test(() => { |
| const model = document.createElement("model"); |
| const firstSource = model.appendChild(makeSource("model-child-1.unknown", "model/unknown")); |
| const secondSource = model.appendChild(makeSource("model-child-2.usdz", "model/vnd.usdz+zip")); |
| assert_equals(model.currentSrc, secondSource.src); |
| }, "The first <source> with a supported type is selected."); |
| |
| test(() => { |
| const model = document.createElement("model"); |
| const firstSource = model.appendChild(makeSource("model-child-1.usdz", "model/unknown")); |
| const secondSource = model.appendChild(makeSource("model-child-2.usdz", "model/vnd.usdz+zip")); |
| firstSource.type = "model/vnd.usdz+zip"; |
| assert_equals(model.currentSrc, firstSource.src); |
| }, "Changing a <source type> to a supported type causes it to be selected."); |
| |
| test(() => { |
| const model = document.createElement("model"); |
| const firstSource = model.appendChild(makeSource("model-child-1.usdz", "model/vnd.usdz+zip")); |
| const secondSource = model.appendChild(makeSource("model-child-2.usdz", "model/vnd.usdz+zip")); |
| firstSource.type = "model/unknown"; |
| assert_equals(model.currentSrc, secondSource.src); |
| }, "Changing a <source type> to an unsupported type causes it not to be selected."); |
| |
| test(() => { |
| const model = document.createElement("model"); |
| const initialSource = model.appendChild(makeSource("model-child-1.usdz", "model/vnd.usdz+zip")); |
| const newSource = model.insertBefore(makeSource("model-child-2.usdz", "model/unsupported"), model.firstChild); |
| assert_equals(model.currentSrc, initialSource.src); |
| }, "An inserted <source> with an unsupported type is not selected."); |
| |
| test(() => { |
| const model = document.createElement("model"); |
| const initialSource = model.appendChild(makeSource("model-child-1.usdz", "model/vnd.usdz+zip")); |
| const newSource = model.insertBefore(makeSource("model-child-2.usdz", "model/vnd.usdz+zip"), model.firstChild); |
| assert_equals(model.currentSrc, newSource.src); |
| }, "An inserted <source> with a supported type is selected."); |
| </script> |
| </body> |
| </html> |