diff --git a/devtools/client/inspector/markup/test/browser_markup_tag_edit_01.js b/devtools/client/inspector/markup/test/browser_markup_tag_edit_01.js index dcc85e9c91c7..6fe19450005c 100644 --- a/devtools/client/inspector/markup/test/browser_markup_tag_edit_01.js +++ b/devtools/client/inspector/markup/test/browser_markup_tag_edit_01.js @@ -68,6 +68,6 @@ var TEST_DATA = [ ]; add_task(async function() { - const { inspector, testActor } = await openInspectorForURL(TEST_URL); - await runEditAttributesTests(TEST_DATA, inspector, testActor); + const { inspector } = await openInspectorForURL(TEST_URL); + await runEditAttributesTests(TEST_DATA, inspector); }); diff --git a/devtools/client/inspector/markup/test/browser_markup_tag_edit_02.js b/devtools/client/inspector/markup/test/browser_markup_tag_edit_02.js index 20ab3b1d6512..072fe1da5b03 100644 --- a/devtools/client/inspector/markup/test/browser_markup_tag_edit_02.js +++ b/devtools/client/inspector/markup/test/browser_markup_tag_edit_02.js @@ -10,19 +10,15 @@ const TEST_URL = `data:text/html, add_task(async function() { info("Opening the inspector on the test page"); - const { inspector, testActor } = await openInspectorForURL(TEST_URL); + const { inspector } = await openInspectorForURL(TEST_URL); info("Selecting the test node"); await focusNode("#test-div", inspector); info("Verify attributes, only ID should be there for now"); - await assertAttributes( - "#test-div", - { - id: "test-div", - }, - testActor - ); + await assertAttributes("#test-div", { + id: "test-div", + }); info("Focus the ID attribute and change its content"); const { editor } = await getContainerForSelector("#test-div", inspector); @@ -36,23 +32,15 @@ add_task(async function() { await mutated; info("Verify attributes, should have ID, class and style"); - await assertAttributes( - "#test-div", - { - id: "test-div", - class: "newclass", - style: "color:green", - }, - testActor - ); + await assertAttributes("#test-div", { + id: "test-div", + class: "newclass", + style: "color:green", + }); info("Trying to undo the change"); await undoChange(inspector); - await assertAttributes( - "#test-div", - { - id: "test-div", - }, - testActor - ); + await assertAttributes("#test-div", { + id: "test-div", + }); }); diff --git a/devtools/client/inspector/markup/test/browser_markup_tag_edit_03.js b/devtools/client/inspector/markup/test/browser_markup_tag_edit_03.js index 00011c039f8a..eb89431fb6a8 100644 --- a/devtools/client/inspector/markup/test/browser_markup_tag_edit_03.js +++ b/devtools/client/inspector/markup/test/browser_markup_tag_edit_03.js @@ -9,7 +9,7 @@ const TEST_URL = `data:text/html;charset=utf-8,
`; add_task(async function() { - const { inspector, testActor } = await openInspectorForURL(TEST_URL); + const { inspector } = await openInspectorForURL(TEST_URL); await inspector.markup.expandAll(); @@ -20,16 +20,19 @@ add_task(async function() { let container = await getContainerForSelector("#retag-me", inspector); ok(container.expanded, "The container is expanded"); - let parentInfo = await testActor.getNodeInfo("#retag-me"); is( - parentInfo.tagName.toLowerCase(), + (await getContentPageElementProperty("#retag-me", "tagName")).toLowerCase(), "div", "We've got #retag-me element, it's a DIV" ); - is(parentInfo.numChildren, 1, "#retag-me has one child"); - let childInfo = await testActor.getNodeInfo("#retag-me > *"); is( - childInfo.attributes[0].value, + await getContentPageElementProperty("#retag-me", "childElementCount"), + 1, + "#retag-me has one child" + ); + + is( + await getContentPageElementProperty("#retag-me > *", "id"), "retag-me-2", "#retag-me's only child is #retag-me-2" ); @@ -46,12 +49,19 @@ add_task(async function() { ok(container.selected, "The container is still selected"); info("Checking that the tagname change was done"); - parentInfo = await testActor.getNodeInfo("#retag-me"); - is(parentInfo.tagName.toLowerCase(), "p", "The #retag-me element is now a P"); - is(parentInfo.numChildren, 1, "#retag-me still has one child"); - childInfo = await testActor.getNodeInfo("#retag-me > *"); + is( - childInfo.attributes[0].value, + (await getContentPageElementProperty("#retag-me", "tagName")).toLowerCase(), + "p", + "The #retag-me element is now a P" + ); + is( + await getContentPageElementProperty("#retag-me", "childElementCount"), + 1, + "#retag-me still has one child" + ); + is( + await getContentPageElementProperty("#retag-me > *", "id"), "retag-me-2", "#retag-me's only child is #retag-me-2" ); diff --git a/devtools/client/inspector/markup/test/browser_markup_tag_edit_05.js b/devtools/client/inspector/markup/test/browser_markup_tag_edit_05.js index 89e01c4d823d..9b6fee8bc710 100644 --- a/devtools/client/inspector/markup/test/browser_markup_tag_edit_05.js +++ b/devtools/client/inspector/markup/test/browser_markup_tag_edit_05.js @@ -80,6 +80,6 @@ var TEST_DATA = [ ]; add_task(async function() { - const { inspector, testActor } = await openInspectorForURL(TEST_URL); - await runAddAttributesTests(TEST_DATA, "div", inspector, testActor); + const { inspector } = await openInspectorForURL(TEST_URL); + await runAddAttributesTests(TEST_DATA, "div", inspector); }); diff --git a/devtools/client/inspector/markup/test/browser_markup_tag_edit_06.js b/devtools/client/inspector/markup/test/browser_markup_tag_edit_06.js index b657127c10c9..3a90972cf762 100644 --- a/devtools/client/inspector/markup/test/browser_markup_tag_edit_06.js +++ b/devtools/client/inspector/markup/test/browser_markup_tag_edit_06.js @@ -90,6 +90,6 @@ var TEST_DATA = [ ]; add_task(async function() { - const { inspector, testActor } = await openInspectorForURL(TEST_URL); - await runAddAttributesTests(TEST_DATA, "div", inspector, testActor); + const { inspector } = await openInspectorForURL(TEST_URL); + await runAddAttributesTests(TEST_DATA, "div", inspector); }); diff --git a/devtools/client/inspector/markup/test/browser_markup_tag_edit_07.js b/devtools/client/inspector/markup/test/browser_markup_tag_edit_07.js index f1bf622af03f..4ec0368fa353 100644 --- a/devtools/client/inspector/markup/test/browser_markup_tag_edit_07.js +++ b/devtools/client/inspector/markup/test/browser_markup_tag_edit_07.js @@ -9,12 +9,18 @@ loadHelperScript("helper_attributes_test_runner.js"); /*eslint-disable */ -const LONG_ATTRIBUTE = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-ABCDEFGHIJKLMNOPQRSTUVWXYZ-ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ-ABCDEFGHIJKLMNOPQRSTUVWXYZ-ABCDEFGHIJKLMNOPQRSTUVWXYZ"; -const LONG_ATTRIBUTE_COLLAPSED = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-ABCDEFGHIJKLMNOPQRSTUVWXYZ-ABCDEF\u2026UVWXYZ-ABCDEFGHIJKLMNOPQRSTUVWXYZ-ABCDEFGHIJKLMNOPQRSTUVWXYZ"; -const DATA_URL_INLINE_STYLE='color: red; background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC");'; -const DATA_URL_INLINE_STYLE_COLLAPSED='color: red; background: url("data:image/png;base64,iVBORw0KG\u2026NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC");'; -const DATA_URL_ATTRIBUTE = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC"; -const DATA_URL_ATTRIBUTE_COLLAPSED = "data:image/png;base64,iVBORw0K\u20269/AFGGFyjOXZtQAAAAAElFTkSuQmCC"; +const LONG_ATTRIBUTE = + "ABCDEFGHIJKLMNOPQRSTUVWXYZ-ABCDEFGHIJKLMNOPQRSTUVWXYZ-ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ-ABCDEFGHIJKLMNOPQRSTUVWXYZ-ABCDEFGHIJKLMNOPQRSTUVWXYZ"; +const LONG_ATTRIBUTE_COLLAPSED = + "ABCDEFGHIJKLMNOPQRSTUVWXYZ-ABCDEFGHIJKLMNOPQRSTUVWXYZ-ABCDEF\u2026UVWXYZ-ABCDEFGHIJKLMNOPQRSTUVWXYZ-ABCDEFGHIJKLMNOPQRSTUVWXYZ"; +const DATA_URL_INLINE_STYLE = + 'color: red; background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC");'; +const DATA_URL_INLINE_STYLE_COLLAPSED = + 'color: red; background: url("data:image/png;base64,iVBORw0KG\u2026NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC");'; +const DATA_URL_ATTRIBUTE = + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC"; +const DATA_URL_ATTRIBUTE_COLLAPSED = + "data:image/png;base64,iVBORw0K\u20269/AFGGFyjOXZtQAAAAAElFTkSuQmCC"; /* eslint-enable */ var TEST_URL = "data:text/html,
markup-view attributes addition test
"; @@ -141,6 +147,6 @@ var TEST_DATA = [ ]; add_task(async function() { - const { inspector, testActor } = await openInspectorForURL(TEST_URL); - await runAddAttributesTests(TEST_DATA, "div", inspector, testActor); + const { inspector } = await openInspectorForURL(TEST_URL); + await runAddAttributesTests(TEST_DATA, "div", inspector); }); diff --git a/devtools/client/inspector/markup/test/browser_markup_tag_edit_08.js b/devtools/client/inspector/markup/test/browser_markup_tag_edit_08.js index 8fcf35e969fa..001282e89557 100644 --- a/devtools/client/inspector/markup/test/browser_markup_tag_edit_08.js +++ b/devtools/client/inspector/markup/test/browser_markup_tag_edit_08.js @@ -15,15 +15,15 @@ const LONG_ATTRIBUTE_COLLAPSED = /* eslint-enable */ add_task(async function() { - const { inspector, testActor } = await openInspectorForURL(TEST_URL); + const { inspector } = await openInspectorForURL(TEST_URL); await inspector.markup.expandAll(); - await testCollapsedLongAttribute(inspector, testActor); - await testModifyInlineStyleWithQuotes(inspector, testActor); - await testEditingAttributeWithMixedQuotes(inspector, testActor); + await testCollapsedLongAttribute(inspector); + await testModifyInlineStyleWithQuotes(inspector); + await testEditingAttributeWithMixedQuotes(inspector); }); -async function testCollapsedLongAttribute(inspector, testActor) { +async function testCollapsedLongAttribute(inspector) { info("Try to modify the collapsed long attribute, making sure it expands."); info("Adding test attributes to the node"); @@ -35,15 +35,11 @@ async function testCollapsedLongAttribute(inspector, testActor) { await setContentPageElementAttribute("#node24", "data-long", LONG_ATTRIBUTE); await onMutation; - await assertAttributes( - "#node24", - { - id: "node24", - class: "", - "data-long": LONG_ATTRIBUTE, - }, - testActor - ); + await assertAttributes("#node24", { + id: "node24", + class: "", + "data-long": LONG_ATTRIBUTE, + }); const { editor } = await focusNode("#node24", inspector); const attr = editor.attrElements.get("data-long").querySelector(".editable"); @@ -63,30 +59,22 @@ async function testCollapsedLongAttribute(inspector, testActor) { .querySelector(".attr-value").textContent; is(visibleAttrText, LONG_ATTRIBUTE_COLLAPSED); - await assertAttributes( - "#node24", - { - id: "node24", - class: "", - "data-long": LONG_ATTRIBUTE, - "data-short": "ABC", - }, - testActor - ); + await assertAttributes("#node24", { + id: "node24", + class: "", + "data-long": LONG_ATTRIBUTE, + "data-short": "ABC", + }); } -async function testModifyInlineStyleWithQuotes(inspector, testActor) { +async function testModifyInlineStyleWithQuotes(inspector) { info('Modify inline style containing "'); - await assertAttributes( - "#node26", - { - id: "node26", - style: - 'background-image: url("moz-page-thumb://thumbnail?url=http%3A%2F%2Fwww.mozilla.org%2F");', - }, - testActor - ); + await assertAttributes("#node26", { + id: "node26", + style: + 'background-image: url("moz-page-thumb://thumbnail?url=http%3A%2F%2Fwww.mozilla.org%2F");', + }); const onMutated = inspector.once("markupmutation"); const { editor } = await focusNode("#node26", inspector); @@ -111,28 +99,20 @@ async function testModifyInlineStyleWithQuotes(inspector, testActor) { await onMutated; - await assertAttributes( - "#node26", - { - id: "node26", - style: - 'background-image: url("moz-page-thumb://thumbnail?url=http%3A%2F%2Fwww.mozilla.com%2F");', - }, - testActor - ); + await assertAttributes("#node26", { + id: "node26", + style: + 'background-image: url("moz-page-thumb://thumbnail?url=http%3A%2F%2Fwww.mozilla.com%2F");', + }); } -async function testEditingAttributeWithMixedQuotes(inspector, testActor) { +async function testEditingAttributeWithMixedQuotes(inspector) { info("Modify class containing \" and '"); - await assertAttributes( - "#node27", - { - id: "node27", - class: "Double \" and single '", - }, - testActor - ); + await assertAttributes("#node27", { + id: "node27", + class: "Double \" and single '", + }); const onMutated = inspector.once("markupmutation"); const { editor } = await focusNode("#node27", inspector); @@ -153,12 +133,8 @@ async function testEditingAttributeWithMixedQuotes(inspector, testActor) { await onMutated; - await assertAttributes( - "#node27", - { - id: "node27", - class: "\" \" and ' '", - }, - testActor - ); + await assertAttributes("#node27", { + id: "node27", + class: "\" \" and ' '", + }); } diff --git a/devtools/client/inspector/markup/test/browser_markup_tag_edit_09.js b/devtools/client/inspector/markup/test/browser_markup_tag_edit_09.js index a65895661baa..c09c8f8e9241 100644 --- a/devtools/client/inspector/markup/test/browser_markup_tag_edit_09.js +++ b/devtools/client/inspector/markup/test/browser_markup_tag_edit_09.js @@ -8,16 +8,16 @@ const TEST_URL = URL_ROOT + "doc_markup_svg_attributes.html"; add_task(async function() { - const { inspector, testActor } = await openInspectorForURL(TEST_URL); + const { inspector } = await openInspectorForURL(TEST_URL); await inspector.markup.expandAll(); await selectNode("svg", inspector); - await testWellformedMixedCase(inspector, testActor); - await testMalformedMixedCase(inspector, testActor); + await testWellformedMixedCase(inspector); + await testMalformedMixedCase(inspector); }); -async function testWellformedMixedCase(inspector, testActor) { +async function testWellformedMixedCase(inspector) { info( "Modifying a mixed-case attribute, " + "expecting the attribute's case to be preserved" @@ -38,18 +38,14 @@ async function testWellformedMixedCase(inspector, testActor) { EventUtils.sendKey("return", inspector.panelWin); await onMutated; - await assertAttributes( - "svg", - { - viewBox: "0 0 1 1", - width: "200", - height: "200", - }, - testActor - ); + await assertAttributes("svg", { + viewBox: "0 0 1 1", + width: "200", + height: "200", + }); } -async function testMalformedMixedCase(inspector, testActor) { +async function testMalformedMixedCase(inspector) { info( "Modifying a malformed, mixed-case attribute, " + "expecting the attribute's case to be preserved" @@ -70,13 +66,9 @@ async function testMalformedMixedCase(inspector, testActor) { EventUtils.sendKey("return", inspector.panelWin); await onMutated; - await assertAttributes( - "svg", - { - viewBox: "<>", - width: "200", - height: "200", - }, - testActor - ); + await assertAttributes("svg", { + viewBox: "<>", + width: "200", + height: "200", + }); } diff --git a/devtools/client/inspector/markup/test/browser_markup_whitespace.js b/devtools/client/inspector/markup/test/browser_markup_whitespace.js index 2f722b3f2fc5..fe2d4f11af1b 100644 --- a/devtools/client/inspector/markup/test/browser_markup_whitespace.js +++ b/devtools/client/inspector/markup/test/browser_markup_whitespace.js @@ -8,7 +8,7 @@ const TEST_URL = URL_ROOT + "doc_markup_whitespace.html"; add_task(async function() { - const { inspector, testActor } = await openInspectorForURL(TEST_URL); + const { inspector } = await openInspectorForURL(TEST_URL); const { markup } = inspector; await markup.expandAll(); @@ -17,9 +17,16 @@ add_task(async function() { // Body has 5 element children, but there are 6 text nodes in there too, they come from // the HTML file formatting (spaces and carriage returns). - let { numNodes, numChildren } = await testActor.getNodeInfo("body"); - is(numNodes, 11, "The body node has 11 child nodes (includes text nodes)"); - is(numChildren, 5, "The body node has 5 child elements (only element nodes)"); + is( + await getElementChildNodesCount("body"), + 11, + "The body node has 11 child nodes (includes text nodes)" + ); + is( + await getContentPageElementProperty("body", "childElementCount"), + 5, + "The body node has 5 child elements (only element nodes)" + ); // In body, there are only block-level elements, so whitespace text nodes do not have // layout, so they should be skipped in the markup-view. @@ -35,14 +42,13 @@ add_task(async function() { // div#inline has 3 element children, but there are 4 text nodes in there too, like in // body, they come from spaces and carriage returns in the HTML file. info("Verify the number of child nodes and child elements in div#inline"); - ({ numNodes, numChildren } = await testActor.getNodeInfo("#inline")); is( - numNodes, + await getElementChildNodesCount("#inline"), 7, "The div#inline node has 7 child nodes (includes text nodes)" ); is( - numChildren, + await getContentPageElementProperty("#inline", "childElementCount"), 3, "The div#inline node has 3 child elements (only element nodes)" ); @@ -62,10 +68,13 @@ add_task(async function() { // div#pre has 2 element children, but there are 3 text nodes in there too, like in // div#inline, they come from spaces and carriage returns in the HTML file. info("Verify the number of child nodes and child elements in div#pre"); - ({ numNodes, numChildren } = await testActor.getNodeInfo("#pre")); - is(numNodes, 5, "The div#pre node has 5 child nodes (includes text nodes)"); is( - numChildren, + await getElementChildNodesCount("#pre"), + 5, + "The div#pre node has 5 child nodes (includes text nodes)" + ); + is( + await getContentPageElementProperty("#pre", "childElementCount"), 2, "The div#pre node has 2 child elements (only element nodes)" ); @@ -84,3 +93,12 @@ add_task(async function() { "Both the element nodes and all text nodes are shown in the markup view" ); }); + +function getElementChildNodesCount(selector) { + return SpecialPowers.spawn(gBrowser.selectedBrowser, [selector], function( + innerSelector + ) { + const node = content.document.querySelector(innerSelector); + return node.childNodes.length; + }); +} diff --git a/devtools/client/inspector/markup/test/head.js b/devtools/client/inspector/markup/test/head.js index 037262cbf2a7..6c0b159f8109 100644 --- a/devtools/client/inspector/markup/test/head.js +++ b/devtools/client/inspector/markup/test/head.js @@ -215,21 +215,19 @@ var addNewAttributes = async function(selector, text, inspector) { * @param {String} selector The selector for the node to check. * @param {Object} expected An object containing the attributes to check. * e.g. {id: "id1", class: "someclass"} - * @param {TestActorFront} testActor The current TestActorFront instance. * * Note that node.getAttribute() returns attribute values provided by the HTML * parser. The parser only provides unescaped entities so & will return &. */ -var assertAttributes = async function(selector, expected, testActor) { - const { attributes: actual } = await testActor.getNodeInfo(selector); - +var assertAttributes = async function(selector, expected) { + const actualAttributes = await getContentPageElementAttributes(selector); is( - actual.length, + actualAttributes.length, Object.keys(expected).length, "The node " + selector + " has the expected number of attributes." ); for (const attr in expected) { - const foundAttr = actual.find(({ name }) => name === attr); + const foundAttr = actualAttributes.find(({ name }) => name === attr); const foundValue = foundAttr ? foundAttr.value : undefined; ok(foundAttr, "The node " + selector + " has the attribute " + attr); is( diff --git a/devtools/client/inspector/markup/test/helper_attributes_test_runner.js b/devtools/client/inspector/markup/test/helper_attributes_test_runner.js index 97dacd21250e..5891845489a6 100644 --- a/devtools/client/inspector/markup/test/helper_attributes_test_runner.js +++ b/devtools/client/inspector/markup/test/helper_attributes_test_runner.js @@ -18,17 +18,16 @@ * when the test starts. It will be used to add and remove attributes. * @param {InspectorPanel} inspector The instance of InspectorPanel currently * opened - * @param {TestActorFront} testActor The current TestActorFront instance. * @return a promise that resolves when the tests have run */ -function runAddAttributesTests(tests, nodeOrSelector, inspector, testActor) { +function runAddAttributesTests(tests, nodeOrSelector, inspector) { info("Running " + tests.length + " add-attributes tests"); return (async function() { info("Selecting the test node"); await selectNode("div", inspector); for (const test of tests) { - await runAddAttributesTest(test, "div", inspector, testActor); + await runAddAttributesTest(test, "div", inspector); } })(); } @@ -51,10 +50,9 @@ function runAddAttributesTests(tests, nodeOrSelector, inspector, testActor) { * - {InspectorPanel} The instance of the InspectorPanel opened * @param {String} selector The node selector corresponding to the test element * @param {InspectorPanel} inspector The instance of InspectorPanel currently - * @param {TestActorFront} testActor The current TestActorFront instance. * opened */ -async function runAddAttributesTest(test, selector, inspector, testActor) { +async function runAddAttributesTest(test, selector, inspector) { if (test.setUp) { test.setUp(inspector); } @@ -63,7 +61,7 @@ async function runAddAttributesTest(test, selector, inspector, testActor) { await addNewAttributes(selector, test.text, inspector); info("Assert that the attribute(s) has/have been applied correctly"); - await assertAttributes(selector, test.expectedAttributes, testActor); + await assertAttributes(selector, test.expectedAttributes); if (test.validate) { const container = await getContainerForSelector(selector, inspector); @@ -74,7 +72,7 @@ async function runAddAttributesTest(test, selector, inspector, testActor) { await undoChange(inspector); info("Assert that the attribute(s) has/have been removed correctly"); - await assertAttributes(selector, {}, testActor); + await assertAttributes(selector, {}); if (test.tearDown) { test.tearDown(inspector); } @@ -91,17 +89,16 @@ async function runAddAttributesTest(test, selector, inspector, testActor) { * @param {Array} tests See runEditAttributesTest for the structure * @param {InspectorPanel} inspector The instance of InspectorPanel currently * opened - * @param {TestActorFront} testActor The current TestActorFront instance. * @return a promise that resolves when the tests have run */ -function runEditAttributesTests(tests, inspector, testActor) { +function runEditAttributesTests(tests, inspector) { info("Running " + tests.length + " edit-attributes tests"); return (async function() { info("Expanding all nodes in the markup-view"); await inspector.markup.expandAll(); for (const test of tests) { - await runEditAttributesTest(test, inspector, testActor); + await runEditAttributesTest(test, inspector); } })(); } @@ -121,17 +118,16 @@ function runEditAttributesTests(tests, inspector, testActor) { * - expectedAttributes {Object} a key/value pair object that will be * used to check the attributes on the test element * @param {InspectorPanel} inspector The instance of InspectorPanel currently - * @param {TestActorFront} testActor The current TestActorFront instance. * opened */ -async function runEditAttributesTest(test, inspector, testActor) { +async function runEditAttributesTest(test, inspector) { info("Starting edit-attribute test: " + test.desc); info("Selecting the test node " + test.node); await selectNode(test.node, inspector); info("Asserting that the node has the right attributes to start with"); - await assertAttributes(test.node, test.originalAttributes, testActor); + await assertAttributes(test.node, test.originalAttributes); info("Editing attribute " + test.name + " with value " + test.value); @@ -150,16 +146,16 @@ async function runEditAttributesTest(test, inspector, testActor) { await nodeMutated; info("Asserting the new attributes after edition"); - await assertAttributes(test.node, test.expectedAttributes, testActor); + await assertAttributes(test.node, test.expectedAttributes); info("Undo the change and assert that the attributes have been changed back"); await undoChange(inspector); - await assertAttributes(test.node, test.originalAttributes, testActor); + await assertAttributes(test.node, test.originalAttributes); info( "Redo the change and assert that the attributes have been changed " + "again" ); await redoChange(inspector); - await assertAttributes(test.node, test.expectedAttributes, testActor); + await assertAttributes(test.node, test.expectedAttributes); } diff --git a/devtools/client/inspector/markup/test/helper_outerhtml_test_runner.js b/devtools/client/inspector/markup/test/helper_outerhtml_test_runner.js index c9dec56ebf52..04893ab4b54e 100644 --- a/devtools/client/inspector/markup/test/helper_outerhtml_test_runner.js +++ b/devtools/client/inspector/markup/test/helper_outerhtml_test_runner.js @@ -78,7 +78,11 @@ async function runEditOuterHTMLTest(test, inspector, testActor) { selectedNodeFront, "Original node (grabbed by selector) is selected" ); - const { outerHTML } = await testActor.getNodeInfo(test.selector); + + const outerHTML = await getContentPageElementProperty( + test.selector, + "outerHTML" + ); is(outerHTML, test.newHTML, "Outer HTML has been updated"); } diff --git a/devtools/client/inspector/test/shared-head.js b/devtools/client/inspector/test/shared-head.js index e91d710bfcce..8e5435a78e98 100644 --- a/devtools/client/inspector/test/shared-head.js +++ b/devtools/client/inspector/test/shared-head.js @@ -850,6 +850,26 @@ function setContentPageElementProperty(selector, propertyName, propertyValue) { ); } +/** + * Get all the attributes for a DOM Node living in the content page. + * + * @param {String} selector The node selector + * @returns {Array} An array of {name, value} objects. + */ +async function getContentPageElementAttributes(selector) { + return SpecialPowers.spawn( + gBrowser.selectedBrowser, + [selector], + _selector => { + const node = content.document.querySelector(_selector); + return Array.from(node.attributes).map(({ name, value }) => ({ + name, + value, + })); + } + ); +} + /** * Get an attribute on a DOM Node living in the content page. * diff --git a/devtools/client/shared/test/test-actor.js b/devtools/client/shared/test/test-actor.js index 8436ba5bb3da..11b6c1fa7ee1 100644 --- a/devtools/client/shared/test/test-actor.js +++ b/devtools/client/shared/test/test-actor.js @@ -183,14 +183,6 @@ var testSpec = protocol.generateActorSpec({ value: RetVal("json"), }, }, - getNodeInfo: { - request: { - selector: Arg(0, "string"), - }, - response: { - value: RetVal("json"), - }, - }, getStyleSheetsInfoForNode: { request: { selector: Arg(0, "string"), @@ -536,43 +528,6 @@ var TestActor = protocol.ActorClassWithSpec(testSpec, { return getAdjustedQuads(this.content, node)[0].bounds; }, - /** - * Get information about a DOM element, identified by a selector. - * @param {String} selector The CSS selector to get the node (can be an array - * of selectors to get elements in an iframe). - * @return {Object} data Null if selector didn't match any node, otherwise: - * - {String} tagName. - * - {String} namespaceURI. - * - {Number} numChildren The number of children in the element. - * - {Array} attributes An array of {name, value, namespaceURI} objects. - * - {String} outerHTML. - * - {String} innerHTML. - * - {String} textContent. - */ - getNodeInfo: function(selector) { - const node = this._querySelector(selector); - let info = null; - - if (node) { - info = { - tagName: node.tagName, - namespaceURI: node.namespaceURI, - numChildren: node.children.length, - numNodes: node.childNodes.length, - attributes: [...node.attributes].map( - ({ name, value, namespaceURI }) => { - return { name, value, namespaceURI }; - } - ), - outerHTML: node.outerHTML, - innerHTML: node.innerHTML, - textContent: node.textContent, - }; - } - - return info; - }, - /** * Get information about the stylesheets which have CSS rules that apply to a given DOM * element, identified by a selector. diff --git a/devtools/client/webconsole/test/browser/browser_webconsole_highlighter_console_helper.js b/devtools/client/webconsole/test/browser/browser_webconsole_highlighter_console_helper.js index 6597e2dc97ba..f9f7d4492da7 100644 --- a/devtools/client/webconsole/test/browser/browser_webconsole_highlighter_console_helper.js +++ b/devtools/client/webconsole/test/browser/browser_webconsole_highlighter_console_helper.js @@ -44,7 +44,11 @@ add_task(async function() { ); ok(true, "correct output for $0 after setting $0.textContent"); - const { textContent } = await testActor.getNodeInfo("h1"); + const textContent = await SpecialPowers.spawn( + gBrowser.selectedBrowser, + [], + () => content.document.querySelector("h1").textContent + ); is(textContent, newH1Content, "node successfully updated"); });