mirror of
https://github.com/servo/servo.git
synced 2025-06-29 11:33:39 +01:00
66 lines
2.2 KiB
JavaScript
66 lines
2.2 KiB
JavaScript
function imageLoadedPromise(image) {
|
|
return new Promise(function(resolve, reject) {
|
|
if (image.complete)
|
|
resolve();
|
|
image.addEventListener("load", resolve, { once: true });
|
|
});
|
|
}
|
|
|
|
function videoLoadedPromise(video) {
|
|
return new Promise(function(resolve, reject) {
|
|
if (video.readyState == 4)
|
|
resolve();
|
|
else {
|
|
video.addEventListener("loadeddata", resolve, { once: true });
|
|
video.addEventListener("error", reject, { once: true });
|
|
}
|
|
});
|
|
}
|
|
|
|
function waitForNFrames(count) {
|
|
if (count <= 0)
|
|
return Promise.reject(new TypeError("count should be greater than 0!"));
|
|
|
|
return new Promise(resolve => {
|
|
function tick() {
|
|
(--count) ? requestAnimationFrame(tick) : resolve();
|
|
}
|
|
requestAnimationFrame(tick);
|
|
});
|
|
}
|
|
|
|
function seekTo(video, time) {
|
|
return new Promise(function(resolve, reject) {
|
|
video.addEventListener("seeked", async function() {
|
|
/* Work around flakiness in video players... */
|
|
await waitForNFrames(3);
|
|
resolve();
|
|
}, { once: true });
|
|
video.currentTime = time;
|
|
});
|
|
}
|
|
|
|
function checkBoundingBox(actual, expected, fuzziness) {
|
|
assert_equals(actual.constructor.name, "DOMRectReadOnly");
|
|
assert_approx_equals(actual.left, expected.left, fuzziness);
|
|
assert_approx_equals(actual.right, expected.right, fuzziness);
|
|
assert_approx_equals(actual.top, expected.top, fuzziness);
|
|
assert_approx_equals(actual.bottom, expected.bottom, fuzziness);
|
|
}
|
|
|
|
function checkPointsLieWithinBoundingBox(points, boundingBox) {
|
|
for (point of points) {
|
|
assert_between_inclusive(point.x, boundingBox.left, boundingBox.right);
|
|
assert_between_inclusive(point.y, boundingBox.top, boundingBox.bottom);
|
|
}
|
|
}
|
|
|
|
function checkPointIsNear(actual, expected, fuzzinessX, fuzzinessY) {
|
|
assert_approx_equals(actual.x, expected.x, fuzzinessX);
|
|
assert_approx_equals(actual.y, expected.y, fuzzinessY);
|
|
}
|
|
|
|
function checkPointsAreNear(actual, expected, fuzzinessX, fuzzinessY) {
|
|
for (point of actual)
|
|
checkPointIsNear(point, expected, fuzzinessX, fuzzinessY);
|
|
}
|