summaryrefslogtreecommitdiff
path: root/toolkit/devtools/markupview/test/helper_events_test_runner.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/devtools/markupview/test/helper_events_test_runner.js')
-rw-r--r--toolkit/devtools/markupview/test/helper_events_test_runner.js83
1 files changed, 83 insertions, 0 deletions
diff --git a/toolkit/devtools/markupview/test/helper_events_test_runner.js b/toolkit/devtools/markupview/test/helper_events_test_runner.js
new file mode 100644
index 000000000..c386aa1ac
--- /dev/null
+++ b/toolkit/devtools/markupview/test/helper_events_test_runner.js
@@ -0,0 +1,83 @@
+/* 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/. */
+
+/**
+ * Generator function that runs checkEventsForNode() for each object in the
+ * TEST_DATA array.
+ */
+function* runEventPopupTests() {
+ let {inspector} = yield addTab(TEST_URL).then(openInspector);
+
+ yield inspector.markup.expandAll();
+
+ for (let {selector, expected} of TEST_DATA) {
+ yield checkEventsForNode(selector, expected, inspector);
+ }
+
+ gBrowser.removeCurrentTab();
+
+ // Wait for promises to avoid leaks when running this as a single test.
+ // We need to do this because we have opened a bunch of popups and don't them
+ // to affect other test runs when they are GCd.
+ yield promiseNextTick();
+}
+
+/**
+ * Generator function that takes a selector and expected results and returns
+ * the event info.
+ *
+ * @param {String} selector
+ * Selector pointing at the node to be inspected
+ */
+function* checkEventsForNode(selector, expected, inspector) {
+ let container = yield getContainerForSelector(selector, inspector);
+ let evHolder = container.elt.querySelector(".markupview-events");
+ let tooltip = inspector.markup.tooltip;
+
+ yield selectNode(selector, inspector);
+
+ // Click button to show tooltip
+ info("Clicking evHolder");
+ EventUtils.synthesizeMouseAtCenter(evHolder, {}, inspector.markup.doc.defaultView);
+ yield tooltip.once("shown");
+ info("tooltip shown");
+
+ // Check values
+ let content = tooltip.content;
+ let headers = content.querySelectorAll(".event-header");
+ let nodeFront = container.node;
+ let cssSelector = nodeFront.nodeName + "#" + nodeFront.id;
+
+ for (let i = 0; i < headers.length; i++) {
+ info("Processing header[" + i + "] for " + cssSelector);
+
+ let header = headers[i];
+ let type = header.querySelector(".event-tooltip-event-type");
+ let filename = header.querySelector(".event-tooltip-filename");
+ let attributes = header.querySelectorAll(".event-tooltip-attributes");
+ let contentBox = header.nextElementSibling;
+
+ is(type.getAttribute("value"), expected[i].type,
+ "type matches for " + cssSelector);
+ is(filename.getAttribute("value"), expected[i].filename,
+ "filename matches for " + cssSelector);
+
+ is(attributes.length, expected[i].attributes.length,
+ "we have the correct number of attributes");
+
+ for (let j = 0; j < expected[i].attributes.length; j++) {
+ is(attributes[j].getAttribute("value"), expected[i].attributes[j],
+ "attribute[" + j + "] matches for " + cssSelector);
+ }
+
+ EventUtils.synthesizeMouseAtCenter(header, {}, type.ownerGlobal);
+ yield tooltip.once("event-tooltip-ready");
+
+ let editor = tooltip.eventEditors.get(contentBox).editor;
+ is(editor.getText(), expected[i].handler,
+ "handler matches for " + cssSelector);
+ }
+
+ tooltip.hide();
+}