| <!DOCTYPE html> <!-- webkit-test-runner [ ModelElementEnabled=true ] --> |
| <script src="../resources/testharness.js"></script> |
| <script src="../resources/testharnessreport.js"></script> |
| <script> |
| |
| // The media attribute is evaluated against the screen media type, so "screen" |
| // and "all" always match while "print" never does. Using media-type queries |
| // (rather than viewport features) keeps the results deterministic regardless of |
| // the test window size. |
| const makeSource = (src, media, type) => { |
| const source = document.createElement("source"); |
| source.src = src; |
| if (media !== undefined) |
| source.media = media; |
| if (type) |
| source.type = type; |
| return source; |
| } |
| |
| test(() => { |
| const model = document.createElement("model"); |
| const source = model.appendChild(makeSource("model.usdz", "all")); |
| assert_equals(model.currentSrc, source.src); |
| }, "A <source> whose media attribute matches is selected."); |
| |
| test(() => { |
| const model = document.createElement("model"); |
| model.appendChild(makeSource("model.usdz", "print")); |
| assert_equals(model.currentSrc, ""); |
| }, "A <source> whose media attribute does not match is not selected."); |
| |
| test(() => { |
| const model = document.createElement("model"); |
| const firstSource = model.appendChild(makeSource("model-1.usdz", "print")); |
| const secondSource = model.appendChild(makeSource("model-2.usdz", "screen")); |
| assert_equals(model.currentSrc, secondSource.src); |
| }, "A non-matching <source> is skipped in favor of a later matching <source>."); |
| |
| test(() => { |
| const model = document.createElement("model"); |
| const firstSource = model.appendChild(makeSource("model-1.usdz", "print")); |
| const secondSource = model.appendChild(makeSource("model-2.usdz")); |
| assert_equals(model.currentSrc, secondSource.src); |
| }, "A <source> without a media attribute acts as a fallback when earlier <source>s do not match."); |
| |
| test(() => { |
| const model = document.createElement("model"); |
| const firstSource = model.appendChild(makeSource("model-1.usdz", "print")); |
| const secondSource = model.appendChild(makeSource("model-2.usdz", "print")); |
| assert_equals(model.currentSrc, ""); |
| |
| firstSource.media = "screen"; |
| assert_equals(model.currentSrc, firstSource.src); |
| }, "Changing a <source> media attribute to a matching value selects it."); |
| |
| test(() => { |
| const model = document.createElement("model"); |
| const firstSource = model.appendChild(makeSource("model-1.usdz", "screen")); |
| const secondSource = model.appendChild(makeSource("model-2.usdz", "screen")); |
| assert_equals(model.currentSrc, firstSource.src); |
| |
| firstSource.media = "print"; |
| assert_equals(model.currentSrc, secondSource.src); |
| }, "Changing a <source> media attribute to a non-matching value deselects it."); |
| |
| test(() => { |
| const model = document.createElement("model"); |
| const firstSource = model.appendChild(makeSource("model-1.usdz", "screen", "model/unknown")); |
| const secondSource = model.appendChild(makeSource("model-2.usdz", "screen", "model/vnd.usdz+zip")); |
| assert_equals(model.currentSrc, secondSource.src); |
| }, "A <source> must satisfy both its media attribute and a supported type to be selected."); |
| |
| </script> |
| </body> |
| </html> |