blob: 5849ddf14b72549fa12b9eac04531f44eca3dd27 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* @fileoverview using private properties isn't a Closure violation in tests.
* @suppress {accessControls}
*/
SourcesTestRunner.dumpSearchResults = function(searchResults) {
function comparator(a, b) {
a.url.localeCompare(b.url);
}
searchResults.sort(comparator);
TestRunner.addResult('Search results: ');
for (let i = 0; i < searchResults.length; i++) {
TestRunner.addResult(
'url: ' + searchResults[i].url.replace(/VM\d+/, 'VMXX') + ', matchesCount: ' + searchResults[i].matchesCount);
}
TestRunner.addResult('');
};
SourcesTestRunner.dumpSearchMatches = function(searchMatches) {
TestRunner.addResult('Search matches: ');
for (let i = 0; i < searchMatches.length; i++) {
TestRunner.addResult(
'lineNumber: ' + searchMatches[i].lineNumber + ', line: \'' + searchMatches[i].lineContent + '\'');
}
TestRunner.addResult('');
};
SourcesTestRunner.runSearchAndDumpResults = function(scope, searchConfig, callback) {
const searchResults = [];
const progress = new Common.Progress();
scope.performSearch(searchConfig, progress, searchResultCallback, searchFinishedCallback);
function searchResultCallback(searchResult) {
searchResults.push(searchResult);
}
function searchFinishedCallback() {
function comparator(searchResultA, searchResultB) {
return searchResultA._uiSourceCode.url().compareTo(searchResultB._uiSourceCode.url());
}
searchResults.sort(comparator);
for (let i = 0; i < searchResults.length; ++i) {
const searchResult = searchResults[i];
const uiSourceCode = searchResult._uiSourceCode;
const searchMatches = searchResult._searchMatches;
if (!searchMatches.length) {
continue;
}
TestRunner.addResult(
'Search result #' + (i + 1) + ': uiSourceCode.url = ' + uiSourceCode.url().replace(/VM\d+/, 'VMXX'));
for (let j = 0; j < searchMatches.length; ++j) {
const lineNumber = searchMatches[j].lineNumber;
const lineContent = searchMatches[j].lineContent;
TestRunner.addResult(
' search match #' + (j + 1) + ': lineNumber = ' + lineNumber + ', lineContent = \'' + lineContent + '\'');
}
}
callback();
}
};
SourcesTestRunner.replaceAndDumpChange = function(sourceFrame, searchConfig, replacement, replaceAll) {
const modifiers = [];
if (searchConfig.isRegex) {
modifiers.push('regex');
}
if (searchConfig.caseSensitive) {
modifiers.push('caseSensitive');
}
if (replaceAll) {
modifiers.push('replaceAll');
}
const modifiersString = (modifiers.length ? ' (' + modifiers.join(', ') + ')' : '');
TestRunner.addResult(
'Running replace test for /' + searchConfig.query + '/' + replacement + '/ ' + modifiersString + ':');
editor = sourceFrame._textEditor;
const oldLines = [];
for (let i = 0; i < editor.linesCount; ++i) {
oldLines.push(editor.line(i));
}
const searchableView = UI.panels.sources.sourcesView().searchableView();
searchableView.showSearchField();
searchableView._caseSensitiveButton.setToggled(searchConfig.caseSensitive);
searchableView._regexButton.setToggled(searchConfig.isRegex);
searchableView._searchInputElement.value = searchConfig.query;
searchableView._replaceToggleButton.setToggled(true);
searchableView._updateSecondRowVisibility();
searchableView._replaceInputElement.value = replacement;
searchableView._performSearch(true, true);
if (replaceAll) {
searchableView._replaceAll();
} else {
searchableView._replace();
}
const newLines = [];
for (let i = 0; i < editor.linesCount; ++i) {
newLines.push(editor.line(i));
}
for (let i = 0; i < newLines.length; ++i) {
if (oldLines[i] === newLines[i]) {
continue;
}
const oldLine = oldLines[i];
const newLine = newLines[i];
let prefixLength = 0;
for (let j = 0; j < oldLine.length && j < newLine.length && newLine[j] === oldLine[j]; ++j) {
++prefixLength;
}
let postfixLength = 0;
for (let j = 0; j < oldLine.length && j < newLine.length &&
newLine[newLine.length - j - 1] === oldLine[oldLine.length - j - 1];
++j) {
++postfixLength;
}
const prefix = oldLine.substring(0, prefixLength);
const removed = oldLine.substring(prefixLength, oldLine.length - postfixLength);
const added = newLine.substring(prefixLength, newLine.length - postfixLength);
const postfix = oldLine.substring(oldLine.length - postfixLength);
TestRunner.addResult(' - ' + prefix + '#' + removed + '#' + added + '#' + postfix);
}
};
TestRunner.deprecatedInitAsync(`
if (window.GCController)
GCController.collect();
`);