3 <title>Test search in sources.</title>
4 <script src="../inspector-test.js"></script>
5 <script src="../isolated-filesystem-test.js"></script>
6 <script src="../workspace-test.js"></script>
7 <script src="../debugger-test.js"></script>
11 var fileSystemPath = "/var/www";
12 var names = ["search.html", "search.js", "search.css"];
14 for (var i = 0; i < names.length; ++i) {
16 files["/" + name] = loadResource(name);
19 function loadResource(name)
21 var urlPrefix = WebInspector.resourceTreeModel.inspectedPageURL().substr(0, WebInspector.resourceTreeModel.inspectedPageURL().lastIndexOf("/") + 1);
22 var url = urlPrefix + "resources/" + name;
23 var xhr = new XMLHttpRequest();
24 xhr.open("GET", url, false);
26 return xhr.responseText;
29 InspectorFrontendHost.searchInPath = function(requestId, path, query)
36 for (var i = 0; i < names.length; ++i)
37 paths.push("/var/www/" + names[i]);
38 manager.fileSystemWorkspaceBinding._onSearchCompleted({data: {requestId: requestId, fileSystemPath: path, files: paths}});
41 WebInspector.inspectorView.showViewInDrawer("search");
43 InspectorTest.createWorkspace();
44 manager = InspectorTest.createIsolatedFileSystemManager(InspectorTest.testWorkspace, InspectorTest.testFileSystemMapping);
45 manager.addMockFileSystem(fileSystemPath);
46 InspectorTest.waitForWorkspaceUISourceCodeAddedEvent(function(){}, 3);
47 manager.addFiles(fileSystemPath, files);
49 var scope = new WebInspector.SourcesSearchScope();
50 WebInspector.workspace = InspectorTest.testWorkspace;
52 function runSearchAndDumpResults(searchConfig, callback)
54 var searchResults = [];
55 var progress = new WebInspector.Progress();
56 scope.performSearch(searchConfig, progress, searchResultCallback, searchFinishedCallback);
58 function searchResultCallback(searchResult)
60 searchResults.push(searchResult);
63 function searchFinishedCallback()
65 function filterOutEmptySearchResults(searchResult)
67 return searchResult.searchMatches.length;
69 searchResults = searchResults.filter(filterOutEmptySearchResults);
71 function comparator(searchResultA, searchResultB)
73 return searchResultA.uiSourceCode.uri().compareTo(searchResultB.uiSourceCode.uri());
75 searchResults.sort(comparator);
77 for (var i = 0; i < searchResults.length; ++i) {
78 var searchResult = searchResults[i];
79 var uiSourceCode = searchResult.uiSourceCode;
80 var searchMatches = searchResult.searchMatches;
82 if (!searchMatches.length)
84 InspectorTest.addResult("Search result #" + (i + 1) + ": uiSourceCode.uri = " + uiSourceCode.uri());
85 for (var j = 0; j < searchMatches.length; ++j) {
86 var lineNumber = searchMatches[j].lineNumber;
87 var lineContent = searchMatches[j].lineContent;
88 InspectorTest.addResult(" search match #" + (j + 1) + ": lineNumber = " + lineNumber + ", lineContent = '" + lineContent + "'");
95 InspectorTest.runTestSuite([
96 function testIgnoreCase(next)
98 var query = "searchTest" + "UniqueString";
99 var searchConfig = new WebInspector.SearchConfig(query, true, false);
100 runSearchAndDumpResults(searchConfig, next);
103 function testCaseSensitive(next)
105 var query = "searchTest" + "UniqueString";
106 var searchConfig = new WebInspector.SearchConfig(query, false, false);
107 runSearchAndDumpResults(searchConfig, next);
110 function testFileHTML(next)
112 var query = "searchTest" + "UniqueString" + " file:html";
113 var searchConfig = new WebInspector.SearchConfig(query, true, false);
114 runSearchAndDumpResults(searchConfig, next);
117 function testFileJS(next)
119 var query = "file:js " + "searchTest" + "UniqueString";
120 var searchConfig = new WebInspector.SearchConfig(query, true, false);
121 runSearchAndDumpResults(searchConfig, next);
124 function testFileHTMLJS(next)
126 var query = "file:js " + "searchTest" + "UniqueString" + " file:html";
127 var searchConfig = new WebInspector.SearchConfig(query, true, false);
128 runSearchAndDumpResults(searchConfig, next);
131 function testSpaceQueries(next)
133 var query = "searchTest" + "Unique" + " space" + " String";
134 var searchConfig = new WebInspector.SearchConfig(query, true, false);
135 runSearchAndDumpResults(searchConfig, next);
138 function testSpaceQueriesFileHTML(next)
140 var query = "file:html " + "searchTest" + "Unique" + " space" + " String";
141 var searchConfig = new WebInspector.SearchConfig(query, true, false);
142 runSearchAndDumpResults(searchConfig, next);
145 function testSpaceQueriesFileHTML_SEARCH(next)
147 var query = "file:html " + "searchTest" + "Unique" + " space" + " String" + " file:search";
148 var searchConfig = new WebInspector.SearchConfig(query, true, false);
149 runSearchAndDumpResults(searchConfig, next);
152 function testSpaceQueriesFileJS_SEARCH_HTML(next)
154 var query = "file:js " + "searchTest" + "Unique" + " space" + " String" + " file:search file:html";
155 var searchConfig = new WebInspector.SearchConfig(query, true, false);
156 runSearchAndDumpResults(searchConfig, next);
159 function testSeveralQueriesFileHTML(next)
161 var query = "searchTest" + "Unique" + " file:html " + " space" + " String";
162 var searchConfig = new WebInspector.SearchConfig(query, true, false);
163 runSearchAndDumpResults(searchConfig, next);
166 function testSeveralQueriesFileHTML_SEARCH(next)
168 var query = "searchTest" + "Unique" + " file:html " + " space" + " String" + " file:search";
169 var searchConfig = new WebInspector.SearchConfig(query, true, false);
170 runSearchAndDumpResults(searchConfig, next);
173 function testSeveralQueriesFileJS_SEARCH_HTML(next)
175 var query = "file:js " + "searchTest" + "Unique" + " file:html " + " space" + " String" + " file:search";
176 var searchConfig = new WebInspector.SearchConfig(query, true, false);
177 runSearchAndDumpResults(searchConfig, next);
180 function testFileSEARCH_NOT_JS_NOT_CSS(next)
182 var query = "searchTest" + "UniqueString" + " file:search -file:js -file:css";
183 var searchConfig = new WebInspector.SearchConfig(query, true, false);
184 runSearchAndDumpResults(searchConfig, next);
187 function testSeveralQueriesFileNotCSS(next)
189 var query = "searchTest" + "Unique" + " -file:css " + " space" + " String";
190 var searchConfig = new WebInspector.SearchConfig(query, true, false);
191 runSearchAndDumpResults(searchConfig, next);
194 function testFileQueryWithProjectName(next)
196 InspectorTest.addResult("Running a file query with existing project name first:");
197 var query = "searchTest" + "Unique" + " file:www";
198 var searchConfig = new WebInspector.SearchConfig(query, true, false);
199 runSearchAndDumpResults(searchConfig, step2);
203 InspectorTest.addResult("Running a file query with non-existing project name now:");
204 query = "searchTest" + "Unique" + " file:zzz";
205 searchConfig = new WebInspector.SearchConfig(query, true, false);
206 runSearchAndDumpResults(searchConfig, next);
210 function testDirtyFiles(next)
213 var uiSourceCodes = InspectorTest.testWorkspace.uiSourceCodes();
214 for (var i = 0; i < uiSourceCodes.length; ++i) {
215 if (uiSourceCodes[i].name() === "search.js") {
216 uiSourceCode = uiSourceCodes[i];
221 uiSourceCode.setWorkingCopy("FOO " + "searchTest" + "UniqueString" + " BAR");
222 var query = "searchTest" + "UniqueString";
223 var searchConfig = new WebInspector.SearchConfig(query, true, false);
224 runSearchAndDumpResults(searchConfig, next);
231 <body onload="runTest()">
232 <iframe src="resources/search.html">
233 <p>Tests that ScriptSearchScope performs search across all sources correctly.</p>
234 See <a href="https://bugs.webkit.org/show_bug.cgi?id=41350">bug 41350</a>.