blob: 8bc864c4831e541f5f1cbe6eef404f43184b5b3f [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
(async function() {
TestRunner.addResult(`Tests how utilities functions highlight text and then revert/re-apply highlighting changes.\n`);
function dumpTextNodesAsString(node) {
var result = '';
function dumpTextNode(node) {
var str = node.textContent;
if (node.parentElement.className)
result += '[' + str + ']';
else
result += str;
};
function dumpElement(element) {
for (var i = 0; i < element.childNodes.length; i++)
dumpNode(element.childNodes[i]);
}
function dumpNode(node) {
if (node.nodeType === Node.TEXT_NODE)
dumpTextNode(node);
else if (node.nodeType === Node.ELEMENT_NODE)
dumpElement(node);
};
dumpNode(node);
return result;
}
function performTestForElement(element, ranges) {
var changes = [];
TestRunner.addResult('--------- Running test: ----------');
UI.highlightRangesWithStyleClass(element, ranges, 'highlighted', changes);
TestRunner.addResult('After highlight: ' + dumpTextNodesAsString(element));
UI.revertDomChanges(changes);
TestRunner.addResult('After revert: ' + dumpTextNodesAsString(element));
UI.applyDomChanges(changes);
TestRunner.addResult('After apply: ' + dumpTextNodesAsString(element));
}
function textElement(strings) {
var element = document.createElement('div');
for (var i = 0; i < strings.length; i++) {
var span = document.createElement('span');
span.textContent = strings[i];
element.appendChild(span);
}
return element;
}
function range(offset, length) {
return new TextUtils.SourceRange(offset, length);
}
performTestForElement(textElement(['function']), [range(0, 8)]); // Highlight whole text node.
performTestForElement(textElement(['function']), [range(0, 7)]); // Highlight only text node beginning.
performTestForElement(textElement(['function']), [range(1, 7)]); // Highlight only text node ending.
performTestForElement(textElement(['function']), [range(1, 6)]); // Highlight in the middle of text node.
performTestForElement(
textElement(['function', ' ', 'functionName']), [range(0, 21)]); // Highlight all text in 3 text nodes.
performTestForElement(
textElement(['function', ' ', 'functionName']),
[range(0, 20)]); // Highlight all text in 3 text nodes except for the last character.
performTestForElement(
textElement(['function', ' ', 'functionName']),
[range(1, 20)]); // Highlight all text in 3 text nodes except for the first character.
performTestForElement(
textElement(['function', ' ', 'functionName']),
[range(1, 19)]); // Highlight all text in 3 text nodes except for the first and the last characters.
performTestForElement(
textElement(['function', ' ', 'functionName']), [range(7, 3)]); // Highlight like that "functio[n f]unctionName"
performTestForElement(
textElement(['function', ' ', 'functionName']),
[range(0, 1), range(8, 1), range(9, 1)]); // Highlight first characters in text nodes.
performTestForElement(
textElement(['function', ' ', 'functionName']),
[range(7, 1), range(8, 1), range(20, 1)]); // Highlight last characters in text node.
performTestForElement(
textElement(['function', ' ', 'functionName']),
[range(0, 1), range(7, 3), range(20, 1)]); // Highlight like that: "[f]unctio[n f]unctionNam[e]"
TestRunner.completeTest();
})();