diff options
Diffstat (limited to 'devtools/client/performance/test/browser_perf-calltree-js-events.js')
-rw-r--r-- | devtools/client/performance/test/browser_perf-calltree-js-events.js | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/devtools/client/performance/test/browser_perf-calltree-js-events.js b/devtools/client/performance/test/browser_perf-calltree-js-events.js new file mode 100644 index 0000000000..b9651bba49 --- /dev/null +++ b/devtools/client/performance/test/browser_perf-calltree-js-events.js @@ -0,0 +1,79 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ +"use strict"; + +/** + * Tests that the call tree up/down events work for js calltrees. + */ + +const { SIMPLE_URL } = require("devtools/client/performance/test/helpers/urls"); +const { + initPerformanceInNewTab, + teardownToolboxAndRemoveTab, +} = require("devtools/client/performance/test/helpers/panel-utils"); +const { + startRecording, + stopRecording, +} = require("devtools/client/performance/test/helpers/actions"); +const { + synthesizeProfile, +} = require("devtools/client/performance/test/helpers/synth-utils"); +const { + once, +} = require("devtools/client/performance/test/helpers/event-utils"); +const { + ThreadNode, +} = require("devtools/client/performance/modules/logic/tree-model"); + +add_task(async function() { + const { panel } = await initPerformanceInNewTab({ + url: SIMPLE_URL, + win: window, + }); + + const { + EVENTS, + $, + DetailsView, + OverviewView, + JsCallTreeView, + } = panel.panelWin; + + await startRecording(panel); + await stopRecording(panel); + + const rendered = once(JsCallTreeView, EVENTS.UI_JS_CALL_TREE_RENDERED); + await DetailsView.selectView("js-calltree"); + await rendered; + + // Mock the profile used so we can get a deterministic tree created. + const profile = synthesizeProfile(); + const threadNode = new ThreadNode( + profile.threads[0], + OverviewView.getTimeInterval() + ); + JsCallTreeView._populateCallTree(threadNode); + JsCallTreeView.emit(EVENTS.UI_JS_CALL_TREE_RENDERED); + + const firstTreeItem = $("#js-calltree-view .call-tree-item"); + + // DE-XUL: There are focus issues with XUL. Focus first, then synthesize the clicks + // so that keyboard events work correctly. + firstTreeItem.focus(); + + let count = 0; + const onFocus = () => count++; + JsCallTreeView.on("focus", onFocus); + + await click(firstTreeItem); + + key("VK_DOWN"); + key("VK_DOWN"); + key("VK_DOWN"); + key("VK_DOWN"); + + JsCallTreeView.off("focus", onFocus); + is(count, 4, "Several focus events are fired for the calltree."); + + await teardownToolboxAndRemoveTab(panel); +}); |