| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="../../../../resources/js-test.js"></script> |
| <script src="../../../../resources/ui-helper.js"></script> |
| </head> |
| <body> |
| <div id="test-container"></div> |
| <script> |
| window.jsTestIsAsync = true; |
| |
| let textAreaCaretRect; |
| let textFieldCaretRect; |
| |
| function createTextControlWithPlaceholder(tagName) |
| { |
| let element = document.createElement(tagName); |
| element.placeholder = "placeholder"; |
| return element; |
| } |
| |
| function computeCaretRectForElement(element) |
| { |
| return new Promise((resolved) => { |
| async function handleFocus() { |
| let caretRect = await UIHelper.getUICaretRect(); |
| await UIHelper.deactivateFormControl(element); |
| resolved(caretRect); |
| } |
| element.addEventListener("focus", handleFocus, { once: true }); |
| UIHelper.activateFormControl(element); |
| }); |
| } |
| |
| async function runTest() |
| { |
| if (!window.testRunner) { |
| testFailed("Must be run in WebKitTestRunner."); |
| finishJSTest(); |
| return; |
| } |
| |
| let testContainer = document.getElementById("test-container"); |
| |
| // 1. Compute caret rect in empty textarea. |
| let textArea = createTextControlWithPlaceholder("textarea"); |
| testContainer.appendChild(textArea); |
| textAreaCaretRect = await computeCaretRectForElement(textArea); |
| testContainer.removeChild(textArea); |
| |
| // 2. Compute caret rect in empty text field. |
| let textField = createTextControlWithPlaceholder("input"); |
| testContainer.appendChild(textField); |
| textFieldCaretRect = await computeCaretRectForElement(textField); |
| testContainer.removeChild(textField); |
| |
| // 3. Compare |
| shouldBe("textAreaCaretRect.left", "textFieldCaretRect.left"); |
| |
| // 4. Clean up and finish test. |
| document.body.removeChild(testContainer); |
| finishJSTest(); |
| } |
| |
| description("Tests that the x-coordinate of the caret in an empty textarea is identical to the x-coordinate of the caret in an empty text field."); |
| runTest(); |
| </script> |
| </body> |
| </html> |