diff options
Diffstat (limited to 'toolkit/devtools/markupview/test/browser_markupview_mutation_02.js')
-rw-r--r-- | toolkit/devtools/markupview/test/browser_markupview_mutation_02.js | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/toolkit/devtools/markupview/test/browser_markupview_mutation_02.js b/toolkit/devtools/markupview/test/browser_markupview_mutation_02.js new file mode 100644 index 000000000..c55479ae9 --- /dev/null +++ b/toolkit/devtools/markupview/test/browser_markupview_mutation_02.js @@ -0,0 +1,100 @@ +/* vim: set ts=2 et sw=2 tw=80: */ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +// Test that markup-containers in the markup-view do flash when their +// corresponding DOM nodes mutate + +const TEST_URL = TEST_URL_ROOT + "doc_markup_flashing.html"; + +// The test data contains a list of mutations to test. +// Each item is an object: +// - desc: a description of the test step, for better logging +// - mutate: a function that should make changes to the content DOM +// - flashedNode: [optional] the css selector of the node that is expected to +// flash in the markup-view as a result of the mutation. +// If missing, the rootNode (".list") will be expected to flash +const TEST_DATA = [{ + desc: "Adding a new node should flash the new node", + mutate: (doc, rootNode) => { + let newLi = doc.createElement("LI"); + newLi.textContent = "new list item"; + rootNode.appendChild(newLi); + }, + flashedNode: ".list li:nth-child(3)" +}, { + desc: "Removing a node should flash its parent", + mutate: (doc, rootNode) => { + rootNode.removeChild(rootNode.lastElementChild); + } +}, { + desc: "Re-appending an existing node should only flash this node", + mutate: (doc, rootNode) => { + rootNode.appendChild(rootNode.firstElementChild); + }, + flashedNode: ".list .item:last-child" +}, { + desc: "Adding an attribute should flash the node", + mutate: (doc, rootNode) => { + rootNode.setAttribute("name-" + Date.now(), "value-" + Date.now()); + } +}, { + desc: "Editing an attribute should flash the node", + mutate: (doc, rootNode) => { + rootNode.setAttribute("class", "list value-" + Date.now()); + } +}, { + desc: "Removing an attribute should flash the node", + mutate: (doc, rootNode) => { + rootNode.removeAttribute("class"); + } +}]; + +add_task(function*() { + let {inspector} = yield addTab(TEST_URL).then(openInspector); + + // Make sure mutated nodes flash for a very long time so we can more easily + // assert they do + inspector.markup.CONTAINER_FLASHING_DURATION = 1000 * 60 * 60; + + info("Getting the <ul.list> root node to test mutations on"); + let rootNode = getNode(".list"); + let rootNodeFront = yield getNodeFront(".list", inspector); + + info("Selecting the last element of the root node before starting"); + yield selectNode(".list .item:nth-child(2)", inspector); + + for (let {mutate, flashedNode, desc} of TEST_DATA) { + info("Starting test: " + desc); + + info("Mutating the DOM and listening for markupmutation event"); + let mutated = inspector.once("markupmutation"); + let updated = inspector.once("inspector-updated"); + mutate(content.document, rootNode); + yield mutated; + + info("Asserting that the correct markup-container is flashing"); + let flashingNodeFront = rootNodeFront; + if (flashedNode) { + flashingNodeFront = yield getNodeFront(flashedNode, inspector); + } + yield assertNodeFlashing(flashingNodeFront, inspector); + + // Making sure the inspector has finished updating before moving on + yield updated; + } +}); + +function* assertNodeFlashing(nodeFront, inspector) { + let container = getContainerForNodeFront(nodeFront, inspector); + ok(container, "Markup container for node found"); + ok(container.tagState.classList.contains("theme-bg-contrast"), + "Markup container for node is flashing"); + + // Clear the mutation flashing timeout now that we checked the node was flashing + let markup = inspector.markup; + markup._frame.contentWindow.clearTimeout(container._flashMutationTimer); + container._flashMutationTimer = null; +} |