summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/css/css-cascade/scope-proximity.html
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 01:47:29 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 01:47:29 +0000
commit0ebf5bdf043a27fd3dfb7f92e0cb63d88954c44d (patch)
treea31f07c9bcca9d56ce61e9a1ffd30ef350d513aa /testing/web-platform/tests/css/css-cascade/scope-proximity.html
parentInitial commit. (diff)
downloadfirefox-esr-0ebf5bdf043a27fd3dfb7f92e0cb63d88954c44d.tar.xz
firefox-esr-0ebf5bdf043a27fd3dfb7f92e0cb63d88954c44d.zip
Adding upstream version 115.8.0esr.upstream/115.8.0esr
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/css/css-cascade/scope-proximity.html')
-rw-r--r--testing/web-platform/tests/css/css-cascade/scope-proximity.html123
1 files changed, 123 insertions, 0 deletions
diff --git a/testing/web-platform/tests/css/css-cascade/scope-proximity.html b/testing/web-platform/tests/css/css-cascade/scope-proximity.html
new file mode 100644
index 0000000000..c133a71e9a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-cascade/scope-proximity.html
@@ -0,0 +1,123 @@
+<!DOCTYPE html>
+<title>@scope - proximity to root</title>
+<link rel="help" href="https://drafts.csswg.org/css-cascade-6/#scope-proximity">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+
+function test_scope(script_element, callback_fn, description) {
+ test((t) => {
+ // The provided <script> element must be an immedate subsequent sibling of
+ // a <template> element.
+ let template_element = script_element.previousElementSibling;
+ assert_equals(template_element.tagName, 'TEMPLATE');
+
+ t.add_cleanup(() => {
+ while (main.firstChild)
+ main.firstChild.remove()
+ });
+
+ main.append(template_element.content.cloneNode(true));
+
+ callback_fn();
+ }, description);
+}
+
+function assert_green(selector) {
+ assert_equals(getComputedStyle(main.querySelector(selector)).backgroundColor, 'rgb(0, 128, 0)');
+}
+function assert_not_green(selector) {
+ assert_equals(getComputedStyle(main.querySelector(selector)).backgroundColor, 'rgb(0, 0, 0)');
+}
+</script>
+<style>
+ main * {
+ background-color: black;
+ }
+</style>
+<main id=main>
+</main>
+
+<template>
+ <style>
+ .item {
+ padding: 0px;
+ border: 5px solid red;
+ }
+
+ @scope (.light) {
+ [id] { border-color: rgb(100, 100, 100); }
+ }
+
+ @scope (.dark) {
+ [id] { border-color: rgb(200, 200, 200); }
+ }
+ </style>
+ <div class=light>
+ <div id=item1>
+ <div class=dark>
+ <div id=item2>
+ <div class=light>
+ <div id=item3>
+ <div class=dark>
+ <div id=item4></div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+</template>
+<script>
+test_scope(document.currentScript, () => {
+ assert_equals(getComputedStyle(item1).borderColor, 'rgb(100, 100, 100)');
+ assert_equals(getComputedStyle(item2).borderColor, 'rgb(200, 200, 200)');
+ assert_equals(getComputedStyle(item3).borderColor, 'rgb(100, 100, 100)');
+ assert_equals(getComputedStyle(item4).borderColor, 'rgb(200, 200, 200)');
+}, 'Alternating light/dark');
+</script>
+
+
+<template>
+ <style>
+ @scope (.b) {
+ [id] { border-color:green; }
+ }
+ @scope (.a) {
+ [id] { border-color:red; }
+ }
+ </style>
+ <div class=a>
+ <div class=b>
+ <span id=item></span>
+ </div>
+ </div>
+</template>
+<script>
+test_scope(document.currentScript, () => {
+ assert_equals(getComputedStyle(item).borderColor, 'rgb(0, 128, 0)');
+}, 'Proximity wins over order of appearance');
+</script>
+
+
+<template>
+ <style>
+ @scope (.a) {
+ span[id] { border-color:green; }
+ }
+ @scope (.b) {
+ [id] { border-color:red; }
+ }
+ </style>
+ <div class=a>
+ <div class=b>
+ <span id=item></span>
+ </div>
+ </div>
+</template>
+<script>
+test_scope(document.currentScript, () => {
+ assert_equals(getComputedStyle(item).borderColor, 'rgb(0, 128, 0)');
+}, 'Specificity wins over proximity');
+</script>