Index: LayoutTests/inspector/editor/text-editor-ctrl-d.html |
diff --git a/LayoutTests/inspector/editor/text-editor-ctrl-d.html b/LayoutTests/inspector/editor/text-editor-ctrl-d.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8e5f8dfe0c4aa8cfe68f7dfa06030feed30eae62 |
--- /dev/null |
+++ b/LayoutTests/inspector/editor/text-editor-ctrl-d.html |
@@ -0,0 +1,213 @@ |
+<html> |
+<head> |
+<script src="../../http/tests/inspector/inspector-test.js"></script> |
+<script src="editor-test.js"></script> |
+<script> |
+function codeSnippet() { |
+ return document.getElementById("codeSnippet").textContent; |
+} |
+ |
+function test() |
+{ |
+ var textEditor = InspectorTest.createTestEditor(); |
+ textEditor.setMimeType("text/javascript"); |
+ textEditor.setReadOnly(false); |
+ textEditor.element.focus(); |
+ InspectorTest.evaluateInPage("codeSnippet();", onCodeSnippet); |
+ |
+ function onCodeSnippet(result) |
+ { |
+ var codeLines = result.value; |
+ textEditor.setText(codeLines); |
+ InspectorTest.runTestSuite(testSuite); |
+ } |
+ |
+ function nextOccurrence(times) |
+ { |
+ for (var i = 0; i < times; ++i) |
+ textEditor._selectNextOccurrenceController.selectNextOccurrence(); |
+ } |
+ |
+ function lineSelection(line, from, to) |
+ { |
+ if (typeof to !== "number") |
+ to = from; |
+ lineSelections([ |
+ { line: line, from: from, to: to } |
+ ]); |
+ } |
+ |
+ function lineSelections(selections) |
+ { |
+ var coords = []; |
+ for (var i = 0; i < selections.length; ++i) { |
+ var selection = selections[i]; |
+ if (selection.column) { |
+ selection.from = selection.column; |
+ selection.to = selection.column; |
+ } |
+ coords.push(new WebInspector.TextRange(selection.line, selection.from, selection.line, selection.to)); |
+ } |
+ textEditor.setSelections(coords); |
+ } |
+ |
+ function dumpSelectionStats() |
+ { |
+ var listHashMap = {}; |
+ var sortedKeys = []; |
+ var selections = textEditor.selections(); |
+ for (var i = 0; i < selections.length; ++i) { |
+ var selection = selections[i]; |
+ var text = textEditor.copyRange(selection); |
+ if (!listHashMap[text]) { |
+ listHashMap[text] = 1; |
+ sortedKeys.push(text); |
+ } else { |
+ ++listHashMap[text]; |
+ } |
+ } |
+ for (var i = 0; i < sortedKeys.length; ++i) { |
+ var keyName = sortedKeys[i]; |
+ if (!keyName.length) |
+ keyName = "<Empty string>"; |
+ else |
+ keyName = "'" + keyName + "'"; |
+ InspectorTest.addResult(keyName + ": " + listHashMap[sortedKeys[i]]); |
+ } |
+ } |
+ |
+ var testSuite = [ |
+ function testNextFullWord(next) |
+ { |
+ lineSelection(0, 3); |
+ nextOccurrence(3); |
+ dumpSelectionStats(); |
+ next(); |
+ }, |
+ |
+ function testOccurrencesOnTheSameLine(next) |
+ { |
+ lineSelection(2, 13); |
+ nextOccurrence(3); |
+ dumpSelectionStats(); |
+ next(); |
+ }, |
+ |
+ function testTwoCloseWords(next) |
+ { |
+ lineSelection(17, 45); |
+ nextOccurrence(5); |
+ dumpSelectionStats(); |
+ next(); |
+ }, |
+ |
+ function testCursorInTheWordStart(next) |
+ { |
+ lineSelection(8, 0); |
+ nextOccurrence(1); |
+ dumpSelectionStats(); |
+ next(); |
+ }, |
+ |
+ function testCursorInTheWordEnd(next) |
+ { |
+ lineSelection(8, 8); |
+ nextOccurrence(1); |
+ dumpSelectionStats(); |
+ next(); |
+ }, |
+ |
+ function testNonWordSelection(next) |
+ { |
+ lineSelection(18, 12, 14); |
+ nextOccurrence(8); |
+ dumpSelectionStats(); |
+ next(); |
+ }, |
+ |
+ function testNonWordSelection2(next) |
+ { |
+ lineSelection(17, 30, 33); |
+ nextOccurrence(8); |
+ dumpSelectionStats(); |
+ next(); |
+ }, |
+ |
+ function testNonWordSelection3(next) |
+ { |
+ lineSelections([ |
+ { line: 14, from: 15, to: 25 }, |
+ { line: 16, column: 21 }, |
+ { line: 17, from: 42, to: 47 }, |
+ ]); |
+ var selections = textEditor.selections(); |
+ nextOccurrence(3); |
+ dumpSelectionStats(); |
+ next(); |
+ }, |
+ |
+ function testNonWordSelection4(next) |
+ { |
+ lineSelections([ |
+ { line: 14, from: 15, to: 25 }, |
+ { line: 16, from: 21, to: 23 }, |
+ { line: 17, from: 42, to: 47 }, |
+ ]); |
+ var selections = textEditor.selections(); |
+ nextOccurrence(3); |
+ dumpSelectionStats(); |
+ next(); |
+ }, |
+ |
+ function testTriggerWordSearchInMixedCase(next) |
+ { |
+ lineSelections([ |
+ { line: 9, from: 10, to: 25 }, |
+ { line: 14, column: 33 } |
+ ]); |
+ nextOccurrence(5); |
+ dumpSelectionStats(); |
+ next(); |
+ }, |
+ |
+ ]; |
+} |
+ |
+</script> |
+</head> |
+ |
+<body onload="runTest();"> |
+<p> |
+This test verifies Ctrl-D functionality, which selects next occurrence of word. |
+</p> |
+ |
+<pre id="codeSnippet"> |
+function wordData() { |
+ return { |
+ original: $(".entry.original > .input").text(), |
+ translation: $(".entry.translation > .input").text(), |
+ tags: $(".active-tags > .tagcloud > .tag").toArray().map(function(value) { return value.textContent; }) |
+ }; |
+} |
+ |
+function submitWord(url) { |
+ var stub = new App.Stub($(".content")); |
+ $.post(url, wordData()) |
+ .done(function() { |
+ var callback = $("meta[data-callback]").attr("data-callback"); |
+ if (callback) { |
+ window.location = callback; |
+ } else { |
+ stub.success(); |
+ $(".entry.original > .input").text("").focus(); |
+ $(".entry.translation > .input").text(""); |
+ } |
+ }) |
+ .fail(function(obj, err, errDescr) { |
+ stub.failure("Error: " + errDescr); |
+ }) |
+} |
+</pre> |
+ |
+</body> |
+</html> |