From: <rb...@us...> - 2018-07-21 12:09:22
|
Revision: 15490 http://sourceforge.net/p/htmlunit/code/15490 Author: rbri Date: 2018-07-21 12:09:18 +0000 (Sat, 21 Jul 2018) Log Message: ----------- HTMLxxxInput.reset() results in a wrong state of the selection delegate Issue 1969 Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlEmailInput.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlNumberInput.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlPasswordInput.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlTelInput.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlTextArea.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlTextInput.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlUrlInput.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlEmailInput2Test.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlNumberInput2Test.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlPasswordInput2Test.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlTelInput2Test.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlTextAreaTest.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlTextInput2Test.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlUrlInput2Test.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2018-07-19 19:07:50 UTC (rev 15489) +++ trunk/htmlunit/src/changes/changes.xml 2018-07-21 12:09:18 UTC (rev 15490) @@ -8,6 +8,9 @@ <body> <release version="2.32" date="xx 2018" description="Bugfixes, FIREFOX_45 removed, FIREFOX_60 added"> + <action type="fix" dev="rbri" issue="1969"> + HTMLxxxInput.reset() results in a wrong state of the selection delegate. + </action> <action type="add" dev="rbri"> FF60 ESR support. </action> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlEmailInput.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlEmailInput.java 2018-07-19 19:07:50 UTC (rev 15489) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlEmailInput.java 2018-07-21 12:09:18 UTC (rev 15490) @@ -156,8 +156,18 @@ /** * {@inheritDoc} + * @see HtmlInput#reset() */ @Override + public void reset() { + super.reset(); + setSelectionEnd(0); + } + + /** + * {@inheritDoc} + */ + @Override public DomNode cloneNode(final boolean deep) { final HtmlEmailInput newnode = (HtmlEmailInput) super.cloneNode(deep); newnode.selectionDelegate_ = new SelectableTextSelectionDelegate(newnode); Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlNumberInput.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlNumberInput.java 2018-07-19 19:07:50 UTC (rev 15489) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlNumberInput.java 2018-07-21 12:09:18 UTC (rev 15490) @@ -174,14 +174,6 @@ * {@inheritDoc} */ @Override - protected Object clone() throws CloneNotSupportedException { - return new HtmlNumberInput(getQualifiedName(), getPage(), getAttributesMap()); - } - - /** - * {@inheritDoc} - */ - @Override public void setDefaultValue(final String defaultValue) { final boolean modifyValue = getValueAttribute().equals(getDefaultValue()); setDefaultValue(defaultValue, modifyValue); @@ -205,8 +197,18 @@ /** * {@inheritDoc} + * @see HtmlInput#reset() */ @Override + public void reset() { + super.reset(); + setSelectionEnd(0); + } + + /** + * {@inheritDoc} + */ + @Override public DomNode cloneNode(final boolean deep) { final HtmlNumberInput newnode = (HtmlNumberInput) super.cloneNode(deep); newnode.selectionDelegate_ = new SelectableTextSelectionDelegate(newnode); Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlPasswordInput.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlPasswordInput.java 2018-07-19 19:07:50 UTC (rev 15489) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlPasswordInput.java 2018-07-21 12:09:18 UTC (rev 15490) @@ -158,14 +158,6 @@ * {@inheritDoc} */ @Override - protected Object clone() throws CloneNotSupportedException { - return new HtmlPasswordInput(getQualifiedName(), getPage(), getAttributesMap()); - } - - /** - * {@inheritDoc} - */ - @Override protected void setAttributeNS(final String namespaceURI, final String qualifiedName, final String attributeValue, final boolean notifyAttributeChangeListeners, final boolean notifyMutationObservers) { super.setAttributeNS(namespaceURI, qualifiedName, attributeValue, notifyAttributeChangeListeners, @@ -194,8 +186,18 @@ /** * {@inheritDoc} + * @see HtmlInput#reset() */ @Override + public void reset() { + super.reset(); + setSelectionEnd(0); + } + + /** + * {@inheritDoc} + */ + @Override public DomNode cloneNode(final boolean deep) { final HtmlPasswordInput newnode = (HtmlPasswordInput) super.cloneNode(deep); newnode.selectionDelegate_ = new SelectableTextSelectionDelegate(newnode); Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlTelInput.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlTelInput.java 2018-07-19 19:07:50 UTC (rev 15489) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlTelInput.java 2018-07-21 12:09:18 UTC (rev 15490) @@ -150,4 +150,14 @@ return newnode; } + + /** + * {@inheritDoc} + * @see HtmlInput#reset() + */ + @Override + public void reset() { + super.reset(); + setSelectionEnd(0); + } } Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlTextArea.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlTextArea.java 2018-07-19 19:07:50 UTC (rev 15489) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlTextArea.java 2018-07-21 12:09:18 UTC (rev 15490) @@ -544,14 +544,6 @@ * {@inheritDoc} */ @Override - protected Object clone() throws CloneNotSupportedException { - return new HtmlTextArea(getQualifiedName(), getPage(), getAttributesMap()); - } - - /** - * {@inheritDoc} - */ - @Override protected void setAttributeNS(final String namespaceURI, final String qualifiedName, final String attributeValue, final boolean notifyAttributeChangeListeners, final boolean notifyMutationObservers) { if ("name".equals(qualifiedName)) { Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlTextInput.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlTextInput.java 2018-07-19 19:07:50 UTC (rev 15489) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlTextInput.java 2018-07-21 12:09:18 UTC (rev 15490) @@ -180,17 +180,19 @@ * {@inheritDoc} */ @Override - protected Object clone() throws CloneNotSupportedException { - return new HtmlTextInput(getQualifiedName(), getPage(), getAttributesMap()); + public void setDefaultValue(final String defaultValue) { + final boolean modifyValue = getValueAttribute().equals(getDefaultValue()); + setDefaultValue(defaultValue, modifyValue); } /** * {@inheritDoc} + * @see HtmlInput#reset() */ @Override - public void setDefaultValue(final String defaultValue) { - final boolean modifyValue = getValueAttribute().equals(getDefaultValue()); - setDefaultValue(defaultValue, modifyValue); + public void reset() { + super.reset(); + setSelectionEnd(0); } /** Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlUrlInput.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlUrlInput.java 2018-07-19 19:07:50 UTC (rev 15489) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlUrlInput.java 2018-07-21 12:09:18 UTC (rev 15490) @@ -156,8 +156,18 @@ /** * {@inheritDoc} + * @see HtmlInput#reset() */ @Override + public void reset() { + super.reset(); + setSelectionEnd(0); + } + + /** + * {@inheritDoc} + */ + @Override public DomNode cloneNode(final boolean deep) { final HtmlUrlInput newnode = (HtmlUrlInput) super.cloneNode(deep); newnode.selectionDelegate_ = new SelectableTextSelectionDelegate(newnode); Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlEmailInput2Test.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlEmailInput2Test.java 2018-07-19 19:07:50 UTC (rev 15489) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlEmailInput2Test.java 2018-07-21 12:09:18 UTC (rev 15490) @@ -49,4 +49,29 @@ input.type("ab...@em..."); assertEquals("ab...@em...", input.getValueAttribute()); } + + /** + * @throws Exception if the test fails + */ + @Test + public void typingAndReset() throws Exception { + final String htmlContent + = "<html>\n" + + "<head></head>\n" + + "<body>\n" + + "<form id='form1'>\n" + + " <input type='email' id='foo'>\n" + + "</form>\n" + + "</body></html>"; + + final HtmlPage page = loadPage(htmlContent); + + final HtmlEmailInput input = (HtmlEmailInput) page.getElementById("foo"); + + input.type("ab...@em..."); + input.reset(); + input.type("xy...@em..."); + + assertEquals("xy...@em...", input.getValueAttribute()); + } } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlNumberInput2Test.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlNumberInput2Test.java 2018-07-19 19:07:50 UTC (rev 15489) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlNumberInput2Test.java 2018-07-21 12:09:18 UTC (rev 15490) @@ -49,4 +49,29 @@ input.type("4711"); assertEquals("4711", input.getValueAttribute()); } + + /** + * @throws Exception if the test fails + */ + @Test + public void typingAndReset() throws Exception { + final String htmlContent + = "<html>\n" + + "<head></head>\n" + + "<body>\n" + + "<form id='form1'>\n" + + " <input type='number' id='foo'>\n" + + "</form>\n" + + "</body></html>"; + + final HtmlPage page = loadPage(htmlContent); + + final HtmlNumberInput input = (HtmlNumberInput) page.getElementById("foo"); + + input.type("4711"); + input.reset(); + input.type("0815"); + + assertEquals("0815", input.getValueAttribute()); + } } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlPasswordInput2Test.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlPasswordInput2Test.java 2018-07-19 19:07:50 UTC (rev 15489) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlPasswordInput2Test.java 2018-07-21 12:09:18 UTC (rev 15490) @@ -107,4 +107,29 @@ input.type("4711"); assertEquals("4711", input.getValueAttribute()); } + + /** + * @throws Exception if the test fails + */ + @Test + public void typingAndReset() throws Exception { + final String htmlContent + = "<html>\n" + + "<head></head>\n" + + "<body>\n" + + "<form id='form1'>\n" + + " <input type='password' id='foo'>\n" + + "</form>\n" + + "</body></html>"; + + final HtmlPage page = loadPage(htmlContent); + + final HtmlPasswordInput input = (HtmlPasswordInput) page.getElementById("foo"); + + input.type("4711"); + input.reset(); + input.type("0815"); + + assertEquals("0815", input.getValueAttribute()); + } } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlTelInput2Test.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlTelInput2Test.java 2018-07-19 19:07:50 UTC (rev 15489) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlTelInput2Test.java 2018-07-21 12:09:18 UTC (rev 15490) @@ -49,4 +49,29 @@ input.type("4711"); assertEquals("4711", input.getValueAttribute()); } + + /** + * @throws Exception if the test fails + */ + @Test + public void typingAndReset() throws Exception { + final String htmlContent + = "<html>\n" + + "<head></head>\n" + + "<body>\n" + + "<form id='form1'>\n" + + " <input type='tel' id='foo'>\n" + + "</form>\n" + + "</body></html>"; + + final HtmlPage page = loadPage(htmlContent); + + final HtmlTelInput input = (HtmlTelInput) page.getElementById("foo"); + + input.type("4711"); + input.reset(); + input.type("0815"); + + assertEquals("0815", input.getValueAttribute()); + } } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlTextAreaTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlTextAreaTest.java 2018-07-19 19:07:50 UTC (rev 15489) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlTextAreaTest.java 2018-07-21 12:09:18 UTC (rev 15490) @@ -292,4 +292,51 @@ final HtmlTextArea t = page.getHtmlElementById("t"); t.removeFocus(); } + + /** + * @throws Exception if the test fails + */ + @Test + public void typingAndClone() throws Exception { + final String htmlContent + = "<html>\n" + + "<head></head>\n" + + "<body>\n" + + "<form id='form1'>\n" + + " <textarea id='foo'></textarea>\n" + + "</form>\n" + + "</body></html>"; + + final HtmlPage page = loadPage(htmlContent); + + HtmlTextArea input = (HtmlTextArea) page.getElementById("foo"); + input = (HtmlTextArea) input.cloneNode(true); + input.type("4711"); + assertEquals("4711", input.getTextContent()); + } + + /** + * @throws Exception if the test fails + */ + @Test + public void typingAndReset() throws Exception { + final String htmlContent + = "<html>\n" + + "<head></head>\n" + + "<body>\n" + + "<form id='form1'>\n" + + " <textarea id='foo'></textarea>\n" + + "</form>\n" + + "</body></html>"; + + final HtmlPage page = loadPage(htmlContent); + + final HtmlTextArea input = (HtmlTextArea) page.getElementById("foo"); + + input.type("4711"); + input.reset(); + input.type("0815"); + + assertEquals("0815", input.getTextContent()); + } } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlTextInput2Test.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlTextInput2Test.java 2018-07-19 19:07:50 UTC (rev 15489) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlTextInput2Test.java 2018-07-21 12:09:18 UTC (rev 15490) @@ -360,4 +360,51 @@ assertEquals(1, getMockWebConnection().getRequestCount()); } + + /** + * @throws Exception if the test fails + */ + @Test + public void typingAndClone() throws Exception { + final String htmlContent + = "<html>\n" + + "<head></head>\n" + + "<body>\n" + + "<form id='form1'>\n" + + " <input id='foo'>\n" + + "</form>\n" + + "</body></html>"; + + final HtmlPage page = loadPage(htmlContent); + + HtmlTextInput input = (HtmlTextInput) page.getElementById("foo"); + input = (HtmlTextInput) input.cloneNode(true); + input.type("4711"); + assertEquals("4711", input.getValueAttribute()); + } + + /** + * @throws Exception if the test fails + */ + @Test + public void typingAndReset() throws Exception { + final String htmlContent + = "<html>\n" + + "<head></head>\n" + + "<body>\n" + + "<form id='form1'>\n" + + " <input id='foo'>\n" + + "</form>\n" + + "</body></html>"; + + final HtmlPage page = loadPage(htmlContent); + + final HtmlTextInput input = (HtmlTextInput) page.getElementById("foo"); + + input.type("4711"); + input.reset(); + input.type("0815"); + + assertEquals("0815", input.getValueAttribute()); + } } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlUrlInput2Test.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlUrlInput2Test.java 2018-07-19 19:07:50 UTC (rev 15489) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlUrlInput2Test.java 2018-07-21 12:09:18 UTC (rev 15490) @@ -49,4 +49,29 @@ input.type("4711"); assertEquals("4711", input.getValueAttribute()); } + + /** + * @throws Exception if the test fails + */ + @Test + public void typingAndReset() throws Exception { + final String htmlContent + = "<html>\n" + + "<head></head>\n" + + "<body>\n" + + "<form id='form1'>\n" + + " <input type='url' id='foo'>\n" + + "</form>\n" + + "</body></html>"; + + final HtmlPage page = loadPage(htmlContent); + + final HtmlUrlInput input = (HtmlUrlInput) page.getElementById("foo"); + + input.type("4711"); + input.reset(); + input.type("0815"); + + assertEquals("0815", input.getValueAttribute()); + } } |