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}});
42 WebInspector.inspectorView.showPanel("sources");
43 WebInspector.inspectorView.showViewInDrawer("search");
45 InspectorTest.createWorkspace();
46 manager = InspectorTest.createIsolatedFileSystemManager(InspectorTest.testWorkspace, InspectorTest.testFileSystemMapping);
47 manager.addMockFileSystem(fileSystemPath);
48 InspectorTest.waitForWorkspaceUISourceCodeAddedEvent(function(){}, 3);
49 manager.addFiles(fileSystemPath, files);
51 var scope = new WebInspector.SourcesSearchScope();
52 WebInspector.workspace = InspectorTest.testWorkspace;
54 function runSearchAndDumpResults(searchConfig, callback)
56 var searchResults = [];
57 var progress = new WebInspector.Progress();
58 scope.performSearch(searchConfig, progress, searchResultCallback, searchFinishedCallback);
60 function searchResultCallback(searchResult)
62 searchResults.push(searchResult);
65 function searchFinishedCallback()
67 function filterOutEmptySearchResults(searchResult)
69 return searchResult.searchMatches.length;
71 searchResults = searchResults.filter(filterOutEmptySearchResults);
73 function comparator(searchResultA, searchResultB)
75 return searchResultA.uiSourceCode.uri().compareTo(searchResultB.uiSourceCode.uri());
77 searchResults.sort(comparator);
79 for (var i = 0; i < searchResults.length; ++i) {
80 var searchResult = searchResults[i];
81 var uiSourceCode = searchResult.uiSourceCode;
82 var searchMatches = searchResult.searchMatches;
84 if (!searchMatches.length)
86 InspectorTest.addResult("Search result #" + (i + 1) + ": uiSourceCode.uri = " + uiSourceCode.uri());
87 for (var j = 0; j < searchMatches.length; ++j) {
88 var lineNumber = searchMatches[j].lineNumber;
89 var lineContent = searchMatches[j].lineContent;
90 InspectorTest.addResult(" search match #" + (j + 1) + ": lineNumber = " + lineNumber + ", lineContent = '" + lineContent + "'");
97 InspectorTest.runTestSuite([
98 function testIgnoreCase(next)
100 var query = "searchTest" + "UniqueString";
101 var searchConfig = new WebInspector.SearchConfig(query, true, false);
102 runSearchAndDumpResults(searchConfig, next);
105 function testCaseSensitive(next)
107 var query = "searchTest" + "UniqueString";
108 var searchConfig = new WebInspector.SearchConfig(query, false, false);
109 runSearchAndDumpResults(searchConfig, next);
112 function testFileHTML(next)
114 var query = "searchTest" + "UniqueString" + " file:html";
115 var searchConfig = new WebInspector.SearchConfig(query, true, false);
116 runSearchAndDumpResults(searchConfig, next);
119 function testFileJS(next)
121 var query = "file:js " + "searchTest" + "UniqueString";
122 var searchConfig = new WebInspector.SearchConfig(query, true, false);
123 runSearchAndDumpResults(searchConfig, next);
126 function testFileHTMLJS(next)
128 var query = "file:js " + "searchTest" + "UniqueString" + " file:html";
129 var searchConfig = new WebInspector.SearchConfig(query, true, false);
130 runSearchAndDumpResults(searchConfig, next);
133 function testSpaceQueries(next)
135 var query = "searchTest" + "Unique" + " space" + " String";
136 var searchConfig = new WebInspector.SearchConfig(query, true, false);
137 runSearchAndDumpResults(searchConfig, next);
140 function testSpaceQueriesFileHTML(next)
142 var query = "file:html " + "searchTest" + "Unique" + " space" + " String";
143 var searchConfig = new WebInspector.SearchConfig(query, true, false);
144 runSearchAndDumpResults(searchConfig, next);
147 function testSpaceQueriesFileHTML_SEARCH(next)
149 var query = "file:html " + "searchTest" + "Unique" + " space" + " String" + " file:search";
150 var searchConfig = new WebInspector.SearchConfig(query, true, false);
151 runSearchAndDumpResults(searchConfig, next);
154 function testSpaceQueriesFileJS_SEARCH_HTML(next)
156 var query = "file:js " + "searchTest" + "Unique" + " space" + " String" + " file:search file:html";
157 var searchConfig = new WebInspector.SearchConfig(query, true, false);
158 runSearchAndDumpResults(searchConfig, next);
161 function testSeveralQueriesFileHTML(next)
163 var query = "searchTest" + "Unique" + " file:html " + " space" + " String";
164 var searchConfig = new WebInspector.SearchConfig(query, true, false);
165 runSearchAndDumpResults(searchConfig, next);
168 function testSeveralQueriesFileHTML_SEARCH(next)
170 var query = "searchTest" + "Unique" + " file:html " + " space" + " String" + " file:search";
171 var searchConfig = new WebInspector.SearchConfig(query, true, false);
172 runSearchAndDumpResults(searchConfig, next);
175 function testSeveralQueriesFileJS_SEARCH_HTML(next)
177 var query = "file:js " + "searchTest" + "Unique" + " file:html " + " space" + " String" + " file:search";
178 var searchConfig = new WebInspector.SearchConfig(query, true, false);
179 runSearchAndDumpResults(searchConfig, next);
182 function testFileSEARCH_NOT_JS_NOT_CSS(next)
184 var query = "searchTest" + "UniqueString" + " file:search -file:js -file:css";
185 var searchConfig = new WebInspector.SearchConfig(query, true, false);
186 runSearchAndDumpResults(searchConfig, next);
189 function testSeveralQueriesFileNotCSS(next)
191 var query = "searchTest" + "Unique" + " -file:css " + " space" + " String";
192 var searchConfig = new WebInspector.SearchConfig(query, true, false);
193 runSearchAndDumpResults(searchConfig, next);
196 function testFileQueryWithProjectName(next)
198 InspectorTest.addResult("Running a file query with existing project name first:");
199 var query = "searchTest" + "Unique" + " file:www";
200 var searchConfig = new WebInspector.SearchConfig(query, true, false);
201 runSearchAndDumpResults(searchConfig, step2);
205 InspectorTest.addResult("Running a file query with non-existing project name now:");
206 query = "searchTest" + "Unique" + " file:zzz";
207 searchConfig = new WebInspector.SearchConfig(query, true, false);
208 runSearchAndDumpResults(searchConfig, next);
212 function testDirtyFiles(next)
215 var uiSourceCodes = InspectorTest.testWorkspace.uiSourceCodes();
216 for (var i = 0; i < uiSourceCodes.length; ++i) {
217 if (uiSourceCodes[i].name() === "search.js") {
218 uiSourceCode = uiSourceCodes[i];
223 uiSourceCode.setWorkingCopy("FOO " + "searchTest" + "UniqueString" + " BAR");
224 var query = "searchTest" + "UniqueString";
225 var searchConfig = new WebInspector.SearchConfig(query, true, false);
226 runSearchAndDumpResults(searchConfig, next);
233 <body onload="runTest()">
234 <iframe src="resources/search.html">
235 <p>Tests that ScriptSearchScope performs search across all sources correctly.</p>
236 See <a href="https://bugs.webkit.org/show_bug.cgi?id=41350">bug 41350</a>.