From: <rb...@us...> - 2013-04-25 20:24:26
|
Revision: 8242 http://sourceforge.net/p/htmlunit/code/8242 Author: rbri Date: 2013-04-25 20:24:21 +0000 (Thu, 25 Apr 2013) Log Message: ----------- behave like IE8 when working with checkboxes/radio buttons from JS (next try to simulate the strange IE) Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlCheckBoxInput.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlRadioButtonInput.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlCheckBoxInput2Test.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlRadioButtonInput2Test.java Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlCheckBoxInput.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlCheckBoxInput.java 2013-04-24 18:27:44 UTC (rev 8241) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlCheckBoxInput.java 2013-04-25 20:24:21 UTC (rev 8242) @@ -43,6 +43,7 @@ private boolean defaultCheckedState_; private boolean valueAtFocus_; + private boolean forceChecked_; /** * Creates an instance. @@ -188,10 +189,15 @@ @Override protected void onAddedToPage() { if (hasFeature(HTMLINPUT_SET_CHECKED_TO_DEFAULT_WHEN_ADDED)) { - setChecked(isDefaultChecked()); + reset(); } - if (wasCreatedByJavascript() && hasFeature(HTMLINPUT_SET_CHECKED_TO_FALSE_WHEN_ADDED)) { - removeAttribute("checked"); + if (hasFeature(HTMLINPUT_SET_CHECKED_TO_FALSE_WHEN_ADDED)) { + if (wasCreatedByJavascript()) { + removeAttribute("checked"); + } + else if (forceChecked_) { + setAttribute("checked", "checked"); + } } } @@ -203,7 +209,11 @@ final HtmlCheckBoxInput clone = (HtmlCheckBoxInput) super.cloneNode(deep); if (hasFeature(HTMLINPUT_SET_CHECKED_TO_FALSE_WHEN_ADDED)) { clone.removeAttribute("checked"); + clone.forceChecked_ = isDefaultChecked(); } + if (wasCreatedByJavascript()) { + clone.markAsCreatedByJavascript(); + } return clone; } Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlRadioButtonInput.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlRadioButtonInput.java 2013-04-24 18:27:44 UTC (rev 8241) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlRadioButtonInput.java 2013-04-25 20:24:21 UTC (rev 8242) @@ -47,6 +47,7 @@ private boolean defaultCheckedState_; private boolean valueAtFocus_; + private boolean forceChecked_; /** * Creates an instance. @@ -249,10 +250,15 @@ @Override protected void onAddedToPage() { if (hasFeature(HTMLINPUT_SET_CHECKED_TO_DEFAULT_WHEN_ADDED)) { - setChecked(isDefaultChecked()); + reset(); } - if (wasCreatedByJavascript() && hasFeature(HTMLINPUT_SET_CHECKED_TO_FALSE_WHEN_ADDED)) { - removeAttribute("checked"); + if (hasFeature(HTMLINPUT_SET_CHECKED_TO_FALSE_WHEN_ADDED)) { + if (wasCreatedByJavascript()) { + removeAttribute("checked"); + } + else if (forceChecked_) { + setAttribute("checked", "checked"); + } } } @@ -264,7 +270,11 @@ final HtmlRadioButtonInput clone = (HtmlRadioButtonInput) super.cloneNode(deep); if (hasFeature(HTMLINPUT_SET_CHECKED_TO_FALSE_WHEN_ADDED)) { clone.removeAttribute("checked"); + clone.forceChecked_ = isDefaultChecked(); } + if (wasCreatedByJavascript()) { + clone.markAsCreatedByJavascript(); + } return clone; } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlCheckBoxInput2Test.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlCheckBoxInput2Test.java 2013-04-24 18:27:44 UTC (rev 8241) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlCheckBoxInput2Test.java 2013-04-25 20:24:21 UTC (rev 8242) @@ -26,7 +26,6 @@ import com.gargoylesoftware.htmlunit.BrowserRunner; import com.gargoylesoftware.htmlunit.BrowserRunner.Alerts; -import com.gargoylesoftware.htmlunit.BrowserRunner.Browser; import com.gargoylesoftware.htmlunit.BrowserRunner.NotYetImplemented; import com.gargoylesoftware.htmlunit.WebDriverTestCase; @@ -497,7 +496,6 @@ @Test @Alerts(DEFAULT = { "true", "true", "true", "true", "true", "true" }, IE = { "false", "true", "true", "true", "true", "true" }) - @NotYetImplemented(Browser.IE) public void checked_cloneNode_appendChild_fromHtml() throws Exception { final String html = "<html>\n" + "<head>\n" @@ -612,7 +610,6 @@ @Test @Alerts(DEFAULT = { "true", "true", "true", "true", "true", "true" }, IE = { "false", "true", "true", "true", "true", "true" }) - @NotYetImplemented(Browser.IE) public void checked_cloneNode_insertBefore_fromHtml() throws Exception { final String html = "<html>\n" + "<head>\n" Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlRadioButtonInput2Test.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlRadioButtonInput2Test.java 2013-04-24 18:27:44 UTC (rev 8241) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlRadioButtonInput2Test.java 2013-04-25 20:24:21 UTC (rev 8242) @@ -24,8 +24,6 @@ import com.gargoylesoftware.htmlunit.BrowserRunner; import com.gargoylesoftware.htmlunit.BrowserRunner.Alerts; -import com.gargoylesoftware.htmlunit.BrowserRunner.Browser; -import com.gargoylesoftware.htmlunit.BrowserRunner.NotYetImplemented; import com.gargoylesoftware.htmlunit.WebDriverTestCase; /** @@ -495,7 +493,6 @@ @Test @Alerts(DEFAULT = { "true", "true", "true", "true", "true", "true" }, IE = { "false", "true", "true", "true", "true", "true" }) - @NotYetImplemented(Browser.IE) public void checked_cloneNode_appendChild_fromHtml() throws Exception { final String html = "<html>\n" + "<head>\n" @@ -610,7 +607,6 @@ @Test @Alerts(DEFAULT = { "true", "true", "true", "true", "true", "true" }, IE = { "false", "true", "true", "true", "true", "true" }) - @NotYetImplemented(Browser.IE) public void checked_cloneNode_insertBefore_fromHtml() throws Exception { final String html = "<html>\n" + "<head>\n" |