1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/browser/devtools/debugger/test/browser_dbg_search-sources-01.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,235 @@ 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 basic functionality of sources filtering (file search). 1.9 + */ 1.10 + 1.11 +const TAB_URL = EXAMPLE_URL + "doc_script-switching-01.html"; 1.12 + 1.13 +let gTab, gDebuggee, gPanel, gDebugger; 1.14 +let gSources, 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 + gSearchView = gDebugger.DebuggerView.FilteredSources; 1.27 + gSearchBox = gDebugger.DebuggerView.Filtering._searchbox; 1.28 + 1.29 + waitForSourceShown(gPanel, "-01.js") 1.30 + .then(bogusSearch) 1.31 + .then(firstSearch) 1.32 + .then(secondSearch) 1.33 + .then(thirdSearch) 1.34 + .then(fourthSearch) 1.35 + .then(fifthSearch) 1.36 + .then(sixthSearch) 1.37 + .then(seventhSearch) 1.38 + .then(() => closeDebuggerAndFinish(gPanel)) 1.39 + .then(null, aError => { 1.40 + ok(false, "Got an error: " + aError.message + "\n" + aError.stack); 1.41 + }); 1.42 + }); 1.43 +} 1.44 + 1.45 +function bogusSearch() { 1.46 + let finished = promise.all([ 1.47 + ensureSourceIs(gPanel, "-01.js"), 1.48 + ensureCaretAt(gPanel, 1), 1.49 + waitForDebuggerEvents(gPanel, gDebugger.EVENTS.FILE_SEARCH_MATCH_NOT_FOUND) 1.50 + ]); 1.51 + 1.52 + setText(gSearchBox, "BOGUS"); 1.53 + 1.54 + return finished.then(() => promise.all([ 1.55 + ensureSourceIs(gPanel, "-01.js"), 1.56 + ensureCaretAt(gPanel, 1), 1.57 + verifyContents({ itemCount: 0, hidden: true }) 1.58 + ])); 1.59 +} 1.60 + 1.61 +function firstSearch() { 1.62 + let finished = promise.all([ 1.63 + ensureSourceIs(gPanel, "-01.js"), 1.64 + ensureCaretAt(gPanel, 1), 1.65 + once(gDebugger, "popupshown"), 1.66 + waitForDebuggerEvents(gPanel, gDebugger.EVENTS.FILE_SEARCH_MATCH_FOUND), 1.67 + waitForSourceShown(gPanel, "-02.js") 1.68 + ]); 1.69 + 1.70 + setText(gSearchBox, "-02.js"); 1.71 + 1.72 + return finished.then(() => promise.all([ 1.73 + ensureSourceIs(gPanel, "-02.js"), 1.74 + ensureCaretAt(gPanel, 1), 1.75 + verifyContents({ itemCount: 1, hidden: false }) 1.76 + ])); 1.77 +} 1.78 + 1.79 +function secondSearch() { 1.80 + let finished = promise.all([ 1.81 + once(gDebugger, "popupshown"), 1.82 + waitForDebuggerEvents(gPanel, gDebugger.EVENTS.FILE_SEARCH_MATCH_FOUND), 1.83 + waitForSourceShown(gPanel, "-01.js") 1.84 + ]) 1.85 + .then(() => { 1.86 + let finished = promise.all([ 1.87 + once(gDebugger, "popupshown"), 1.88 + waitForDebuggerEvents(gPanel, gDebugger.EVENTS.FILE_SEARCH_MATCH_FOUND), 1.89 + waitForCaretUpdated(gPanel, 5) 1.90 + ]) 1.91 + .then(() => promise.all([ 1.92 + ensureSourceIs(gPanel, "-01.js"), 1.93 + ensureCaretAt(gPanel, 5), 1.94 + verifyContents({ itemCount: 1, hidden: false }) 1.95 + ])); 1.96 + 1.97 + typeText(gSearchBox, ":5"); 1.98 + return finished; 1.99 + }); 1.100 + 1.101 + setText(gSearchBox, ".*-01\.js"); 1.102 + return finished; 1.103 +} 1.104 + 1.105 +function thirdSearch() { 1.106 + let finished = promise.all([ 1.107 + once(gDebugger, "popupshown"), 1.108 + waitForDebuggerEvents(gPanel, gDebugger.EVENTS.FILE_SEARCH_MATCH_FOUND), 1.109 + waitForSourceShown(gPanel, "-02.js") 1.110 + ]) 1.111 + .then(() => { 1.112 + let finished = promise.all([ 1.113 + once(gDebugger, "popupshown"), 1.114 + waitForDebuggerEvents(gPanel, gDebugger.EVENTS.FILE_SEARCH_MATCH_FOUND), 1.115 + waitForCaretUpdated(gPanel, 6, 12) 1.116 + ]) 1.117 + .then(() => promise.all([ 1.118 + ensureSourceIs(gPanel, "-02.js"), 1.119 + ensureCaretAt(gPanel, 6, 12), 1.120 + verifyContents({ itemCount: 1, hidden: false }) 1.121 + ])); 1.122 + 1.123 + typeText(gSearchBox, "#deb"); 1.124 + return finished; 1.125 + }); 1.126 + 1.127 + setText(gSearchBox, ".*-02\.js"); 1.128 + return finished; 1.129 +} 1.130 + 1.131 +function fourthSearch() { 1.132 + let finished = promise.all([ 1.133 + once(gDebugger, "popupshown"), 1.134 + waitForDebuggerEvents(gPanel, gDebugger.EVENTS.FILE_SEARCH_MATCH_FOUND), 1.135 + waitForSourceShown(gPanel, "-01.js") 1.136 + ]) 1.137 + .then(() => { 1.138 + let finished = promise.all([ 1.139 + once(gDebugger, "popupshown"), 1.140 + waitForDebuggerEvents(gPanel, gDebugger.EVENTS.FILE_SEARCH_MATCH_FOUND), 1.141 + waitForCaretUpdated(gPanel, 2, 9), 1.142 + ]) 1.143 + .then(() => promise.all([ 1.144 + ensureSourceIs(gPanel, "-01.js"), 1.145 + ensureCaretAt(gPanel, 2, 9), 1.146 + verifyContents({ itemCount: 1, hidden: false }) 1.147 + // ...because we simply searched for ":" in the current file. 1.148 + ])); 1.149 + 1.150 + typeText(gSearchBox, "#:"); // # has precedence. 1.151 + return finished; 1.152 + }); 1.153 + 1.154 + setText(gSearchBox, ".*-01\.js"); 1.155 + return finished; 1.156 +} 1.157 + 1.158 +function fifthSearch() { 1.159 + let finished = promise.all([ 1.160 + once(gDebugger, "popupshown"), 1.161 + waitForDebuggerEvents(gPanel, gDebugger.EVENTS.FILE_SEARCH_MATCH_FOUND), 1.162 + waitForSourceShown(gPanel, "-02.js") 1.163 + ]) 1.164 + .then(() => { 1.165 + let finished = promise.all([ 1.166 + once(gDebugger, "popuphidden"), 1.167 + waitForDebuggerEvents(gPanel, gDebugger.EVENTS.FILE_SEARCH_MATCH_NOT_FOUND), 1.168 + waitForCaretUpdated(gPanel, 1, 3) 1.169 + ]) 1.170 + .then(() => promise.all([ 1.171 + ensureSourceIs(gPanel, "-02.js"), 1.172 + ensureCaretAt(gPanel, 1, 3), 1.173 + verifyContents({ itemCount: 0, hidden: true }) 1.174 + // ...because the searched label includes ":5", so nothing is found. 1.175 + ])); 1.176 + 1.177 + typeText(gSearchBox, ":5#*"); // # has precedence. 1.178 + return finished; 1.179 + }); 1.180 + 1.181 + setText(gSearchBox, ".*-02\.js"); 1.182 + return finished; 1.183 +} 1.184 + 1.185 +function sixthSearch() { 1.186 + let finished = promise.all([ 1.187 + ensureSourceIs(gPanel, "-02.js"), 1.188 + ensureCaretAt(gPanel, 1, 3), 1.189 + once(gDebugger, "popupshown"), 1.190 + waitForDebuggerEvents(gPanel, gDebugger.EVENTS.FILE_SEARCH_MATCH_FOUND), 1.191 + waitForCaretUpdated(gPanel, 5) 1.192 + ]); 1.193 + 1.194 + backspaceText(gSearchBox, 2); 1.195 + 1.196 + return finished.then(() => promise.all([ 1.197 + ensureSourceIs(gPanel, "-02.js"), 1.198 + ensureCaretAt(gPanel, 5), 1.199 + verifyContents({ itemCount: 1, hidden: false }) 1.200 + ])); 1.201 +} 1.202 + 1.203 +function seventhSearch() { 1.204 + let finished = promise.all([ 1.205 + ensureSourceIs(gPanel, "-02.js"), 1.206 + ensureCaretAt(gPanel, 5), 1.207 + once(gDebugger, "popupshown"), 1.208 + waitForDebuggerEvents(gPanel, gDebugger.EVENTS.FILE_SEARCH_MATCH_FOUND), 1.209 + waitForSourceShown(gPanel, "-01.js"), 1.210 + ]); 1.211 + 1.212 + backspaceText(gSearchBox, 6); 1.213 + 1.214 + return finished.then(() => promise.all([ 1.215 + ensureSourceIs(gPanel, "-01.js"), 1.216 + ensureCaretAt(gPanel, 1), 1.217 + verifyContents({ itemCount: 2, hidden: false }) 1.218 + ])); 1.219 +} 1.220 + 1.221 +function verifyContents(aArgs) { 1.222 + is(gSources.visibleItems.length, 2, 1.223 + "The unmatched sources in the widget should not be hidden."); 1.224 + is(gSearchView.itemCount, aArgs.itemCount, 1.225 + "No sources should be displayed in the sources container after a bogus search."); 1.226 + is(gSearchView.hidden, aArgs.hidden, 1.227 + "No sources should be displayed in the sources container after a bogus search."); 1.228 +} 1.229 + 1.230 +registerCleanupFunction(function() { 1.231 + gTab = null; 1.232 + gDebuggee = null; 1.233 + gPanel = null; 1.234 + gDebugger = null; 1.235 + gSources = null; 1.236 + gSearchView = null; 1.237 + gSearchBox = null; 1.238 +});