/* Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ */ "use strict"; // Test that the rule and computed views refresh when style changes that impact the // current selection occur. // This test does not need to worry about the correctness of the styles and rules // displayed in these views (other tests do this) but only cares that they do catch the // change. const TEST_URI = TEST_URL_ROOT + "doc_content_style_changes.html"; const TEST_DATA = [ { target: "#test", className: "green-class", force: true, }, { target: "#test", className: "green-class", force: false, }, { target: "#parent", className: "purple-class", force: true, }, { target: "#parent", className: "purple-class", force: false, }, { target: "#sibling", className: "blue-class", force: true, }, { target: "#sibling", className: "blue-class", force: false, }, ]; add_task(async function () { const tab = await addTab(TEST_URI); const { inspector } = await openRuleView(); await selectNode("#test", inspector); info("Run the test on the rule-view"); await runViewTest(inspector, tab, "rule"); info("Switch to the computed view"); const onComputedViewReady = inspector.once("computed-view-refreshed"); selectComputedView(inspector); await onComputedViewReady; info("Run the test again on the computed view"); await runViewTest(inspector, tab, "computed"); }); async function runViewTest(inspector, tab, viewName) { for (const { target, className, force } of TEST_DATA) { info( (force ? "Adding" : "Removing") + ` class ${className} on ${target} and expecting a ${viewName}-view refresh` ); await toggleClassAndWaitForViewChange( { target, className, force }, inspector, tab, `${viewName}-view-refreshed` ); } } async function toggleClassAndWaitForViewChange( whatToMutate, inspector, tab, eventName ) { const onRefreshed = inspector.once(eventName); await SpecialPowers.spawn( tab.linkedBrowser, [whatToMutate], function ({ target, className, force }) { content.document.querySelector(target).classList.toggle(className, force); } ); await onRefreshed; ok(true, "The view was refreshed after the class was changed"); }