Upstream version 11.40.271.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / LayoutTests / http / tests / inspector / search / source-frame-search.html
1 <html>
2 <head>
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>
7 <script>
8 function test()
9 {
10     function dumpSearchResultsForConfig(sourceFrame, searchConfig, callback)
11     {
12         var modifiers = [];
13         if (searchConfig.isRegex)
14             modifiers.push("regex");
15         if (searchConfig.caseSensitive)
16             modifiers.push("caseSensitive");
17         var modifiersString = modifiers.length ?  " (" + modifiers.join(", ") + ")" : "";
18
19         InspectorTest.addResult("Running search test for query = " + searchConfig.query + modifiersString + ":");
20         sourceFrame.performSearch(searchConfig, false, false, innerCallback);
21
22         function innerCallback()
23         {
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);
33             }
34             callback();
35         }
36     }
37
38     function replaceAndDumpChange(sourceFrame, searchConfig, replacement, replaceAll)
39     {
40         var modifiers = [];
41         if (searchConfig.isRegex)
42             modifiers.push("regex");
43         if (searchConfig.caseSensitive)
44             modifiers.push("caseSensitive");
45         if (replaceAll)
46             modifiers.push("replaceAll");
47         var modifiersString = modifiers.length ?  " (" + modifiers.join(", ") + ")" : "";
48
49         InspectorTest.addResult("Running replace test for /" + searchConfig.query + "/" + replacement + "/ " + modifiersString + ":");
50
51         editor = sourceFrame._textEditor;
52         var oldLines = [];
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();
57
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);
65         if (replaceAll)
66             searchableView._replaceAll()
67          else
68             searchableView._replace();
69
70         var newLines = [];
71         for (var i = 0; i < editor.linesCount; ++i)
72             newLines.push(editor.line(i));
73
74         for (var i = 0; i < newLines.length; ++i) {
75             if (oldLines[i] === newLines[i])
76                 continue;
77             var oldLine = oldLines[i];
78             var newLine = newLines[i];
79
80             var prefixLength = 0;
81             for (var j = 0; j < oldLine.length && j < newLine.length && newLine[j] === oldLine[j]; ++j)
82                 ++prefixLength;
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)
85                 ++postfixLength;
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);
91         }
92     }
93
94     WebInspector.SourcesPanel.show();
95     InspectorTest.showScriptSource("search.js", didShowScriptSource);
96
97     function didShowScriptSource(sourceFrame)
98     {
99         InspectorTest.runTestSuite([
100             function testSearch(next)
101             {
102                 var query = "searchTestUniqueString";
103                 var searchConfig = new WebInspector.SearchableView.SearchConfig(query, false, false);
104                 dumpSearchResultsForConfig(sourceFrame, searchConfig, next);
105             },
106
107             function testSearchCaseSensitive(next)
108             {
109                 var query = "SEARCHTestUniqueString";
110                 var searchConfig = new WebInspector.SearchableView.SearchConfig(query, true, false);
111                 dumpSearchResultsForConfig(sourceFrame, searchConfig, next);
112             },
113
114             function testSearchRegex(next)
115             {
116                 var query = "searchTestUnique.*";
117                 var searchConfig = new WebInspector.SearchableView.SearchConfig(query, false, true);
118                 dumpSearchResultsForConfig(sourceFrame, searchConfig, next);
119             },
120
121             function testSearchCaseSensitiveRegex(next)
122             {
123                 var query = "searchTestUnique.*";
124                 var searchConfig = new WebInspector.SearchableView.SearchConfig(query, true, true);
125                 dumpSearchResultsForConfig(sourceFrame, searchConfig, next);
126             },
127
128             function testSearchConsequent(next)
129             {
130                 var query = "AAAAA";
131                 var searchConfig = new WebInspector.SearchableView.SearchConfig(query, false, false);
132                 dumpSearchResultsForConfig(sourceFrame, searchConfig, next);
133             },
134
135             function testReplace(next)
136             {
137                 var searchConfig = new WebInspector.SearchableView.SearchConfig("REPLACEME1", true, false);
138                 replaceAndDumpChange(sourceFrame, searchConfig, "REPLACED", false);
139
140                 var searchConfig = new WebInspector.SearchableView.SearchConfig("REPLACEME2", true, false);
141                 replaceAndDumpChange(sourceFrame, searchConfig, "REPLACED", true);
142
143                 var searchConfig = new WebInspector.SearchableView.SearchConfig("replaceMe1", false, false);
144                 replaceAndDumpChange(sourceFrame, searchConfig, "replaced", false);
145
146                 var searchConfig = new WebInspector.SearchableView.SearchConfig("replaceMe2", false, false);
147                 replaceAndDumpChange(sourceFrame, searchConfig, "replaced", true);
148
149                 var searchConfig = new WebInspector.SearchableView.SearchConfig("(REPLACE)ME[38]", true, true);
150                 replaceAndDumpChange(sourceFrame, searchConfig, "$1D", false);
151
152                 var searchConfig = new WebInspector.SearchableView.SearchConfig("(REPLACE)ME[45]", true, true);
153                 replaceAndDumpChange(sourceFrame, searchConfig, "$1D", true);
154
155                 var searchConfig = new WebInspector.SearchableView.SearchConfig("(replac)eMe[38]", false, true);
156                 replaceAndDumpChange(sourceFrame, searchConfig, "$1d", false);
157
158                 var searchConfig = new WebInspector.SearchableView.SearchConfig("(replace)Me[45]", false, true);
159                 replaceAndDumpChange(sourceFrame, searchConfig, "$1d", true);
160
161
162                 next();
163             },
164
165         ]);
166     }
167 };
168 </script>
169 </head>
170 <body onload="runTest()">
171 <p>Tests different types of search in SourceFrame</p>
172 </body>
173 </html>