From: <rb...@us...> - 2013-12-23 18:52:33
|
Revision: 8907 http://sourceforge.net/p/htmlunit/code/8907 Author: rbri Date: 2013-12-23 18:52:30 +0000 (Mon, 23 Dec 2013) Log Message: ----------- use inheritance instead of string compare Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElement.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLFrameSetElement.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLHeadElement.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLHtmlElement.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLStyleElement.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLTableColElement.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLTableElement.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLTableRowElement.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLTableSectionElement.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLTitleElement.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2013-12-23 15:30:15 UTC (rev 8906) +++ trunk/htmlunit/src/changes/changes.xml 2013-12-23 18:52:30 UTC (rev 8907) @@ -9,6 +9,15 @@ <body> <release version="2.14" date="???" description="Bugfixes"> <action type="fix" dev="rbri" due-to="Frank Danek"> + Some more tests converted into WebDriverTestCase. + </action> + <action type="fix" dev="rbri" due-to="Frank Danek"> + Improved HTML parsing to be more compatible with real browsers. + </action> + <action type="fix" dev="rbri" due-to="Frank Danek"> + JavaScript: Processing of events for checkbox, radiobutton and select fixed. + </action> + <action type="fix" dev="rbri" due-to="Frank Danek"> JavaScript: namespaceURI returns the correct value for html elements. </action> <action type="fix" dev="asashour" issue="1563"> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElement.java 2013-12-23 15:30:15 UTC (rev 8906) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElement.java 2013-12-23 18:52:30 UTC (rev 8907) @@ -31,7 +31,6 @@ import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_ELEMENT_EXTENT_WITHOUT_PADDING; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_INNER_HTML_ADD_CHILD_FOR_NULL_VALUE; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_INNER_HTML_CREATES_DOC_FRAGMENT_AS_PARENT; -import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_INNER_HTML_READONLY_FOR_SOME_TAGS; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_INNER_HTML_REDUCE_WHITESPACES; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_NATIVE_FUNCTION_TOSTRING_NEW_LINE; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_OFFSET_PARENT_THROWS_NOT_ATTACHED; @@ -381,14 +380,6 @@ private String chOff_ = ""; /** - * The tag names of the objects for which innerHTML is read only in IE - */ - private static final List<String> INNER_HTML_READONLY_IN_IE = - Arrays.asList(new String[] { - "col", "colgroup", "frameset", "head", "html", "style", "table", - "tbody", "tfoot", "thead", "title", "tr"}); - - /** * The tag names of the objects for which innerText is read only */ private static final List<String> INNER_TEXT_READONLY = @@ -975,12 +966,7 @@ @JsxSetter public void setInnerHTML(final Object value) { final DomNode domNode = getDomNodeOrDie(); - final boolean readonly = getBrowserVersion().hasFeature(JS_INNER_HTML_READONLY_FOR_SOME_TAGS); - if (readonly && INNER_HTML_READONLY_IN_IE.contains(domNode.getNodeName())) { - throw Context.reportRuntimeError("innerHTML is read-only for tag " + domNode.getNodeName()); - } - domNode.removeAllChildren(); // null && IE -> add child Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLFrameSetElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLFrameSetElement.java 2013-12-23 15:30:15 UTC (rev 8906) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLFrameSetElement.java 2013-12-23 18:52:30 UTC (rev 8907) @@ -14,7 +14,9 @@ */ package com.gargoylesoftware.htmlunit.javascript.host.html; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_INNER_HTML_READONLY_FOR_SOME_TAGS; import static com.gargoylesoftware.htmlunit.javascript.configuration.BrowserName.IE; +import net.sourceforge.htmlunit.corejs.javascript.Context; import com.gargoylesoftware.htmlunit.html.HtmlFrameSet; import com.gargoylesoftware.htmlunit.javascript.configuration.JsxClass; @@ -28,6 +30,7 @@ * @version $Revision$ * @author Bruce Chapman * @author Ahmed Ashour + * @author Ronald Brill */ @JsxClass(domClass = HtmlFrameSet.class) public class HTMLFrameSetElement extends HTMLElement { @@ -99,4 +102,17 @@ public void setBorder(final String border) { getDomNodeOrDie().setAttribute("border", border); } + + /** + * Overwritten to throw an exception in IE8/9. + * @param value the new value for the contents of this node + */ + @JsxSetter + @Override + public void setInnerHTML(final Object value) { + if (getBrowserVersion().hasFeature(JS_INNER_HTML_READONLY_FOR_SOME_TAGS)) { + throw Context.reportRuntimeError("innerHTML is read-only for tag 'frameset'"); + } + super.setInnerHTML(value); + } } Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLHeadElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLHeadElement.java 2013-12-23 15:30:15 UTC (rev 8906) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLHeadElement.java 2013-12-23 18:52:30 UTC (rev 8907) @@ -14,16 +14,33 @@ */ package com.gargoylesoftware.htmlunit.javascript.host.html; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_INNER_HTML_READONLY_FOR_SOME_TAGS; +import net.sourceforge.htmlunit.corejs.javascript.Context; + import com.gargoylesoftware.htmlunit.html.HtmlHead; import com.gargoylesoftware.htmlunit.javascript.configuration.JsxClass; +import com.gargoylesoftware.htmlunit.javascript.configuration.JsxSetter; /** * The JavaScript object "HTMLHeadElement". * * @version $Revision$ * @author Ahmed Ashour + * @author Ronald Brill */ @JsxClass(domClass = HtmlHead.class) public class HTMLHeadElement extends HTMLElement { + /** + * Overwritten to throw an exception in IE8/9. + * @param value the new value for the contents of this node + */ + @JsxSetter + @Override + public void setInnerHTML(final Object value) { + if (getBrowserVersion().hasFeature(JS_INNER_HTML_READONLY_FOR_SOME_TAGS)) { + throw Context.reportRuntimeError("innerHTML is read-only for tag 'head'"); + } + super.setInnerHTML(value); + } } Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLHtmlElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLHtmlElement.java 2013-12-23 15:30:15 UTC (rev 8906) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLHtmlElement.java 2013-12-23 18:52:30 UTC (rev 8907) @@ -15,9 +15,12 @@ package com.gargoylesoftware.htmlunit.javascript.host.html; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_BOUNDING_CLIENT_RECT_OFFSET_TWO; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_INNER_HTML_READONLY_FOR_SOME_TAGS; +import net.sourceforge.htmlunit.corejs.javascript.Context; import com.gargoylesoftware.htmlunit.html.HtmlHtml; import com.gargoylesoftware.htmlunit.javascript.configuration.JsxClass; +import com.gargoylesoftware.htmlunit.javascript.configuration.JsxSetter; /** * The JavaScript object "HTMLHtmlElement". @@ -25,6 +28,7 @@ * @version $Revision$ * @author Ahmed Ashour * @author Marc Guillemot + * @author Ronald Brill */ @JsxClass(domClass = HtmlHtml.class) public class HTMLHtmlElement extends HTMLElement { @@ -70,5 +74,18 @@ } return super.getClientTop(); } + + /** + * Overwritten to throw an exception in IE8/9. + * @param value the new value for the contents of this node + */ + @JsxSetter + @Override + public void setInnerHTML(final Object value) { + if (getBrowserVersion().hasFeature(JS_INNER_HTML_READONLY_FOR_SOME_TAGS)) { + throw Context.reportRuntimeError("innerHTML is read-only for tag 'html'"); + } + super.setInnerHTML(value); + } } Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLStyleElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLStyleElement.java 2013-12-23 15:30:15 UTC (rev 8906) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLStyleElement.java 2013-12-23 18:52:30 UTC (rev 8907) @@ -14,11 +14,14 @@ */ package com.gargoylesoftware.htmlunit.javascript.host.html; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_INNER_HTML_READONLY_FOR_SOME_TAGS; import static com.gargoylesoftware.htmlunit.javascript.configuration.BrowserName.FF; import static com.gargoylesoftware.htmlunit.javascript.configuration.BrowserName.IE; import java.io.StringReader; +import net.sourceforge.htmlunit.corejs.javascript.Context; + import org.w3c.css.sac.InputSource; import com.gargoylesoftware.htmlunit.Cache; @@ -111,4 +114,17 @@ final HtmlStyle style = (HtmlStyle) getDomNodeOrDie(); return style.getAttribute("media"); } + + /** + * Overwritten to throw an exception in IE8/9. + * @param value the new value for the contents of this node + */ + @JsxSetter + @Override + public void setInnerHTML(final Object value) { + if (getBrowserVersion().hasFeature(JS_INNER_HTML_READONLY_FOR_SOME_TAGS)) { + throw Context.reportRuntimeError("innerHTML is read-only for tag 'style'"); + } + super.setInnerHTML(value); + } } Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLTableColElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLTableColElement.java 2013-12-23 15:30:15 UTC (rev 8906) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLTableColElement.java 2013-12-23 18:52:30 UTC (rev 8907) @@ -14,6 +14,7 @@ */ package com.gargoylesoftware.htmlunit.javascript.host.html; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_INNER_HTML_READONLY_FOR_SOME_TAGS; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures. JS_TABLE_COLUMN_SPAN_THROWS_EXCEPTION_IF_LESS_THAN_ONE; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures. @@ -107,4 +108,18 @@ protected boolean isEndTagForbidden() { return getDomNodeOrDie() instanceof HtmlTableColumn; } + + /** + * Overwritten to throw an exception in IE8/9. + * @param value the new value for the contents of this node + */ + @JsxSetter + @Override + public void setInnerHTML(final Object value) { + if (getBrowserVersion().hasFeature(JS_INNER_HTML_READONLY_FOR_SOME_TAGS)) { + throw Context.reportRuntimeError("innerHTML is read-only for tag '" + + getDomNodeOrDie().getNodeName() + "'"); + } + super.setInnerHTML(value); + } } Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLTableElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLTableElement.java 2013-12-23 15:30:15 UTC (rev 8906) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLTableElement.java 2013-12-23 18:52:30 UTC (rev 8907) @@ -14,6 +14,7 @@ */ package com.gargoylesoftware.htmlunit.javascript.host.html; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_INNER_HTML_READONLY_FOR_SOME_TAGS; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures. JS_TABLE_SET_CAPTION_ALTHOUGH_ALREADY_SET_THROWS_ERROR; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_TABLE_SET_TFOOT_ALTHOUGH_ALREADY_SET_THROWS_ERROR; @@ -374,4 +375,17 @@ public void setBgColor(final String bgColor) { setColorAttribute("bgColor", bgColor); } + + /** + * Overwritten to throw an exception in IE8/9. + * @param value the new value for the contents of this node + */ + @JsxSetter + @Override + public void setInnerHTML(final Object value) { + if (getBrowserVersion().hasFeature(JS_INNER_HTML_READONLY_FOR_SOME_TAGS)) { + throw Context.reportRuntimeError("innerHTML is read-only for tag 'table'"); + } + super.setInnerHTML(value); + } } Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLTableRowElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLTableRowElement.java 2013-12-23 15:30:15 UTC (rev 8906) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLTableRowElement.java 2013-12-23 18:52:30 UTC (rev 8907) @@ -15,6 +15,7 @@ package com.gargoylesoftware.htmlunit.javascript.host.html; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.GENERATED_172; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_INNER_HTML_READONLY_FOR_SOME_TAGS; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_TABLE_ROW_SECTION_INDEX_BIG_INT_IF_UNATTACHED; import java.util.ArrayList; @@ -190,4 +191,17 @@ htmlRow.getCell(position).remove(); } + + /** + * Overwritten to throw an exception in IE8/9. + * @param value the new value for the contents of this node + */ + @JsxSetter + @Override + public void setInnerHTML(final Object value) { + if (getBrowserVersion().hasFeature(JS_INNER_HTML_READONLY_FOR_SOME_TAGS)) { + throw Context.reportRuntimeError("innerHTML is read-only for tag 'tr'"); + } + super.setInnerHTML(value); + } } Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLTableSectionElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLTableSectionElement.java 2013-12-23 15:30:15 UTC (rev 8906) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLTableSectionElement.java 2013-12-23 18:52:30 UTC (rev 8907) @@ -14,7 +14,9 @@ */ package com.gargoylesoftware.htmlunit.javascript.host.html; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_INNER_HTML_READONLY_FOR_SOME_TAGS; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_TABLE_VALIGN_SUPPORTS_IE_VALUES; +import net.sourceforge.htmlunit.corejs.javascript.Context; import com.gargoylesoftware.htmlunit.html.HtmlTableBody; import com.gargoylesoftware.htmlunit.html.HtmlTableFooter; @@ -119,4 +121,18 @@ public void setChOff(final String chOff) { super.setChOff(chOff); } + + /** + * Overwritten to throw an exception in IE8/9. + * @param value the new value for the contents of this node + */ + @JsxSetter + @Override + public void setInnerHTML(final Object value) { + if (getBrowserVersion().hasFeature(JS_INNER_HTML_READONLY_FOR_SOME_TAGS)) { + throw Context.reportRuntimeError("innerHTML is read-only for tag '" + + getDomNodeOrDie().getNodeName() + "'"); + } + super.setInnerHTML(value); + } } Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLTitleElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLTitleElement.java 2013-12-23 15:30:15 UTC (rev 8906) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLTitleElement.java 2013-12-23 18:52:30 UTC (rev 8907) @@ -14,6 +14,9 @@ */ package com.gargoylesoftware.htmlunit.javascript.host.html; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_INNER_HTML_READONLY_FOR_SOME_TAGS; +import net.sourceforge.htmlunit.corejs.javascript.Context; + import com.gargoylesoftware.htmlunit.html.DomNode; import com.gargoylesoftware.htmlunit.html.DomText; import com.gargoylesoftware.htmlunit.html.HtmlTitle; @@ -27,6 +30,7 @@ * @version $Revision$ * @author Ahmed Ashour * @author Sudhan Moghe + * @author Ronald Brill */ @JsxClass(domClass = HtmlTitle.class) public class HTMLTitleElement extends HTMLElement { @@ -61,4 +65,17 @@ firstChild.setNodeValue(text); } } + + /** + * Overwritten to throw an exception in IE8/9. + * @param value the new value for the contents of this node + */ + @JsxSetter + @Override + public void setInnerHTML(final Object value) { + if (getBrowserVersion().hasFeature(JS_INNER_HTML_READONLY_FOR_SOME_TAGS)) { + throw Context.reportRuntimeError("innerHTML is read-only for tag 'title'"); + } + super.setInnerHTML(value); + } } |