diff options
Diffstat (limited to 'devtools/client/webconsole/test/browser/browser_jsterm_autocomplete_mapped_variables.js')
-rw-r--r-- | devtools/client/webconsole/test/browser/browser_jsterm_autocomplete_mapped_variables.js | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/devtools/client/webconsole/test/browser/browser_jsterm_autocomplete_mapped_variables.js b/devtools/client/webconsole/test/browser/browser_jsterm_autocomplete_mapped_variables.js new file mode 100644 index 0000000000..5309cb4c6c --- /dev/null +++ b/devtools/client/webconsole/test/browser/browser_jsterm_autocomplete_mapped_variables.js @@ -0,0 +1,129 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test that makes sure source mapped variables appear in autocompletion +// on an equal footing with variables from the generated source. + +"use strict"; + +const TEST_URI = + "http://example.com/browser/devtools/client/webconsole/" + + "test/browser/test-autocomplete-mapped.html"; + +add_task(async function () { + const hud = await openNewTabAndConsole(TEST_URI); + const { jsterm } = hud; + const { autocompletePopup: popup } = jsterm; + const toolbox = await gDevTools.getToolboxForTab(gBrowser.selectedTab); + + info("Opening Debugger and enabling map scopes"); + await openDebugger(); + const dbg = createDebuggerContext(toolbox); + dbg.actions.toggleMapScopes(); + + info("Waiting for pause"); + // This calls firstCall() on the content page and waits for pause. (firstCall + // has a debugger statement) + await pauseDebugger(dbg); + + await toolbox.selectTool("webconsole"); + await setInputValueForAutocompletion(hud, "valu"); + ok( + hasExactPopupLabels(popup, ["value", "valueOf", "values"]), + "Autocomplete popup displays original variable name" + ); + + await setInputValueForAutocompletion(hud, "temp"); + ok( + hasExactPopupLabels(popup, ["temp", "temp2"]), + "Autocomplete popup displays original variable name when entering a complete variable name" + ); + + await setInputValueForAutocompletion(hud, "t"); + ok( + hasPopupLabel(popup, "t"), + "Autocomplete popup displays generated variable name" + ); + + await setInputValueForAutocompletion(hud, "value.to"); + ok( + hasPopupLabel(popup, "toString"), + "Autocomplete popup displays properties of original variable" + ); + + await setInputValueForAutocompletion(hud, "imported.imp"); + ok( + hasPopupLabel(popup, "importResult"), + "Autocomplete popup displays properties of multi-part variable" + ); + + let tooltip = await setInputValueForGetterConfirmDialog( + toolbox, + hud, + "getter." + ); + let labelEl = tooltip.querySelector(".confirm-label"); + is( + labelEl.textContent, + "Invoke getter getter to retrieve the property list?", + "Dialog has expected text content" + ); + + info( + "Check that getter confirmation on a variable that maps to two getters invokes both getters" + ); + let onPopUpOpen = popup.once("popup-opened"); + EventUtils.synthesizeKey("KEY_Tab"); + await onPopUpOpen; + ok(popup.isOpen, "popup is open after Tab"); + ok(hasPopupLabel(popup, "getterResult"), "popup has expected items"); + + info( + "Check that the getter confirmation dialog shows the original variable name" + ); + tooltip = await setInputValueForGetterConfirmDialog( + toolbox, + hud, + "localWithGetter.value." + ); + labelEl = tooltip.querySelector(".confirm-label"); + is( + labelEl.textContent, + "Invoke getter localWithGetter.value to retrieve the property list?", + "Dialog has expected text content" + ); + + info( + "Check that hitting Tab does invoke the getter and return its properties" + ); + onPopUpOpen = popup.once("popup-opened"); + EventUtils.synthesizeKey("KEY_Tab"); + await onPopUpOpen; + ok(popup.isOpen, "popup is open after Tab"); + ok(hasPopupLabel(popup, "then"), "popup has expected items"); + info("got popup items: " + JSON.stringify(getAutocompletePopupLabels(popup))); + + info( + "Check that authorizing an original getter applies to the generated getter" + ); + await setInputValueForAutocompletion(hud, "o.value."); + ok(hasPopupLabel(popup, "then"), "popup has expected items"); + + await setInputValueForAutocompletion(hud, "(temp + temp2)."); + ok( + hasPopupLabel(popup, "toFixed"), + "Autocomplete popup displays properties of eagerly evaluated value" + ); + info("got popup items: " + JSON.stringify(getAutocompletePopupLabels(popup))); + + info("Disabling map scopes"); + dbg.actions.toggleMapScopes(); + await setInputValueForAutocompletion(hud, "tem"); + const autocompleteLabels = getAutocompletePopupLabels(popup); + ok( + !autocompleteLabels.includes("temp"), + "Autocomplete popup does not display mapped variables when mapping is disabled" + ); + + await resume(dbg); +}); |