diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /testing/web-platform/tests/css/css-contain/contain-style-dynamic-001.html | |
parent | Initial commit. (diff) | |
download | firefox-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/css/css-contain/contain-style-dynamic-001.html')
-rw-r--r-- | testing/web-platform/tests/css/css-contain/contain-style-dynamic-001.html | 280 |
1 files changed, 280 insertions, 0 deletions
diff --git a/testing/web-platform/tests/css/css-contain/contain-style-dynamic-001.html b/testing/web-platform/tests/css/css-contain/contain-style-dynamic-001.html new file mode 100644 index 0000000000..dfd4032ac5 --- /dev/null +++ b/testing/web-platform/tests/css/css-contain/contain-style-dynamic-001.html @@ -0,0 +1,280 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Dynamic change to style containment</title> +<link rel="help" href="https://drafts.csswg.org/css-contain/#contain-property"> +<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1765615"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="Verify style containment is properly updated after dynamic change to the contain property."> +<style> + /* Selectors for contain */ + #none .wrapper { + contain: none; + } + #style .wrapper { + contain: style; + } + #none_to_style .wrapper { + contain: none; + } + #style_to_none .wrapper { + contain: style; + } + + /* Selectors for testing counters */ + .set_counter_to_9 { + counter-set: testcounter 9; + } + .increment_counter { + counter-increment: testcounter; + } + .set_counter_to_10 { + counter-set: testcounter 10; + } + span.print_counter::after { + font: 25px/1 Ahem; + content: counters(testcounter, "."); + } + + /* Selectors for testing quotes */ + .open_quote::after { + content: open-quote; + } + .close_quote::after { + content: close-quote; + } + .no_open_quote::after { + content: no-open-quote; + } + .no_close_quote::after { + content: no-close-quote; + } + span.print_quotes::before, span.print_quotes::after { + font: 25px/1 Ahem; + quotes: "A" "" "BB" "" "CCC" "" "DDDD" "" "EEEEE" "" "FFFFF" "" "GGGGGG" "" "HHHHHHH" "" "IIIIIIII" "" "JJJJJJJJJ" ""; + } + span.print_quotes::before { + content: open-quote; + } + span.print_quotes::after { + content: no-close-quote; + } +</style> +<body> + <div id="log"></div> + + <div id="none"> + <div class="set_counter_to_9"></div> + <span><span class="print_counter"></span></span> + <div class="wrapper"> + <span class="increment_counter"></span> + </div> + <span><span class="print_counter"></span></span> + + <div class="set_counter_to_9"></div> + <span><span class="print_counter"></span></span> + <div class="wrapper"> + <span class="set_counter_to_10"></span> + </div> + <span><span class="print_counter"></span></span> + + <span><span class="print_quotes"></span></span> + <div class="wrapper"> + <span class="open_quote"></span> + </div> + <span><span class="print_quotes"></span></span> + + <span><span class="print_quotes"></span></span> + <div class="wrapper"> + <span class="close_quote"></span> + </div> + <span><span class="print_quotes"></span></span> + + <span><span class="print_quotes"></span></span> + <div class="wrapper"> + <span class="no_open_quote"></span> + </div> + <span><span class="print_quotes"></span></span> + + <span><span class="print_quotes"></span></span> + <div class="wrapper"> + <span class="no_close_quote"></span> + </div> + <span><span class="print_quotes"></span></span> + </div> + + <div id="style"> + <div class="set_counter_to_9"></div> + <span><span class="print_counter"></span></span> + <div class="wrapper"> + <span class="increment_counter"></span> + </div> + <span><span class="print_counter"></span></span> + + <div class="set_counter_to_9"></div> + <span><span class="print_counter"></span></span> + <div class="wrapper"> + <span class="set_counter_to_10"></span> + </div> + <span><span class="print_counter"></span></span> + + <span><span class="print_quotes"></span></span> + <div class="wrapper"> + <span class="open_quote"></span> + </div> + <span><span class="print_quotes"></span></span> + + <span><span class="print_quotes"></span></span> + <div class="wrapper"> + <span class="close_quote"></span> + </div> + <span><span class="print_quotes"></span></span> + + <span><span class="print_quotes"></span></span> + <div class="wrapper"> + <span class="no_open_quote"></span> + </div> + <span><span class="print_quotes"></span></span> + + <span><span class="print_quotes"></span></span> + <div class="wrapper"> + <span class="no_close_quote"></span> + </div> + <span><span class="print_quotes"></span></span> + </div> + + <div id="none_to_style"> + <div class="set_counter_to_9"></div> + <span><span class="print_counter"></span></span> + <div class="wrapper"> + <span class="increment_counter"></span> + </div> + <span><span class="print_counter"></span></span> + + <div class="set_counter_to_9"></div> + <span><span class="print_counter"></span></span> + <div class="wrapper"> + <span class="set_counter_to_10"></span> + </div> + <span><span class="print_counter"></span></span> + + <span><span class="print_quotes"></span></span> + <div class="wrapper"> + <span class="open_quote"></span> + </div> + <span><span class="print_quotes"></span></span> + + <span><span class="print_quotes"></span></span> + <div class="wrapper"> + <span class="close_quote"></span> + </div> + <span><span class="print_quotes"></span></span> + + <span><span class="print_quotes"></span></span> + <div class="wrapper"> + <span class="no_open_quote"></span> + </div> + <span><span class="print_quotes"></span></span> + + <span><span class="print_quotes"></span></span> + <div class="wrapper"> + <span class="no_close_quote"></span> + </div> + <span><span class="print_quotes"></span></span> + </div> + + <div id="style_to_none"> + <div class="set_counter_to_9"></div> + <span><span class="print_counter"></span></span> + <div class="wrapper"> + <span class="increment_counter"></span> + </div> + <span><span class="print_counter"></span></span> + + <div class="set_counter_to_9"></div> + <span><span class="print_counter"></span></span> + <div class="wrapper"> + <span class="set_counter_to_10"></span> + </div> + <span><span class="print_counter"></span></span> + + <span><span class="print_quotes"></span></span> + <div class="wrapper"> + <span class="open_quote"></span> + </div> + <span><span class="print_quotes"></span></span> + + <span><span class="print_quotes"></span></span> + <div class="wrapper"> + <span class="close_quote"></span> + </div> + <span><span class="print_quotes"></span></span> + + <span><span class="print_quotes"></span></span> + <div class="wrapper"> + <span class="no_open_quote"></span> + </div> + <span><span class="print_quotes"></span></span> + + <span><span class="print_quotes"></span></span> + <div class="wrapper"> + <span class="no_close_quote"></span> + </div> + <span><span class="print_quotes"></span></span> + </div> + + <script> + function verifyStyleContainment(id, applied) { + let container = document.getElementById(id); + + // To verify style containment for counters and quotes, we check whether + // the properties in the wrapper affect the string length of generated + // content. + function haveSameStringLength(box1, box2) { + const ahemFontSizePx = 25; + return Math.abs(box2.width - box1.width) < ahemFontSizePx / 2; + } + let counter_box = + Array.from(container.getElementsByClassName("print_counter")) + .map(e => e.parentNode.getBoundingClientRect()); + let quote_box = + Array.from(container.getElementsByClassName("print_quotes")) + .map(e => e.parentNode.getBoundingClientRect()); + assert_equals(haveSameStringLength(counter_box[0], counter_box[1]), applied, "increment-counter"); + assert_equals(haveSameStringLength(counter_box[2], counter_box[3]), applied, "set-counter"); + assert_equals(haveSameStringLength(quote_box[0], quote_box[1]), applied, "open-quote"); + assert_equals(haveSameStringLength(quote_box[2], quote_box[3]), applied, "close-quote"); + assert_equals(haveSameStringLength(quote_box[4], quote_box[5]), applied, "no-open-quote"); + assert_equals(haveSameStringLength(quote_box[6], quote_box[7]), applied, "no-close-quote"); + } + + function setContain(id, value) { + let container = document.getElementById(id); + Array.from(container.getElementsByClassName("wrapper")) + .forEach(element => element.style.contain = value); + } + + promise_test(async () => { + await document.fonts.ready; + verifyStyleContainment("none", /*applied=*/ false); + }, "contain: none"); + + promise_test(async () => { + await document.fonts.ready; + verifyStyleContainment("style", /*applied=*/ true); + }, "contain: style"); + + promise_test(async () => { + await document.fonts.ready; + setContain("none_to_style", "style"); + verifyStyleContainment("none_to_style", /*applied=*/ true); + }, "switching contain from none to style"); + + promise_test(async () => { + await document.fonts.ready; + setContain("style_to_none", "none"); + verifyStyleContainment("style_to_none", /*applied=*/ false); + }, "switching contain from style to none"); + </script> +</body> |