summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/resize-observer/fragments.html
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
commit26a029d407be480d791972afb5975cf62c9360a6 (patch)
treef435a8308119effd964b339f76abb83a57c29483 /testing/web-platform/tests/resize-observer/fragments.html
parentInitial commit. (diff)
downloadfirefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz
firefox-26a029d407be480d791972afb5975cf62c9360a6.zip
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/resize-observer/fragments.html')
-rw-r--r--testing/web-platform/tests/resize-observer/fragments.html115
1 files changed, 115 insertions, 0 deletions
diff --git a/testing/web-platform/tests/resize-observer/fragments.html b/testing/web-platform/tests/resize-observer/fragments.html
new file mode 100644
index 0000000000..bba94db88e
--- /dev/null
+++ b/testing/web-platform/tests/resize-observer/fragments.html
@@ -0,0 +1,115 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>ResizeObserver with multiple fragments</title>
+<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/resize-observer-1/">
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3673">
+<meta name="assert" content="Tests ResizeObserver supports multiple fragments." />
+
+<style>
+#wrapper {
+ column-width: 100px;
+ width: max-content;
+ height: 100px;
+ margin: 10px;
+}
+#target {
+ outline: solid;
+ background: orange;
+}
+.w50 {
+ width: 50px;
+}
+.w75 {
+ width: 75px;
+}
+.h100 {
+ height: 100px;
+}
+.h150 {
+ height: 150px;
+}
+.h175 {
+ height: 175px;
+}
+</style>
+
+<div id="log"></div>
+
+<div id="wrapper">
+ <div id="target"></div>
+</div>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+const target = document.getElementById("target");
+
+const nextSizes = (() => {
+ let callback = null;
+ new ResizeObserver((entries) => {
+ if (callback) {
+ callback(entries[0].contentBoxSize);
+ callback = null;
+ }
+ }).observe(target);
+ return () => {
+ if (callback) {
+ throw "Already awaiting another notification";
+ }
+ return new Promise((resolve, reject) => {
+ callback = resolve;
+ requestAnimationFrame(() => {
+ requestAnimationFrame(() => {
+ reject("Missing ResizeObserver notification");
+ callback = null;
+ });
+ });
+ });
+ };
+})();
+
+function checkSizes(className, expectedSizes, msg) {
+ promise_test(async () => {
+ await new Promise(requestAnimationFrame);
+ target.className = className;
+ let sizes;
+ try {
+ sizes = await nextSizes();
+ } catch (error) {
+ assert_unreached(error);
+ }
+ assert_equals(sizes.length, expectedSizes.length, "number of fragments");
+ for (let i = 0; i < sizes.length; ++i) {
+ assert_equals(sizes[i].inlineSize, expectedSizes[i][0], `fragment #${i+1} inline size`);
+ assert_equals(sizes[i].blockSize, expectedSizes[i][1], `fragment #${i+1} block size`);
+ }
+ }, msg);
+}
+
+checkSizes(
+ "w50 h100",
+ [[50, 100]],
+ "Single fragment"
+);
+checkSizes(
+ "w50 h150",
+ [[50, 100], [50, 50]],
+ "Adding 2nd fragment"
+);
+checkSizes(
+ "w50 h175",
+ [[50, 100], [50, 75]],
+ "Resizing 2nd fragment"
+);
+checkSizes(
+ "w75 h175",
+ [[75, 100], [75, 75]],
+ "Resizing all fragments"
+);
+checkSizes(
+ "w75 h100",
+ [[75, 100]],
+ "Removing 2nd fragment"
+);
+</script>