From: <rb...@us...> - 2013-09-15 16:46:48
|
Revision: 8489 http://sourceforge.net/p/htmlunit/code/8489 Author: rbri Date: 2013-09-15 16:46:45 +0000 (Sun, 15 Sep 2013) Log Message: ----------- fix the remaining FF17 test regarding outerHTML Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElement.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElementTest.java Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java 2013-09-15 16:07:25 UTC (rev 8488) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java 2013-09-15 16:46:45 UTC (rev 8489) @@ -1014,6 +1014,10 @@ @BrowserFeature(@WebBrowser(IE)) JS_OPACITY_ACCEPTS_ARBITRARY_VALUES, + /** element.outerHTML handles the body and head tag as readonly (IE). */ + @BrowserFeature(@WebBrowser(IE)) + JS_OUTER_HTML_BODY_HEAD_READONLY, + /** If <tt>true</tt>, then treat <tt>__parent__</tt> and <tt>__proto__</tt> as special properties. */ @BrowserFeature(@WebBrowser(IE)) JS_PARENT_PROTO_PROPERTIES, 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-09-15 16:07:25 UTC (rev 8488) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElement.java 2013-09-15 16:46:45 UTC (rev 8489) @@ -34,6 +34,7 @@ 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; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_OUTER_HTML_BODY_HEAD_READONLY; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_PREFIX_RETURNS_EMPTY_WHEN_UNDEFINED; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_SET_ATTRIBUTE_CONSIDERS_ATTR_FOR_CLASS_AS_REAL; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_SET_ATTRIBUTE_SUPPORTS_EVENT_HANDLERS; @@ -361,11 +362,13 @@ Arrays.asList(new String[] {"html", "table", "tbody", "tfoot", "thead", "tr"}); /** - * The tag names of the objects for which outerHTML is read only + * The tag names of the objects for which outerHTML is read only. + * Note: IE additionally handles the body and head tag as read only. + * see feature JS_OUTER_HTML_BODY_READONLY */ private static final List<String> OUTER_HTML_READONLY = Arrays.asList(new String[] { - "body", "caption", "col", "colgroup", "frameset", "head", + "caption", "col", "colgroup", "frameset", "html", "tbody", "td", "tfoot", "th", "thead", "tr"}); /** @@ -1053,9 +1056,12 @@ @JsxSetter({ @WebBrowser(IE), @WebBrowser(CHROME), @WebBrowser(value = FF, minVersion = 11) }) public void setOuterHTML(final String value) { final DomNode domNode = getDomNodeOrDie(); + final String nodeName = domNode.getNodeName(); - if (OUTER_HTML_READONLY.contains(domNode.getNodeName())) { - throw Context.reportRuntimeError("outerHTML is read-only for tag " + domNode.getNodeName()); + if (OUTER_HTML_READONLY.contains(nodeName) + || (getBrowserVersion().hasFeature(JS_OUTER_HTML_BODY_HEAD_READONLY) + && ("body".equals(nodeName) || "head".equals(nodeName)))) { + throw Context.reportRuntimeError("outerHTML is read-only for tag " + nodeName); } final DomDocumentFragment fragment = (DomDocumentFragment) domNode.getPage().createDocumentFragment(); Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElementTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElementTest.java 2013-09-15 16:07:25 UTC (rev 8488) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElementTest.java 2013-09-15 16:46:45 UTC (rev 8489) @@ -1114,7 +1114,6 @@ @Alerts(IE = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11" }, FF17 = { "-0", "1", "2", "3", "-4", "5", "6", "7", "8", "9", "10", "11" }, DEFAULT = { "-0", "-1", "-2", "-3", "-4", "-5", "-6", "-7", "-8", "-9", "-10", "-11" }) - @NotYetImplemented(FF17) public void setOuterHTMLToReadOnly() throws Exception { final String html = "<html>\n" + "<head>\n" |