| // 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(); |
| })(); |