/* Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ */ "use strict"; // Tests that @position-try rules are displayed in a dedicated section. const TEST_URI = `https://example.org/document-builder.sjs?html=${encodeURIComponent(`
⚓️
`)}`; add_task(async function () { await pushPref("layout.css.anchor-positioning.enabled", true); await addTab(TEST_URI); const { inspector, view } = await openRuleView(); info( "Check that the @property-try section isn't displayed if the at-rules are not used in the position-try declaration" ); await selectNode(".anchored.no-at-position-try", inspector); const anchoredClassRuleItem = { selector: ".anchored", declarations: [ { name: "position", value: "fixed" }, { name: "position-anchor", value: "--test-anchor" }, { name: "color", value: "peachpuff" }, ], }; await checkRuleViewContent(view, [ { selector: "element", selectorEditable: false, declarations: [], }, { selector: ".no-at-position-try", declarations: [{ name: "position-try", value: "top" }], }, anchoredClassRuleItem, ]); info( "Check that the @property-try section isn't displayed if the the position-try value " + "refers to an unknown dashed ident" ); await selectNode(".anchored.unknown-at-position-try", inspector); await checkRuleViewContent(view, [ { selector: "element", selectorEditable: false, declarations: [], }, { selector: ".unknown-at-position-try", declarations: [{ name: "position-try", value: "top, --unknown" }], }, anchoredClassRuleItem, ]); info( "Check that the @property-try section is displayed and has expected content if a" + "dashed ident is used in the position-try declaration" ); await selectNode(".anchored.single-at-position-try", inspector); await checkRuleViewContent(view, [ { selector: "element", selectorEditable: false, declarations: [], }, { selector: ".single-at-position-try", declarations: [ { name: "position-try", value: "bottom, --custom-bottom" }, ], }, anchoredClassRuleItem, { header: `@position-try`, }, { selector: "--custom-bottom", selectorEditable: false, hasSelectorHighlighterButton: false, declarations: [ { name: "top", value: "anchor(bottom)" }, // we have this here to make sure it's not marked as overridden / does not override // color declaration for regular rules. { name: "color", value: "gold", inactiveCSS: true }, ], }, ]); info( "Check that the @property-try section is displayed and has expected content if multiple " + "dashed-ident are used in the position-try declaration" ); await selectNode(".anchored.multiple-at-position-try", inspector); await checkRuleViewContent(view, [ { selector: "element", selectorEditable: false, declarations: [], }, { selector: ".multiple-at-position-try", declarations: [ { name: "position-try", value: "left, --custom-right,--custom-bottom" }, ], }, anchoredClassRuleItem, { header: `@position-try`, }, { selector: "--custom-bottom", selectorEditable: false, hasSelectorHighlighterButton: false, declarations: [ { name: "top", value: "anchor(bottom)" }, // we have this here to make sure it's not marked as overridden / does not override // color declaration for regular rules. { name: "color", value: "gold", inactiveCSS: true }, ], }, { selector: "--custom-right", selectorEditable: false, hasSelectorHighlighterButton: false, declarations: [ { name: "top", value: "anchor(bottom)" }, { name: "left", value: "anchor(right)" }, { name: "left", value: "10px !important", valid: false }, // we have this here to make sure it's not marked as overridden / does not override // color declaration for regular rules. { name: "color", value: "tomato", inactiveCSS: true }, { name: "--m", value: "10px", inactiveCSS: true }, ], }, ]); info("Check that we can filter on the @position-try name"); await setSearchFilter(view, "--custom-r"); await checkRuleViewContent(view, [ { selector: "element", selectorEditable: false, declarations: [], }, { selector: ".multiple-at-position-try", declarations: [ { name: "position-try", value: "left, --custom-right,--custom-bottom", highlighted: true, }, ], }, { header: `@position-try`, }, { selector: "--custom-right", selectorEditable: false, hasSelectorHighlighterButton: false, declarations: [ { name: "top", value: "anchor(bottom)" }, { name: "left", value: "anchor(right)" }, { name: "left", value: "10px !important", valid: false }, { name: "color", value: "tomato", inactiveCSS: true }, { name: "--m", value: "10px", inactiveCSS: true }, ], }, ]); // TODO: At the moment we display @position-try rules as read-only, but as part of // Bug 2004046, we should assert that adding modifying/adding declaration propagates the change // stylesheet as expected, and that the declarations of the rules are properly updated. });