3 <script src="../inspector-test.js"></script>
4 <script src="../debugger-test.js"></script>
5 <script src="../sources-test.js"></script>
6 <script src="resources/search.js"></script>
10 function dumpSearchResultsForConfig(sourceFrame, searchConfig, callback)
13 if (searchConfig.isRegex)
14 modifiers.push("regex");
15 if (searchConfig.caseSensitive)
16 modifiers.push("caseSensitive");
17 var modifiersString = modifiers.length ? " (" + modifiers.join(", ") + ")" : "";
19 InspectorTest.addResult("Running search test for query = " + searchConfig.query + modifiersString + ":");
20 sourceFrame.performSearch(searchConfig, false, false, innerCallback);
22 function innerCallback()
24 var searchResults = sourceFrame._searchResults;
25 for (var i = 0; i < searchResults.length; ++i) {
26 var range = searchResults[i];
27 var prefixRange = new WebInspector.TextRange(range.startLine, 0, range.startLine, range.startColumn);
28 var postfixRange = new WebInspector.TextRange(range.endLine, range.endColumn, range.endLine, sourceFrame._textEditor.line(range.endLine).length);
29 var prefix = sourceFrame._textEditor.copyRange(prefixRange);
30 var result = sourceFrame._textEditor.copyRange(range);
31 var postfix = sourceFrame._textEditor.copyRange(postfixRange);
32 InspectorTest.addResult(" - " + prefix + "<" + result + ">" + postfix);
38 function replaceAndDumpChange(sourceFrame, searchConfig, replacement, replaceAll)
41 if (searchConfig.isRegex)
42 modifiers.push("regex");
43 if (searchConfig.caseSensitive)
44 modifiers.push("caseSensitive");
46 modifiers.push("replaceAll");
47 var modifiersString = modifiers.length ? " (" + modifiers.join(", ") + ")" : "";
49 InspectorTest.addResult("Running replace test for /" + searchConfig.query + "/" + replacement + "/ " + modifiersString + ":");
51 editor = sourceFrame._textEditor;
53 for (var i = 0; i < editor.linesCount; ++i)
54 oldLines.push(editor.line(i));
55 var searchableView = WebInspector.panels.sources.sourcesView().searchableView();
56 searchableView.showSearchField();
58 searchableView._caseSensitiveButton.toggled = searchConfig.caseSensitive;
59 searchableView._regexButton.toggled = searchConfig.isRegex;
60 searchableView._searchInputElement.value = searchConfig.query;
61 searchableView._replaceCheckboxElement.checked = true;
62 searchableView._updateSecondRowVisibility();
63 searchableView._replaceInputElement.value = replacement;
64 searchableView._performSearch(true, true);
66 searchableView._replaceAll()
68 searchableView._replace();
71 for (var i = 0; i < editor.linesCount; ++i)
72 newLines.push(editor.line(i));
74 for (var i = 0; i < newLines.length; ++i) {
75 if (oldLines[i] === newLines[i])
77 var oldLine = oldLines[i];
78 var newLine = newLines[i];
81 for (var j = 0; j < oldLine.length && j < newLine.length && newLine[j] === oldLine[j]; ++j)
83 var postfixLength = 0;
84 for (var j = 0; j < oldLine.length && j < newLine.length && newLine[newLine.length - j - 1] === oldLine[oldLine.length - j - 1]; ++j)
86 var prefix = oldLine.substring(0, prefixLength);
87 var removed = oldLine.substring(prefixLength, oldLine.length - postfixLength);
88 var added = newLine.substring(prefixLength, newLine.length - postfixLength);
89 var postfix = oldLine.substring(oldLine.length - postfixLength);
90 InspectorTest.addResult(" - " + prefix + "#" + removed + "#" + added + "#" + postfix);
94 WebInspector.SourcesPanel.show();
95 InspectorTest.showScriptSource("search.js", didShowScriptSource);
97 function didShowScriptSource(sourceFrame)
99 InspectorTest.runTestSuite([
100 function testSearch(next)
102 var query = "searchTestUniqueString";
103 var searchConfig = new WebInspector.SearchableView.SearchConfig(query, false, false);
104 dumpSearchResultsForConfig(sourceFrame, searchConfig, next);
107 function testSearchCaseSensitive(next)
109 var query = "SEARCHTestUniqueString";
110 var searchConfig = new WebInspector.SearchableView.SearchConfig(query, true, false);
111 dumpSearchResultsForConfig(sourceFrame, searchConfig, next);
114 function testSearchRegex(next)
116 var query = "searchTestUnique.*";
117 var searchConfig = new WebInspector.SearchableView.SearchConfig(query, false, true);
118 dumpSearchResultsForConfig(sourceFrame, searchConfig, next);
121 function testSearchCaseSensitiveRegex(next)
123 var query = "searchTestUnique.*";
124 var searchConfig = new WebInspector.SearchableView.SearchConfig(query, true, true);
125 dumpSearchResultsForConfig(sourceFrame, searchConfig, next);
128 function testSearchConsequent(next)
131 var searchConfig = new WebInspector.SearchableView.SearchConfig(query, false, false);
132 dumpSearchResultsForConfig(sourceFrame, searchConfig, next);
135 function testReplace(next)
137 var searchConfig = new WebInspector.SearchableView.SearchConfig("REPLACEME1", true, false);
138 replaceAndDumpChange(sourceFrame, searchConfig, "REPLACED", false);
140 var searchConfig = new WebInspector.SearchableView.SearchConfig("REPLACEME2", true, false);
141 replaceAndDumpChange(sourceFrame, searchConfig, "REPLACED", true);
143 var searchConfig = new WebInspector.SearchableView.SearchConfig("replaceMe1", false, false);
144 replaceAndDumpChange(sourceFrame, searchConfig, "replaced", false);
146 var searchConfig = new WebInspector.SearchableView.SearchConfig("replaceMe2", false, false);
147 replaceAndDumpChange(sourceFrame, searchConfig, "replaced", true);
149 var searchConfig = new WebInspector.SearchableView.SearchConfig("(REPLACE)ME[38]", true, true);
150 replaceAndDumpChange(sourceFrame, searchConfig, "$1D", false);
152 var searchConfig = new WebInspector.SearchableView.SearchConfig("(REPLACE)ME[45]", true, true);
153 replaceAndDumpChange(sourceFrame, searchConfig, "$1D", true);
155 var searchConfig = new WebInspector.SearchableView.SearchConfig("(replac)eMe[38]", false, true);
156 replaceAndDumpChange(sourceFrame, searchConfig, "$1d", false);
158 var searchConfig = new WebInspector.SearchableView.SearchConfig("(replace)Me[45]", false, true);
159 replaceAndDumpChange(sourceFrame, searchConfig, "$1d", true);
170 <body onload="runTest()">
171 <p>Tests different types of search in SourceFrame</p>