Index: third_party/WebKit/LayoutTests/inspector/console/console-focus.html |
diff --git a/third_party/WebKit/LayoutTests/inspector/console/console-focus.html b/third_party/WebKit/LayoutTests/inspector/console/console-focus.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2cd9c4b1c4528c7cc6b3e06431d4d9844c7aec64 |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/inspector/console/console-focus.html |
@@ -0,0 +1,97 @@ |
+<html> |
+<head> |
+<script src="../../http/tests/inspector/inspector-test.js"></script> |
+<script src="../../http/tests/inspector/console-test.js"></script> |
+<script> |
+ |
+var test = function() |
+{ |
+ var consoleView = Console.ConsoleView.instance(); |
+ var viewport = consoleView._viewport; |
+ var prompt = consoleView._prompt; |
+ var consoleEditor; |
+ InspectorTest.waitUntilConsoleEditorLoaded().then(e => consoleEditor = e).then(logMessages); |
+ |
+ // Ensure that the body is focusable. |
+ document.body.tabIndex = -1; |
+ function resetAndDumpFocusAndScrollTop() { |
+ document.body.focus(); |
+ viewport.element.scrollTop = 0; |
+ dumpFocusAndScrollInfo(); |
+ } |
+ |
+ function logMessages() { |
+ InspectorTest.waitForConsoleMessages(2, () => InspectorTest.runTestSuite(testSuite)); |
+ InspectorTest.evaluateInConsole("'foo " + "\n".repeat(50) + "bar'"); |
+ } |
+ |
+ var testSuite = [ |
+ function testClickingWithSelectedTextShouldNotFocusPrompt(next) { |
+ resetAndDumpFocusAndScrollTop(); |
+ |
+ // Make a selection. |
+ var messageElement = consoleView.itemElement(0).element(); |
+ var firstTextNode = messageElement.traverseNextTextNode(); |
+ window.getSelection().setBaseAndExtent(firstTextNode, 0, firstTextNode, 1); |
+ |
+ clickObjectInMessage(0); |
+ dumpFocusAndScrollInfo(); |
+ window.getSelection().removeAllRanges(); |
+ next(); |
+ }, |
+ |
+ function testClickOnMessageShouldFocusPromptWithoutScrolling(next) { |
+ resetAndDumpFocusAndScrollTop(); |
+ |
+ clickObjectInMessage(0); |
+ |
+ dumpFocusAndScrollInfo(); |
+ next(); |
+ }, |
+ |
+ function testClickOutsideMessageListShouldFocusPromptAndMoveCaretToEnd(next) { |
+ prompt.setText("foobar"); |
+ consoleEditor.setSelection(TextUtils.TextRange.createFromLocation(0, 1)); |
+ resetAndDumpFocusAndScrollTop(); |
+ InspectorTest.addResult("Selection before: " + consoleEditor.selection().toString()); |
+ |
+ InspectorTest.addResult("Clicking on container"); |
+ consoleView._messagesElement.click(); |
+ |
+ dumpFocusAndScrollInfo(); |
+ InspectorTest.addResult("Selection after: " + consoleEditor.selection().toString()); |
+ next(); |
+ } |
+ ]; |
+ |
+ function clickObjectInMessage(index) { |
+ var previewElement = consoleView._visibleViewMessages[index].element().querySelector('.source-code'); |
+ var previewRect = previewElement.getBoundingClientRect(); |
+ var clientX = previewRect.left + previewRect.width / 2; |
+ var clientY = previewRect.top + previewRect.height / 2; |
+ |
+ InspectorTest.addResult('Clicking message ' + index); |
+ previewElement.dispatchEvent(new MouseEvent('click', {clientX: clientX, clientY: clientY, bubbles: true})); |
+ } |
+ |
+ function dumpFocusAndScrollInfo() |
+ { |
+ var focusedElement = document.deepActiveElement(); |
+ if (focusedElement) |
+ InspectorTest.addResult("Focused element: " + focusedElement.tagName); |
+ else |
+ InspectorTest.addResult("No focus"); |
+ InspectorTest.addResult("Viewport scrolled to top: " + String(viewport.element.scrollTop === 0)); |
+ } |
+} |
+ |
+</script> |
+</head> |
+ |
+<body onload="runTest()"> |
+<p> |
+Tests that interacting with the console gives appropriate focus. |
+</p> |
+ |
+</body> |
+</html> |