diff -r 000000000000 -r 6474c204b198 browser/devtools/webconsole/test/browser_console_native_getters.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browser/devtools/webconsole/test/browser_console_native_getters.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,121 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ + +// Check that native getters and setters for DOM elements work as expected in +// variables view - bug 870220. + +const TEST_URI = "data:text/html;charset=utf8,bug870220\n" + + "

hello world\n

native getters!"; + +let gWebConsole, gJSTerm, gVariablesView; + +function test() +{ + addTab(TEST_URI); + browser.addEventListener("load", function onLoad() { + browser.removeEventListener("load", onLoad, true); + openConsole(null, consoleOpened); + }, true); +} + +function consoleOpened(hud) +{ + gWebConsole = hud; + gJSTerm = hud.jsterm; + + gJSTerm.execute("document"); + + waitForMessages({ + webconsole: hud, + messages: [{ + text: "HTMLDocument \u2192 data:text/html;charset=utf8", + category: CATEGORY_OUTPUT, + objects: true, + }], + }).then(onEvalResult); +} + +function onEvalResult(aResults) +{ + let clickable = aResults[0].clickableElements[0]; + ok(clickable, "clickable object found"); + + gJSTerm.once("variablesview-fetched", onDocumentFetch); + EventUtils.synthesizeMouse(clickable, 2, 2, {}, gWebConsole.iframeWindow) +} + +function onDocumentFetch(aEvent, aVar) +{ + gVariablesView = aVar._variablesView; + ok(gVariablesView, "variables view object"); + + findVariableViewProperties(aVar, [ + { name: "title", value: "bug870220" }, + { name: "bgColor" }, + ], { webconsole: gWebConsole }).then(onDocumentPropsFound); +} + +function onDocumentPropsFound(aResults) +{ + let prop = aResults[1].matchedProp; + ok(prop, "matched the |bgColor| property in the variables view"); + + // Check that property value updates work. + updateVariablesViewProperty({ + property: prop, + field: "value", + string: "'red'", + webconsole: gWebConsole, + callback: onFetchAfterBackgroundUpdate, + }); +} + +function onFetchAfterBackgroundUpdate(aEvent, aVar) +{ + info("onFetchAfterBackgroundUpdate"); + + is(content.document.bgColor, "red", "document background color changed"); + + findVariableViewProperties(aVar, [ + { name: "bgColor", value: "red" }, + ], { webconsole: gWebConsole }).then(testParagraphs); +} + +function testParagraphs() +{ + gJSTerm.execute("$$('p')"); + + waitForMessages({ + webconsole: gWebConsole, + messages: [{ + text: "NodeList [", + category: CATEGORY_OUTPUT, + objects: true, + }], + }).then(onEvalNodeList); +} + +function onEvalNodeList(aResults) +{ + let clickable = aResults[0].clickableElements[0]; + ok(clickable, "clickable object found"); + + gJSTerm.once("variablesview-fetched", onNodeListFetch); + EventUtils.synthesizeMouse(clickable, 2, 2, {}, gWebConsole.iframeWindow) +} + +function onNodeListFetch(aEvent, aVar) +{ + gVariablesView = aVar._variablesView; + ok(gVariablesView, "variables view object"); + + findVariableViewProperties(aVar, [ + { name: "0.textContent", value: /hello world/ }, + { name: "1.textContent", value: /native getters/ }, + ], { webconsole: gWebConsole }).then(() => { + gWebConsole = gJSTerm = gVariablesView = null; + finishTest(); + }); +}