summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/css/cssom/cssstyledeclaration-setter-logical.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/css/cssom/cssstyledeclaration-setter-logical.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/css/cssom/cssstyledeclaration-setter-logical.html')
-rw-r--r--testing/web-platform/tests/css/cssom/cssstyledeclaration-setter-logical.html73
1 files changed, 73 insertions, 0 deletions
diff --git a/testing/web-platform/tests/css/cssom/cssstyledeclaration-setter-logical.html b/testing/web-platform/tests/css/cssom/cssstyledeclaration-setter-logical.html
new file mode 100644
index 0000000000..13d68e9a70
--- /dev/null
+++ b/testing/web-platform/tests/css/cssom/cssstyledeclaration-setter-logical.html
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<title>CSSOM test: declaration block after setting via CSSOM</title>
+<link rel="help" href="https://drafts.csswg.org/cssom/#set-a-css-declaration-value">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<div id="test"></div>
+<script>
+ test(function() {
+ const PHYSICAL_PROPS = ["padding-top", "padding-right",
+ "padding-bottom", "padding-left"];
+ const LOGICAL_PROPS = ["padding-block-start", "padding-block-end",
+ "padding-inline-start", "padding-inline-end"];
+ let elem = document.getElementById("test");
+ let decls = new Map;
+
+ {
+ let css = []
+ let i = 0;
+ for (let name of [...PHYSICAL_PROPS, ...LOGICAL_PROPS]) {
+ let value = `${i++}px`;
+ css.push(`${name}: ${value};`);
+ decls.set(name, value);
+ }
+ elem.setAttribute("style", css.join(" "));
+ }
+
+ let style = elem.style;
+ function indexOfProperty(prop) {
+ return Array.prototype.indexOf.apply(style, [prop]);
+ }
+ function assertPropAfterProps(prop, props, msg) {
+ let index = indexOfProperty(prop);
+ for (let p of props) {
+ assert_less_than(indexOfProperty(p), index, `${prop} should be after ${p} ${msg}`);
+ }
+ }
+ // We are not changing any value in this test, just order.
+ function assertValueUnchanged() {
+ for (let [name, value] of decls.entries()) {
+ assert_equals(style.getPropertyValue(name), value,
+ `value of ${name} shouldn't be changed`);
+ }
+ }
+
+ assertValueUnchanged();
+ // Check that logical properties are all after physical properties
+ // at the beginning.
+ for (let p of LOGICAL_PROPS) {
+ assertPropAfterProps(p, PHYSICAL_PROPS, "initially");
+ }
+
+ // Try setting a longhand.
+ style.setProperty("padding-top", "0px");
+ assertValueUnchanged();
+ // Check that padding-top is after logical properties, but other
+ // physical properties are still before logical properties.
+ assertPropAfterProps("padding-top", LOGICAL_PROPS, "after setting padding-top");
+ for (let p of LOGICAL_PROPS) {
+ assertPropAfterProps(p, PHYSICAL_PROPS.filter(prop => prop != "padding-top"),
+ "after setting padding-top");
+ }
+
+ // Try setting a shorthand.
+ style.setProperty("padding", "0px 1px 2px 3px");
+ assertValueUnchanged();
+ // Check that all physical properties are now after logical properties.
+ for (let p of PHYSICAL_PROPS) {
+ assertPropAfterProps(p, LOGICAL_PROPS, "after setting padding shorthand");
+ }
+ }, "newly set declaration should be after all declarations " +
+ "in the same logical property group but have different logical kind");
+</script>