1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/browser/devtools/debugger/test/browser_dbg_search-sources-02.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,278 @@ 1.4 +/* Any copyright is dedicated to the Public Domain. 1.5 + http://creativecommons.org/publicdomain/zero/1.0/ */ 1.6 + 1.7 +/** 1.8 + * Tests more complex functionality of sources filtering (file search). 1.9 + */ 1.10 + 1.11 +const TAB_URL = EXAMPLE_URL + "doc_editor-mode.html"; 1.12 + 1.13 +let gTab, gDebuggee, gPanel, gDebugger; 1.14 +let gSources, gSourceUtils, gSearchView, gSearchBox; 1.15 + 1.16 +function test() { 1.17 + // Debug test slaves are a bit slow at this test. 1.18 + requestLongerTimeout(3); 1.19 + 1.20 + initDebugger(TAB_URL).then(([aTab, aDebuggee, aPanel]) => { 1.21 + gTab = aTab; 1.22 + gDebuggee = aDebuggee; 1.23 + gPanel = aPanel; 1.24 + gDebugger = gPanel.panelWin; 1.25 + gSources = gDebugger.DebuggerView.Sources; 1.26 + gSourceUtils = gDebugger.SourceUtils; 1.27 + gSearchView = gDebugger.DebuggerView.FilteredSources; 1.28 + gSearchBox = gDebugger.DebuggerView.Filtering._searchbox; 1.29 + 1.30 + waitForSourceShown(gPanel, "-01.js") 1.31 + .then(firstSearch) 1.32 + .then(secondSearch) 1.33 + .then(thirdSearch) 1.34 + .then(fourthSearch) 1.35 + .then(fifthSearch) 1.36 + .then(goDown) 1.37 + .then(goDownAndWrap) 1.38 + .then(goUpAndWrap) 1.39 + .then(goUp) 1.40 + .then(returnAndSwitch) 1.41 + .then(firstSearch) 1.42 + .then(clickAndSwitch) 1.43 + .then(() => closeDebuggerAndFinish(gPanel)) 1.44 + .then(null, aError => { 1.45 + ok(false, "Got an error: " + aError.message + "\n" + aError.stack); 1.46 + }); 1.47 + }); 1.48 +} 1.49 + 1.50 +function firstSearch() { 1.51 + let finished = promise.all([ 1.52 + ensureSourceIs(gPanel, "-01.js"), 1.53 + ensureCaretAt(gPanel, 1), 1.54 + once(gDebugger, "popupshown"), 1.55 + waitForDebuggerEvents(gPanel, gDebugger.EVENTS.FILE_SEARCH_MATCH_FOUND) 1.56 + ]); 1.57 + 1.58 + setText(gSearchBox, "."); 1.59 + 1.60 + return finished.then(() => promise.all([ 1.61 + ensureSourceIs(gPanel, "-01.js"), 1.62 + ensureCaretAt(gPanel, 1), 1.63 + verifyContents([ 1.64 + "code_script-switching-01.js?a=b", 1.65 + "code_test-editor-mode?c=d", 1.66 + "doc_editor-mode.html" 1.67 + ]) 1.68 + ])); 1.69 +} 1.70 + 1.71 +function secondSearch() { 1.72 + let finished = promise.all([ 1.73 + ensureSourceIs(gPanel, "-01.js"), 1.74 + ensureCaretAt(gPanel, 1), 1.75 + once(gDebugger, "popupshown"), 1.76 + waitForDebuggerEvents(gPanel, gDebugger.EVENTS.FILE_SEARCH_MATCH_FOUND) 1.77 + ]); 1.78 + 1.79 + typeText(gSearchBox, "-0"); 1.80 + 1.81 + return finished.then(() => promise.all([ 1.82 + ensureSourceIs(gPanel, "-01.js"), 1.83 + ensureCaretAt(gPanel, 1), 1.84 + verifyContents(["code_script-switching-01.js?a=b"]) 1.85 + ])); 1.86 +} 1.87 + 1.88 +function thirdSearch() { 1.89 + let finished = promise.all([ 1.90 + ensureSourceIs(gPanel, "-01.js"), 1.91 + ensureCaretAt(gPanel, 1), 1.92 + once(gDebugger, "popupshown"), 1.93 + waitForDebuggerEvents(gPanel, gDebugger.EVENTS.FILE_SEARCH_MATCH_FOUND) 1.94 + ]); 1.95 + 1.96 + backspaceText(gSearchBox, 1); 1.97 + 1.98 + return finished.then(() => promise.all([ 1.99 + ensureSourceIs(gPanel, "-01.js"), 1.100 + ensureCaretAt(gPanel, 1), 1.101 + verifyContents([ 1.102 + "code_script-switching-01.js?a=b", 1.103 + "code_test-editor-mode?c=d", 1.104 + "doc_editor-mode.html" 1.105 + ]) 1.106 + ])); 1.107 +} 1.108 + 1.109 +function fourthSearch() { 1.110 + let finished = promise.all([ 1.111 + ensureSourceIs(gPanel, "-01.js"), 1.112 + ensureCaretAt(gPanel, 1), 1.113 + once(gDebugger, "popupshown"), 1.114 + waitForDebuggerEvents(gPanel, gDebugger.EVENTS.FILE_SEARCH_MATCH_FOUND), 1.115 + waitForSourceShown(gPanel, "test-editor-mode") 1.116 + ]); 1.117 + 1.118 + setText(gSearchBox, "code_test"); 1.119 + 1.120 + return finished.then(() => promise.all([ 1.121 + ensureSourceIs(gPanel, "test-editor-mode"), 1.122 + ensureCaretAt(gPanel, 1), 1.123 + verifyContents(["code_test-editor-mode?c=d"]) 1.124 + ])); 1.125 +} 1.126 + 1.127 +function fifthSearch() { 1.128 + let finished = promise.all([ 1.129 + ensureSourceIs(gPanel, "test-editor-mode"), 1.130 + ensureCaretAt(gPanel, 1), 1.131 + once(gDebugger, "popupshown"), 1.132 + waitForDebuggerEvents(gPanel, gDebugger.EVENTS.FILE_SEARCH_MATCH_FOUND), 1.133 + waitForSourceShown(gPanel, "-01.js") 1.134 + ]); 1.135 + 1.136 + backspaceText(gSearchBox, 4); 1.137 + 1.138 + return finished.then(() => promise.all([ 1.139 + ensureSourceIs(gPanel, "-01.js"), 1.140 + ensureCaretAt(gPanel, 1), 1.141 + verifyContents([ 1.142 + "code_script-switching-01.js?a=b", 1.143 + "code_test-editor-mode?c=d" 1.144 + ]) 1.145 + ])); 1.146 +} 1.147 + 1.148 +function goDown() { 1.149 + let finished = promise.all([ 1.150 + ensureSourceIs(gPanel, "-01.js"), 1.151 + ensureCaretAt(gPanel, 1), 1.152 + waitForSourceShown(gPanel, "test-editor-mode"), 1.153 + ]); 1.154 + 1.155 + EventUtils.sendKey("DOWN", gDebugger); 1.156 + 1.157 + return finished.then(() => promise.all([ 1.158 + ensureSourceIs(gPanel,"test-editor-mode"), 1.159 + ensureCaretAt(gPanel, 1), 1.160 + verifyContents([ 1.161 + "code_script-switching-01.js?a=b", 1.162 + "code_test-editor-mode?c=d" 1.163 + ]) 1.164 + ])); 1.165 +} 1.166 + 1.167 +function goDownAndWrap() { 1.168 + let finished = promise.all([ 1.169 + ensureSourceIs(gPanel, "test-editor-mode"), 1.170 + ensureCaretAt(gPanel, 1), 1.171 + waitForSourceShown(gPanel, "-01.js") 1.172 + ]); 1.173 + 1.174 + EventUtils.synthesizeKey("g", { metaKey: true }, gDebugger); 1.175 + 1.176 + return finished.then(() => promise.all([ 1.177 + ensureSourceIs(gPanel,"-01.js"), 1.178 + ensureCaretAt(gPanel, 1), 1.179 + verifyContents([ 1.180 + "code_script-switching-01.js?a=b", 1.181 + "code_test-editor-mode?c=d" 1.182 + ]) 1.183 + ])); 1.184 +} 1.185 + 1.186 +function goUpAndWrap() { 1.187 + let finished = promise.all([ 1.188 + ensureSourceIs(gPanel,"-01.js"), 1.189 + ensureCaretAt(gPanel, 1), 1.190 + waitForSourceShown(gPanel, "test-editor-mode") 1.191 + ]); 1.192 + 1.193 + EventUtils.synthesizeKey("G", { metaKey: true }, gDebugger); 1.194 + 1.195 + return finished.then(() => promise.all([ 1.196 + ensureSourceIs(gPanel,"test-editor-mode"), 1.197 + ensureCaretAt(gPanel, 1), 1.198 + verifyContents([ 1.199 + "code_script-switching-01.js?a=b", 1.200 + "code_test-editor-mode?c=d" 1.201 + ]) 1.202 + ])); 1.203 +} 1.204 + 1.205 +function goUp() { 1.206 + let finished = promise.all([ 1.207 + ensureSourceIs(gPanel,"test-editor-mode"), 1.208 + ensureCaretAt(gPanel, 1), 1.209 + waitForSourceShown(gPanel, "-01.js"), 1.210 + ]); 1.211 + 1.212 + EventUtils.sendKey("UP", gDebugger); 1.213 + 1.214 + return finished.then(() => promise.all([ 1.215 + ensureSourceIs(gPanel,"-01.js"), 1.216 + ensureCaretAt(gPanel, 1), 1.217 + verifyContents([ 1.218 + "code_script-switching-01.js?a=b", 1.219 + "code_test-editor-mode?c=d" 1.220 + ]) 1.221 + ])); 1.222 +} 1.223 + 1.224 +function returnAndSwitch() { 1.225 + let finished = promise.all([ 1.226 + ensureSourceIs(gPanel,"-01.js"), 1.227 + ensureCaretAt(gPanel, 1), 1.228 + once(gDebugger, "popuphidden") 1.229 + ]); 1.230 + 1.231 + EventUtils.sendKey("RETURN", gDebugger); 1.232 + 1.233 + return finished.then(() => promise.all([ 1.234 + ensureSourceIs(gPanel,"-01.js"), 1.235 + ensureCaretAt(gPanel, 1) 1.236 + ])); 1.237 +} 1.238 + 1.239 +function clickAndSwitch() { 1.240 + let finished = promise.all([ 1.241 + ensureSourceIs(gPanel,"-01.js"), 1.242 + ensureCaretAt(gPanel, 1), 1.243 + once(gDebugger, "popuphidden"), 1.244 + waitForSourceShown(gPanel, "test-editor-mode") 1.245 + ]); 1.246 + 1.247 + EventUtils.sendMouseEvent({ type: "click" }, gSearchView.items[1].target, gDebugger); 1.248 + 1.249 + return finished.then(() => promise.all([ 1.250 + ensureSourceIs(gPanel,"test-editor-mode"), 1.251 + ensureCaretAt(gPanel, 1) 1.252 + ])); 1.253 +} 1.254 + 1.255 +function verifyContents(aMatches) { 1.256 + is(gSources.visibleItems.length, 3, 1.257 + "The unmatched sources in the widget should not be hidden."); 1.258 + is(gSearchView.itemCount, aMatches.length, 1.259 + "The filtered sources view should have the right items available."); 1.260 + 1.261 + for (let i = 0; i < gSearchView.itemCount; i++) { 1.262 + let trimmedLabel = gSourceUtils.trimUrlLength(gSourceUtils.trimUrlQuery(aMatches[i])); 1.263 + let trimmedLocation = gSourceUtils.trimUrlLength(EXAMPLE_URL + aMatches[i], 0, "start"); 1.264 + 1.265 + ok(gSearchView.widget._parent.querySelector(".results-panel-item-label[value=\"" + trimmedLabel + "\"]"), 1.266 + "The filtered sources view should have the correct source labels."); 1.267 + ok(gSearchView.widget._parent.querySelector(".results-panel-item-label-below[value=\"" + trimmedLocation + "\"]"), 1.268 + "The filtered sources view should have the correct source locations."); 1.269 + } 1.270 +} 1.271 + 1.272 +registerCleanupFunction(function() { 1.273 + gTab = null; 1.274 + gDebuggee = null; 1.275 + gPanel = null; 1.276 + gDebugger = null; 1.277 + gSources = null; 1.278 + gSourceUtils = null; 1.279 + gSearchView = null; 1.280 + gSearchBox = null; 1.281 +});