diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /devtools/client/inspector/markup/test/helper_attributes_test_runner.js | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'devtools/client/inspector/markup/test/helper_attributes_test_runner.js')
-rw-r--r-- | devtools/client/inspector/markup/test/helper_attributes_test_runner.js | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/devtools/client/inspector/markup/test/helper_attributes_test_runner.js b/devtools/client/inspector/markup/test/helper_attributes_test_runner.js new file mode 100644 index 000000000..20446d3d1 --- /dev/null +++ b/devtools/client/inspector/markup/test/helper_attributes_test_runner.js @@ -0,0 +1,160 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +/* eslint no-unused-vars: [2, {"vars": "local"}] */ +/* import-globals-from head.js */ +"use strict"; + +/** + * Run a series of add-attributes tests. + * This function will iterate over the provided tests array and run each test. + * Each test's goal is to provide some text to be entered into the test node's + * new-attribute field and check that the given attributes have been created. + * After each test has run, the markup-view's undo command will be called and + * the test runner will check if all the new attributes are gone. + * @param {Array} tests See runAddAttributesTest for the structure + * @param {DOMNode|String} nodeOrSelector The node or node selector + * corresponding to an element on the current test page that has *no attributes* + * 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) { + info("Running " + tests.length + " add-attributes tests"); + return Task.spawn(function* () { + info("Selecting the test node"); + yield selectNode("div", inspector); + + for (let test of tests) { + yield runAddAttributesTest(test, "div", inspector, testActor); + } + }); +} + +/** + * Run a single add-attribute test. + * See runAddAttributesTests for a description. + * @param {Object} test A test object should contain the following properties: + * - desc {String} a textual description for that test, to help when + * reading logs + * - text {String} the string to be inserted into the new attribute field + * - expectedAttributes {Object} a key/value pair object that will be + * used to check the attributes on the test element + * - validate {Function} optional extra function that will be called + * after the attributes have been added and which should be used to + * assert some more things this test runner might not be checking. The + * function will be called with the following arguments: + * - {DOMNode} The element being tested + * - {MarkupContainer} The corresponding container in the markup-view + * - {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 + */ +function* runAddAttributesTest(test, selector, inspector, testActor) { + if (test.setUp) { + test.setUp(inspector); + } + + info("Starting add-attribute test: " + test.desc); + yield addNewAttributes(selector, test.text, inspector); + + info("Assert that the attribute(s) has/have been applied correctly"); + yield assertAttributes(selector, test.expectedAttributes, testActor); + + if (test.validate) { + let container = yield getContainerForSelector(selector, inspector); + test.validate(container, inspector); + } + + info("Undo the change"); + yield undoChange(inspector); + + info("Assert that the attribute(s) has/have been removed correctly"); + yield assertAttributes(selector, {}, testActor); + if (test.tearDown) { + test.tearDown(inspector); + } +} + +/** + * Run a series of edit-attributes tests. + * This function will iterate over the provided tests array and run each test. + * Each test's goal is to locate a given element on the current test page, + * assert its current attributes, then provide the name of one of them and a + * value to be set into it, and then check if the new attributes are correct. + * After each test has run, the markup-view's undo and redo commands will be + * called and the test runner will assert again that the attributes are correct. + * @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) { + info("Running " + tests.length + " edit-attributes tests"); + return Task.spawn(function* () { + info("Expanding all nodes in the markup-view"); + yield inspector.markup.expandAll(); + + for (let test of tests) { + yield runEditAttributesTest(test, inspector, testActor); + } + }); +} + +/** + * Run a single edit-attribute test. + * See runEditAttributesTests for a description. + * @param {Object} test A test object should contain the following properties: + * - desc {String} a textual description for that test, to help when + * reading logs + * - node {String} a css selector that will be used to select the node + * which will be tested during this iteration + * - originalAttributes {Object} a key/value pair object that will be + * used to check the attributes of the node before the test runs + * - name {String} the name of the attribute to focus the editor for + * - value {String} the new value to be typed in the focused editor + * - 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 + */ +function* runEditAttributesTest(test, inspector, testActor) { + info("Starting edit-attribute test: " + test.desc); + + info("Selecting the test node " + test.node); + yield selectNode(test.node, inspector); + + info("Asserting that the node has the right attributes to start with"); + yield assertAttributes(test.node, test.originalAttributes, testActor); + + info("Editing attribute " + test.name + " with value " + test.value); + + let container = yield focusNode(test.node, inspector); + ok(container && container.editor, "The markup-container for " + test.node + + " was found"); + + info("Listening for the markupmutation event"); + let nodeMutated = inspector.once("markupmutation"); + let attr = container.editor.attrElements.get(test.name) + .querySelector(".editable"); + setEditableFieldValue(attr, test.value, inspector); + yield nodeMutated; + + info("Asserting the new attributes after edition"); + yield assertAttributes(test.node, test.expectedAttributes, testActor); + + info("Undo the change and assert that the attributes have been changed back"); + yield undoChange(inspector); + yield assertAttributes(test.node, test.originalAttributes, testActor); + + info("Redo the change and assert that the attributes have been changed " + + "again"); + yield redoChange(inspector); + yield assertAttributes(test.node, test.expectedAttributes, testActor); +} |