From: <asa...@us...> - 2017-04-28 20:56:21
|
Revision: 14299 http://sourceforge.net/p/htmlunit/code/14299 Author: asashour Date: 2017-04-28 20:56:18 +0000 (Fri, 28 Apr 2017) Log Message: ----------- fix case, partial implementation of all keys Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlElement.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/Document.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/event/KeyboardEvent.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/event/KeyboardEventTest.java Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlElement.java 2017-04-28 20:11:08 UTC (rev 14298) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlElement.java 2017-04-28 20:56:18 UTC (rev 14299) @@ -563,12 +563,12 @@ } final Event keyDown = new KeyboardEvent(this, Event.TYPE_KEY_DOWN, c, - shiftPressed_, ctrlPressed_, altPressed_); + shiftPressed_ | isShiftNeeded, ctrlPressed_, altPressed_); final ScriptResult keyDownResult = fireEvent(keyDown); if (!keyDown.isAborted(keyDownResult)) { final Event keyPress = new KeyboardEvent(this, Event.TYPE_KEY_PRESS, c, - shiftPressed_, ctrlPressed_, altPressed_); + shiftPressed_ | isShiftNeeded, ctrlPressed_, altPressed_); final ScriptResult keyPressResult = fireEvent(keyPress); if ((shiftDown == null || !shiftDown.isAborted(shiftDownResult)) @@ -582,10 +582,10 @@ if (this instanceof HtmlTextInput || this instanceof HtmlTextArea || this instanceof HtmlPasswordInput) { - fireKeyboardEvent(nashorn, Event2.TYPE_INPUT, c); + fireKeyboardEvent(nashorn, Event2.TYPE_INPUT, c, shiftPressed_ | isShiftNeeded); } - fireKeyboardEvent(nashorn, Event.TYPE_KEY_UP, c); + fireKeyboardEvent(nashorn, Event.TYPE_KEY_UP, c, shiftPressed_ | isShiftNeeded); if (isShiftNeeded) { if (nashorn) { @@ -612,12 +612,12 @@ return webClient.getCurrentWindow().getEnclosedPage(); } - private void fireKeyboardEvent(final boolean nashorn, final String eventType, final char c) { + private void fireKeyboardEvent(final boolean nashorn, final String eventType, final char c, final boolean shift) { if (nashorn) { - fireEvent(new KeyboardEvent2(this, eventType, c, shiftPressed_, ctrlPressed_, altPressed_)); + fireEvent(new KeyboardEvent2(this, eventType, c, shift, ctrlPressed_, altPressed_)); } else { - fireEvent(new KeyboardEvent(this, eventType, c, shiftPressed_, ctrlPressed_, altPressed_)); + fireEvent(new KeyboardEvent(this, eventType, c, shift, ctrlPressed_, altPressed_)); } } Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/Document.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/Document.java 2017-04-28 20:11:08 UTC (rev 14298) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/Document.java 2017-04-28 20:56:18 UTC (rev 14299) @@ -1019,7 +1019,7 @@ // if in prototype no domNode is set -> use start document = ((DocumentProxy) start).getDelegee(); } - else { + else if (start instanceof HTMLDocument) { final DomNode page = ((HTMLDocument) start).getDomNodeOrNull(); if (page != null) { document = (Document) page.getScriptableObject(); Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/event/KeyboardEvent.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/event/KeyboardEvent.java 2017-04-28 20:11:08 UTC (rev 14298) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/event/KeyboardEvent.java 2017-04-28 20:56:18 UTC (rev 14299) @@ -1066,12 +1066,20 @@ */ @JsxGetter public String getKey() { - switch (getKeyCode()) { + int code = getKeyCode(); + if (code == 0) { + code = getCharCode(); + } + switch (code) { case DOM_VK_SHIFT: return "Shift"; + case DOM_VK_PERIOD: + return "."; + case DOM_VK_RETURN: + return "Enter"; default: - return String.valueOf(isShiftKey() ? Character.toUpperCase((char) which_) : (char) which_); + return String.valueOf(isShiftKey() ? (char) which_ : Character.toLowerCase((char) which_)); } } @@ -1080,8 +1088,22 @@ * @return the value of a key or keys pressed by the user */ @JsxGetter(IE) - public int getChar() { - return charCode_; + public String getChar() { + int code = getKeyCode(); + if (code == 0) { + code = getCharCode(); + } + switch (code) { + case DOM_VK_SHIFT: + return ""; + case DOM_VK_RETURN: + return "\n"; + case DOM_VK_PERIOD: + return "."; + + default: + return String.valueOf(isShiftKey() ? (char) which_ : Character.toLowerCase((char) which_)); + } } /** @@ -1090,12 +1112,21 @@ */ @JsxGetter({CHROME, FF}) public String getCode() { - switch (getKeyCode()) { + int code = getKeyCode(); + if (code == 0) { + code = getCharCode(); + } + switch (code) { case DOM_VK_SHIFT: return "ShiftLeft"; + case DOM_VK_PERIOD: + case '.': + return "Period"; + case DOM_VK_RETURN: + return "Enter"; default: - return "Key" + (isShiftKey() ? Character.toUpperCase((char) which_) : (char) which_); + return "Key" + Character.toUpperCase((char) which_); } } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/event/KeyboardEventTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/event/KeyboardEventTest.java 2017-04-28 20:11:08 UTC (rev 14298) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/event/KeyboardEventTest.java 2017-04-28 20:56:18 UTC (rev 14299) @@ -26,7 +26,6 @@ import com.gargoylesoftware.htmlunit.BrowserRunner; import com.gargoylesoftware.htmlunit.BrowserRunner.Alerts; import com.gargoylesoftware.htmlunit.BrowserRunner.BuggyWebDriver; -import com.gargoylesoftware.htmlunit.BrowserRunner.NotYetImplemented; import com.gargoylesoftware.htmlunit.WebDriverTestCase; /** @@ -371,11 +370,10 @@ "keyup:190,0,190,.,.,undefined,false", "keydown:13,0,13,Enter,\n,undefined,false", "keypress:13,13,13,Enter,\n,undefined,false", - "keyup:13,0,13,Enter,\n,undefined"} + "keyup:13,0,13,Enter,\n,undefined,false"} ) // https://github.com/SeleniumHQ/selenium/issues/2531 @BuggyWebDriver - @NotYetImplemented public void which() throws Exception { final String html = "<html><head></head><body>\n" @@ -385,7 +383,7 @@ + " e = e ? e : window.event;\n" + " document.getElementById('myTextarea').value " + "+= e.type + ':' + e.keyCode + ',' + e.charCode + ',' + e.which + ',' " - + "+ e.key + ',' + e.char + ',' + e.code + ',' + e.shiftKey + '\\n';\n" + + "+ e.key + ',' + e.char + ',' + e.code + ',' + e.shiftKey + '\\r\\n';\n" + "}\n" + "document.getElementById('keyId').onkeyup = handler;\n" + "document.getElementById('keyId').onkeydown = handler;\n" @@ -398,7 +396,7 @@ final WebDriver driver = loadPage2(html); driver.findElement(By.id("keyId")).sendKeys(keysToSend); - final String[] actual = driver.findElement(By.id("myTextarea")).getAttribute("value").split("\r\n|\n"); + final String[] actual = driver.findElement(By.id("myTextarea")).getAttribute("value").split("\r\n"); assertEquals(Arrays.asList(getExpectedAlerts()).toString(), Arrays.asList(actual).toString()); } |