blob: 99a6546b72dfbabb1cdf7899a79dfbf82c5a8133 [file] [log] [blame] [edit]
<!doctype html> <!-- webkit-test-runner [ ModelElementEnabled=true ] -->
<meta charset="utf-8">
<title>&lt;model> load and error events</title>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="resources/model-element-test-utils.js"></script>
<body>
<script>
'use strict';
const model_load_test = (expectedEvent, possibleIntermediateEvents, executor, description) => {
promise_test(t => {
return new Promise((resolve, reject) => {
const [model, source] = createModelAndSource(t);
const handleEvent = event => {
if (event.type === "load")
assert_true(model.complete || !model.currentSrc, `model.complete is true upon receiving the "load" event with non-empty source.`);
else if (event.type === "error")
assert_false(model.complete, `model.complete is false upon receiving the "error" event.`);
if (event.type === expectedEvent)
resolve();
else {
let intermediateEventIndex = possibleIntermediateEvents.indexOf(event.type);
if (intermediateEventIndex > -1)
possibleIntermediateEvents.splice(intermediateEventIndex, 1);
else
reject(`received unexpected event: ${event.type}`);
}
}
assert_false(model.complete, "model.complete is false before the load is initiated.");
model.addEventListener("load", handleEvent);
model.addEventListener("error", handleEvent);
executor(source);
});
}, description);
};
model_load_test("error", ["load"], source => {
source.src = "resources/heart.usdz";
source.remove();
}, `<model> dispatches an "error" event when its resource load is aborted before completion.`);
model_load_test("error", [], source => {
source.src = "resources/does-not-exist.usdz";
}, `<model> dispatches an "error" event when its specified resource does not exist.`);
model_load_test("load", [], source => {
source.src = "resources/cube.usdz";
}, `<model> dispatches a "load" event when its resource is successfully loaded.`);
</script>
</body>