michael@0: /* vim:set ts=2 sw=2 sts=2 et: */ michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: const TEST_URI = "http://example.com/browser/browser/devtools/webconsole/test/test-console.html"; michael@0: michael@0: let jsterm, testDriver; michael@0: michael@0: function test() { michael@0: addTab(TEST_URI); michael@0: browser.addEventListener("load", function onLoad() { michael@0: browser.removeEventListener("load", onLoad, true); michael@0: openConsole(null, function(hud) { michael@0: testDriver = testJSTerm(hud); michael@0: testDriver.next(); michael@0: }); michael@0: }, true); michael@0: } michael@0: michael@0: function nextTest() { michael@0: testDriver.next(); michael@0: } michael@0: michael@0: function checkResult(msg, desc) { michael@0: waitForMessages({ michael@0: webconsole: jsterm.hud.owner, michael@0: messages: [{ michael@0: name: desc, michael@0: category: CATEGORY_OUTPUT, michael@0: }], michael@0: }).then(([result]) => { michael@0: let node = [...result.matched][0].querySelector(".message-body"); michael@0: if (typeof msg == "string") { michael@0: is(node.textContent.trim(), msg, michael@0: "correct message shown for " + desc); michael@0: } michael@0: else if (typeof msg == "function") { michael@0: ok(msg(node), "correct message shown for " + desc); michael@0: } michael@0: michael@0: nextTest(); michael@0: }); michael@0: } michael@0: michael@0: function testJSTerm(hud) michael@0: { michael@0: jsterm = hud.jsterm; michael@0: const HELP_URL = "https://developer.mozilla.org/docs/Tools/Web_Console/Helpers"; michael@0: michael@0: jsterm.clearOutput(); michael@0: jsterm.execute("$('#header').getAttribute('id')"); michael@0: checkResult('"header"', "$() worked"); michael@0: yield undefined; michael@0: michael@0: jsterm.clearOutput(); michael@0: jsterm.execute("$$('h1').length"); michael@0: checkResult("1", "$$() worked"); michael@0: yield undefined; michael@0: michael@0: jsterm.clearOutput(); michael@0: jsterm.execute("$x('.//*', document.body)[0] == $$('h1')[0]"); michael@0: checkResult("true", "$x() worked"); michael@0: yield undefined; michael@0: michael@0: // no jsterm.clearOutput() here as we clear the output using the clear() fn. michael@0: jsterm.execute("clear()"); michael@0: michael@0: waitForSuccess({ michael@0: name: "clear() worked", michael@0: validatorFn: function() michael@0: { michael@0: return jsterm.outputNode.childNodes.length == 0; michael@0: }, michael@0: successFn: nextTest, michael@0: failureFn: nextTest, michael@0: }); michael@0: michael@0: yield undefined; michael@0: michael@0: jsterm.clearOutput(); michael@0: jsterm.execute("keys({b:1})[0] == 'b'"); michael@0: checkResult("true", "keys() worked", 1); michael@0: yield undefined; michael@0: michael@0: jsterm.clearOutput(); michael@0: jsterm.execute("values({b:1})[0] == 1"); michael@0: checkResult("true", "values() worked", 1); michael@0: yield undefined; michael@0: michael@0: jsterm.clearOutput(); michael@0: michael@0: let openedLinks = 0; michael@0: let onExecuteCalls = 0; michael@0: let oldOpenLink = hud.openLink; michael@0: hud.openLink = (url) => { michael@0: if (url == HELP_URL) { michael@0: openedLinks++; michael@0: } michael@0: }; michael@0: michael@0: function onExecute() { michael@0: onExecuteCalls++; michael@0: if (onExecuteCalls == 3) { michael@0: nextTest(); michael@0: } michael@0: } michael@0: michael@0: jsterm.execute("help()", onExecute); michael@0: jsterm.execute("help", onExecute); michael@0: jsterm.execute("?", onExecute); michael@0: yield undefined; michael@0: michael@0: let output = jsterm.outputNode.querySelector(".message[category='output']"); michael@0: ok(!output, "no output for help() calls"); michael@0: is(openedLinks, 3, "correct number of pages opened by the help calls"); michael@0: hud.openLink = oldOpenLink; michael@0: michael@0: jsterm.clearOutput(); michael@0: jsterm.execute("pprint({b:2, a:1})"); michael@0: checkResult("\" b: 2\n a: 1\"", "pprint()"); michael@0: yield undefined; michael@0: michael@0: // check instanceof correctness, bug 599940 michael@0: jsterm.clearOutput(); michael@0: jsterm.execute("[] instanceof Array"); michael@0: checkResult("true", "[] instanceof Array == true"); michael@0: yield undefined; michael@0: michael@0: jsterm.clearOutput(); michael@0: jsterm.execute("({}) instanceof Object"); michael@0: checkResult("true", "({}) instanceof Object == true"); michael@0: yield undefined; michael@0: michael@0: // check for occurrences of Object XRayWrapper, bug 604430 michael@0: jsterm.clearOutput(); michael@0: jsterm.execute("document"); michael@0: checkResult(function(node) { michael@0: return node.textContent.search(/\[object xraywrapper/i) == -1; michael@0: }, "document - no XrayWrapper"); michael@0: yield undefined; michael@0: michael@0: // check that pprint(window) and keys(window) don't throw, bug 608358 michael@0: jsterm.clearOutput(); michael@0: jsterm.execute("pprint(window)"); michael@0: checkResult(null, "pprint(window)"); michael@0: yield undefined; michael@0: michael@0: jsterm.clearOutput(); michael@0: jsterm.execute("keys(window)"); michael@0: checkResult(null, "keys(window)"); michael@0: yield undefined; michael@0: michael@0: // bug 614561 michael@0: jsterm.clearOutput(); michael@0: jsterm.execute("pprint('hi')"); michael@0: checkResult("\" 0: \"h\"\n 1: \"i\"\"", "pprint('hi')"); michael@0: yield undefined; michael@0: michael@0: // check that pprint(function) shows function source, bug 618344 michael@0: jsterm.clearOutput(); michael@0: jsterm.execute("pprint(print)"); michael@0: checkResult(function(node) { michael@0: return node.textContent.indexOf("aOwner.helperResult") > -1; michael@0: }, "pprint(function) shows source"); michael@0: yield undefined; michael@0: michael@0: // check that an evaluated null produces "null", bug 650780 michael@0: jsterm.clearOutput(); michael@0: jsterm.execute("null"); michael@0: checkResult("null", "null is null"); michael@0: yield undefined; michael@0: michael@0: jsterm.clearOutput(); michael@0: jsterm.execute("undefined"); michael@0: checkResult("undefined", "undefined is printed"); michael@0: yield undefined; michael@0: michael@0: jsterm = testDriver = null; michael@0: executeSoon(finishTest); michael@0: yield undefined; michael@0: }