/* Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ */ "use strict"; // Tests that the text editor correctly display the grid-template-areas value. // The CSS Grid spec allows to create grid-template-areas in an ascii-art style matrix. // It should show each string on its own line, when displaying rules for grid-template-areas. const TEST_URI = `
cell a
cell b
cell c
Show us the wonder-working Brothers, let them come out publicly—and we will believe in them!
cell a
cell b
cell a
cell b
`; const multiLinesInnerText = '\n"a a bb" \n\'a a bb\' \n"ccc ccc bb"'; const typedAndCopiedMultiLinesString = '"a a bb ccc" "a a bb ccc"'; const typedAndCopiedMultiLinesInnerText = '\n"a a bb ccc" \n"a a bb ccc"'; add_task(async function () { await addTab("data:text/html;charset=utf-8," + encodeURIComponent(TEST_URI)); const { inspector, view } = await openRuleView(); info("Selecting the test node"); await selectNode("#testid", inspector); info( "Tests display of grid-template-areas value in an ascii-art style," + "displaying each string on its own line" ); const gridRuleProperty = await getRuleViewProperty( view, "#testid", "grid-template-areas" ).valueSpan; is( gridRuleProperty.innerText, multiLinesInnerText, "the grid-area is displayed with each string in its own line, and sufficient spacing for areas to align vertically" ); // copy/paste the current value inside, to also make sure of the value copied is useful as text // Calculate offsets to click in the value line which is below the property name line . const rect = gridRuleProperty.getBoundingClientRect(); const previousProperty = await getRuleViewProperty( view, "#testid", "display" ).nameSpan.getBoundingClientRect(); const x = rect.width / 2; const y = rect.y - previousProperty.y + 1; info("Focusing the css property editable value"); await focusEditableField(view, gridRuleProperty, x, y); info("typing a new value"); [...typedAndCopiedMultiLinesString].map(char => EventUtils.synthesizeKey(char, {}, view.styleWindow) ); EventUtils.synthesizeKey("VK_RETURN", {}, view.styleWindow); is( gridRuleProperty.innerText, typedAndCopiedMultiLinesInnerText, "the typed value is correct, and a single quote is displayed on its own line" ); info("copy-paste the 'grid-template-areas' property value to duplicate it"); const onDone = view.once("ruleview-changed"); await focusEditableField(view, gridRuleProperty, x, y); EventUtils.synthesizeKey("C", { accelKey: true }, view.styleWindow); EventUtils.synthesizeKey("KEY_ArrowRight", {}, view.styleWindow); EventUtils.synthesizeKey("V", { accelKey: true }, view.styleWindow); EventUtils.synthesizeKey("VK_RETURN", {}, view.styleWindow); await onDone; info("Check copy-pasting the property value is not breaking it"); is( gridRuleProperty.innerText, typedAndCopiedMultiLinesInnerText + " " + typedAndCopiedMultiLinesInnerText, "copy-pasting the current value duplicate the correct value, with each string of the multi strings grid-template-areas value is displayed on a new line" ); // test that when "non grid-template-area", like quotes for example, its multi-string value is not displayed over multiple lines await selectNode("#testid-quotes", inspector); info( "Tests display of content string value is NOT in an ascii-art style," + "displaying each string on a single line" ); const contentRuleProperty = await getRuleViewProperty( view, "#testid-quotes", "quotes" ).valueSpan; is( contentRuleProperty.innerText, '"«" "»" "‹" "›"', "the quotes strings values are all displayed on the same single line" ); // test that when invalid strings values do not get formatted info("testing it does not try to format invalid values"); await selectNode("#testid-invalid-strings", inspector); const invalidGridRuleProperty = await getRuleViewProperty( view, "#testid-invalid-strings", "grid-template-areas" ).valueSpan; is( invalidGridRuleProperty.innerText, '"a a b" "a a"', "the invalid strings values do not get formatted" ); // test that when a valid value without quotes such as `inherit` it does not get formatted info("testing it does not try to format valid non-quote values"); await selectNode("#testid-valid-quotefree-value", inspector); const validGridRuleNoQuoteProperty = await getRuleViewProperty( view, "#testid-valid-quotefree-value", "grid-template-areas" ).valueSpan; is( validGridRuleNoQuoteProperty.innerText, "inherit", "the valid quote-free values do not get formatted" ); });