From: <rb...@us...> - 2014-03-20 18:44:30
|
Revision: 9192 http://sourceforge.net/p/htmlunit/code/9192 Author: rbri Date: 2014-03-20 18:44:27 +0000 (Thu, 20 Mar 2014) Log Message: ----------- improve outerHTML parameter processing for null, undefined and empty string Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLBodyElement.java 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/HTMLTableCaptionElement.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLTableCellElement.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/HTMLTableRowElement.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLTableSectionElement.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 2014-03-19 19:13:17 UTC (rev 9191) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java 2014-03-20 18:44:27 UTC (rev 9192) @@ -1168,11 +1168,15 @@ @BrowserFeature(@WebBrowser(value = IE, maxVersion = 9)) JS_OUTER_HTML_BODY_HEAD_READONLY, + /** element.outerHTML handles null value as string "null" (IE). */ + @BrowserFeature(@WebBrowser(value = IE)) + JS_OUTER_HTML_NULL_AS_STRING, + /** element.outerHTML throws an exception, if the new tag will close * the outer one when parsing the html source (IE). */ @BrowserFeature(@WebBrowser(value = IE, maxVersion = 9)) - JS_OUTER_THROW_EXCEPTION_WHEN_CLOSES, + JS_OUTER_HTML_THROW_EXCEPTION_WHEN_CLOSES, /** If <tt>true</tt>, then treat <tt>__parent__</tt> and <tt>__proto__</tt> as special properties. */ @BrowserFeature(@WebBrowser(IE)) Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLBodyElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLBodyElement.java 2014-03-19 19:13:17 UTC (rev 9191) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLBodyElement.java 2014-03-20 18:44:27 UTC (rev 9192) @@ -206,7 +206,7 @@ */ @JsxSetter @Override - public void setOuterHTML(final String value) { + public void setOuterHTML(final Object value) { if (getBrowserVersion().hasFeature(JS_OUTER_HTML_BODY_HEAD_READONLY)) { throw Context.reportRuntimeError("outerHTML is read-only for tag 'body'"); } 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 2014-03-19 19:13:17 UTC (rev 9191) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElement.java 2014-03-20 18:44:27 UTC (rev 9192) @@ -34,7 +34,8 @@ 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_THROW_EXCEPTION_WHEN_CLOSES; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_OUTER_HTML_THROW_EXCEPTION_WHEN_CLOSES; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_OUTER_HTML_NULL_AS_STRING; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_PREFIX_RETURNS_EMPTY_WHEN_UNDEFINED; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_SET_ATTRIBUTE_SUPPORTS_EVENT_HANDLERS; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_WIDTH_HEIGHT_ACCEPTS_ARBITRARY_VALUES; @@ -1036,11 +1037,22 @@ * @param value the new value for replacing this element */ @JsxSetter - public void setOuterHTML(final String value) { + public void setOuterHTML(final Object value) { final DomNode domNode = getDomNodeOrDie(); + + if (value == null && !getBrowserVersion().hasFeature(JS_OUTER_HTML_NULL_AS_STRING)) { + domNode.remove(); + return; + } + final String valueStr = Context.toString(value); + if (valueStr.isEmpty()) { + domNode.remove(); + return; + } + final DomNode parent = domNode.getParentNode(); + final DomNode nextSibling = domNode.getNextSibling(); - domNode.remove(); final DomNode target; @@ -1057,14 +1069,14 @@ final DomNode proxyDomNode = new ProxyDomNode(target.getPage(), target, append) { @Override public DomNode appendChild(final org.w3c.dom.Node node) { - if (getBrowserVersion().hasFeature(JS_OUTER_THROW_EXCEPTION_WHEN_CLOSES) + if (getBrowserVersion().hasFeature(JS_OUTER_HTML_THROW_EXCEPTION_WHEN_CLOSES) && node instanceof DomElement) { final String parentName = parent.getNodeName().toUpperCase(Locale.ENGLISH); final short[] closes = HTMLElements.getElement(node.getNodeName()).closes; if (closes != null) { for (final short close : closes) { if (HTMLElements.getElement(close).name.equals(parentName)) { - throw Context.reportRuntimeError("outerHTML can not set '" + value + throw Context.reportRuntimeError("outerHTML can not set '" + valueStr + "' while its parent is " + domNode.getParentNode()); } } @@ -1074,7 +1086,7 @@ return super.appendChild(node); } }; - parseHtmlSnippet(proxyDomNode, value); + parseHtmlSnippet(proxyDomNode, valueStr); } /** 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 2014-03-19 19:13:17 UTC (rev 9191) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLFrameSetElement.java 2014-03-20 18:44:27 UTC (rev 9192) @@ -109,7 +109,7 @@ */ @JsxSetter @Override - public void setOuterHTML(final String value) { + public void setOuterHTML(final Object value) { throw Context.reportRuntimeError("outerHTML is read-only for tag 'frameset'"); } 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 2014-03-19 19:13:17 UTC (rev 9191) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLHeadElement.java 2014-03-20 18:44:27 UTC (rev 9192) @@ -38,7 +38,7 @@ */ @JsxSetter @Override - public void setOuterHTML(final String value) { + public void setOuterHTML(final Object value) { if (getBrowserVersion().hasFeature(JS_OUTER_HTML_BODY_HEAD_READONLY)) { throw Context.reportRuntimeError("outerHTML is read-only for tag 'html'"); } 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 2014-03-19 19:13:17 UTC (rev 9191) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLHtmlElement.java 2014-03-20 18:44:27 UTC (rev 9192) @@ -81,7 +81,7 @@ */ @JsxSetter @Override - public void setOuterHTML(final String value) { + public void setOuterHTML(final Object value) { throw Context.reportRuntimeError("outerHTML is read-only for tag 'html'"); } Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLTableCaptionElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLTableCaptionElement.java 2014-03-19 19:13:17 UTC (rev 9191) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLTableCaptionElement.java 2014-03-20 18:44:27 UTC (rev 9192) @@ -99,7 +99,7 @@ */ @JsxSetter @Override - public void setOuterHTML(final String value) { + public void setOuterHTML(final Object value) { throw Context.reportRuntimeError("outerHTML is read-only for tag 'caption'"); } } Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLTableCellElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLTableCellElement.java 2014-03-19 19:13:17 UTC (rev 9191) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLTableCellElement.java 2014-03-20 18:44:27 UTC (rev 9192) @@ -343,7 +343,7 @@ */ @JsxSetter @Override - public void setOuterHTML(final String value) { + public void setOuterHTML(final Object value) { throw Context.reportRuntimeError("outerHTML is read-only for tag '" + getDomNodeOrDie().getTagName() + "'"); } 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 2014-03-19 19:13:17 UTC (rev 9191) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLTableColElement.java 2014-03-20 18:44:27 UTC (rev 9192) @@ -115,7 +115,7 @@ */ @JsxSetter @Override - public void setOuterHTML(final String value) { + public void setOuterHTML(final Object value) { throw Context.reportRuntimeError("outerHTML is read-only for tag '" + getDomNodeOrDie().getNodeName() + "'"); } 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 2014-03-19 19:13:17 UTC (rev 9191) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLTableRowElement.java 2014-03-20 18:44:27 UTC (rev 9192) @@ -199,7 +199,7 @@ */ @JsxSetter @Override - public void setOuterHTML(final String value) { + public void setOuterHTML(final Object value) { throw Context.reportRuntimeError("outerHTML is read-only for tag 'tr'"); } 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 2014-03-19 19:13:17 UTC (rev 9191) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLTableSectionElement.java 2014-03-20 18:44:27 UTC (rev 9192) @@ -129,7 +129,7 @@ */ @JsxSetter @Override - public void setOuterHTML(final String value) { + public void setOuterHTML(final Object value) { throw Context.reportRuntimeError("outerHTML is read-only for tag '" + getDomNodeOrDie().getNodeName() + "'"); } 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 2014-03-19 19:13:17 UTC (rev 9191) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElementTest.java 2014-03-20 18:44:27 UTC (rev 9192) @@ -1092,12 +1092,61 @@ } /** + * Test setting outerHTML to null. + * @throws Exception if the test fails + */ + @Test + @Alerts(DEFAULT = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = ", "Childs: 0" }, + IE11 = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = null", "Childs: 1" }, + IE8 = { "Old = <SPAN id=innerNode>Old outerHTML</SPAN>", "New = null", "Childs: 1" }) + public void setOuterHTMLNull() throws Exception { + final String html = createPageForSetOuterHTML("div", null); + loadPageWithAlerts2(html); + } + + /** + * Test setting outerHTML to null. + * @throws Exception if the test fails + */ + @Test + @Alerts(DEFAULT = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = undefined", "Childs: 1" }, + IE8 = { "Old = <SPAN id=innerNode>Old outerHTML</SPAN>", "New = undefined", "Childs: 1" }) + public void setOuterHTMLUndefined() throws Exception { + final String html = createPageForSetOuterHTML("div", "undefined"); + loadPageWithAlerts2(html); + } + + /** + * Test setting outerHTML to ''. + * @throws Exception if the test fails + */ + @Test + @Alerts(DEFAULT = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = ", "Childs: 0" }, + IE8 = { "Old = <SPAN id=innerNode>Old outerHTML</SPAN>", "New = ", "Childs: 0" }) + public void setOuterHTMLEmpty() throws Exception { + final String html = createPageForSetOuterHTML("div", ""); + loadPageWithAlerts2(html); + } + + /** + * Test setting outerHTML to ''. + * @throws Exception if the test fails + */ + @Test + @Alerts(DEFAULT = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = ", "Childs: 1" }, + IE8 = { "Old = <SPAN id=innerNode>Old outerHTML</SPAN>", "New = ", "Childs: 0" }) + public void setOuterHTMLBlank() throws Exception { + final String html = createPageForSetOuterHTML("div", " "); + loadPageWithAlerts2(html); + } + + /** * Test setting <code>outerHTML</code> of a <code>div</code> (block) to a text. * @throws Exception if the test fails */ @Test - @Alerts(DEFAULT = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = New cell value" }, - IE8 = { "Old = <SPAN id=innerNode>Old outerHTML</SPAN>", "New = New cell value" }) + @Alerts(DEFAULT = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = New cell value", "Childs: 1" }, + IE8 = { "Old = <SPAN id=innerNode>Old outerHTML</SPAN>", "New = New cell value", "Childs: 1" }) public void setOuterHTMLAddTextToBlock() throws Exception { final String html = createPageForSetOuterHTML("div", "New cell value"); loadPageWithAlerts2(html); @@ -1108,8 +1157,8 @@ * @throws Exception if the test fails */ @Test - @Alerts(DEFAULT = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = New cell value" }, - IE8 = { "Old = <SPAN id=innerNode>Old outerHTML</SPAN>", "New = New cell value" }) + @Alerts(DEFAULT = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = New cell value", "Childs: 1" }, + IE8 = { "Old = <SPAN id=innerNode>Old outerHTML</SPAN>", "New = New cell value", "Childs: 1" }) public void setOuterHTMLAddTextToInline() throws Exception { final String html = createPageForSetOuterHTML("span", "New cell value"); loadPageWithAlerts2(html); @@ -1120,8 +1169,8 @@ * @throws Exception if the test fails */ @Test - @Alerts(DEFAULT = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = <div>test</div>" }, - IE8 = { "Old = <SPAN id=innerNode>Old outerHTML</SPAN>", "New = <DIV>test</DIV>" }) + @Alerts(DEFAULT = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = <div>test</div>", "Childs: 1" }, + IE8 = { "Old = <SPAN id=innerNode>Old outerHTML</SPAN>", "New = <DIV>test</DIV>", "Childs: 1" }) public void setOuterHTMLAddBlockToBlock() throws Exception { final String html = createPageForSetOuterHTML("div", "<div>test</div>"); loadPageWithAlerts2(html); @@ -1132,8 +1181,8 @@ * @throws Exception if the test fails */ @Test - @Alerts(DEFAULT = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = <div>test</div>" }, - IE8 = { "Old = <SPAN id=innerNode>Old outerHTML</SPAN>", "New = <DIV>test</DIV>" }) + @Alerts(DEFAULT = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = <div>test</div>", "Childs: 1" }, + IE8 = { "Old = <SPAN id=innerNode>Old outerHTML</SPAN>", "New = <DIV>test</DIV>", "Childs: 1" }) public void setOuterHTMLAddBlockToInline() throws Exception { final String html = createPageForSetOuterHTML("span", "<div>test</div>"); loadPageWithAlerts2(html); @@ -1144,8 +1193,8 @@ * @throws Exception if the test fails */ @Test - @Alerts(DEFAULT = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = <span>test</span>" }, - IE8 = { "Old = <SPAN id=innerNode>Old outerHTML</SPAN>", "New = <SPAN>test</SPAN>" }) + @Alerts(DEFAULT = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = <span>test</span>", "Childs: 1" }, + IE8 = { "Old = <SPAN id=innerNode>Old outerHTML</SPAN>", "New = <SPAN>test</SPAN>", "Childs: 1" }) public void setOuterHTMLAddInlineToInline() throws Exception { final String html = createPageForSetOuterHTML("span", "<span>test</span>"); loadPageWithAlerts2(html); @@ -1156,8 +1205,8 @@ * @throws Exception if the test fails */ @Test - @Alerts(DEFAULT = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = <span>test</span>" }, - IE8 = { "Old = <SPAN id=innerNode>Old outerHTML</SPAN>", "New = <SPAN>test</SPAN>" }) + @Alerts(DEFAULT = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = <span>test</span>", "Childs: 1" }, + IE8 = { "Old = <SPAN id=innerNode>Old outerHTML</SPAN>", "New = <SPAN>test</SPAN>", "Childs: 1" }) public void setOuterHTMLAddInlineToBlock() throws Exception { final String html = createPageForSetOuterHTML("div", "<span>test</span>"); loadPageWithAlerts2(html); @@ -1168,8 +1217,8 @@ * @throws Exception if the test fails */ @Test - @Alerts(DEFAULT = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = <br>" }, - IE8 = { "Old = <SPAN id=innerNode>Old outerHTML</SPAN>", "New = <BR>" }) + @Alerts(DEFAULT = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = <br>", "Childs: 1" }, + IE8 = { "Old = <SPAN id=innerNode>Old outerHTML</SPAN>", "New = <BR>", "Childs: 1" }) public void setOuterHTMLAddEmpty() throws Exception { final String html = createPageForSetOuterHTML("div", "<br>"); loadPageWithAlerts2(html); @@ -1222,9 +1271,9 @@ */ @Test @Alerts(DEFAULT = { "Old = <span id=\"innerNode\">Old outerHTML</span>", - "New = <div>test</div>" }, + "New = <div>test</div>", "Childs: 1" }, CHROME = { "Old = <span id=\"innerNode\">Old outerHTML</span>", - "New = <span id=\"innerNode\">Old outerHTML</span>" }, + "New = <span id=\"innerNode\">Old outerHTML</span>", "Childs: 1" }, IE8 = { "Old = <SPAN id=innerNode>Old outerHTML</SPAN>", "exception" }) public void setOuterHTMLAddBlockToParagraph() throws Exception { final String html = createPageForSetOuterHTML("p", "<div>test</div>"); @@ -1238,9 +1287,9 @@ */ @Test @Alerts(DEFAULT = { "Old = <span id=\"innerNode\">Old outerHTML</span>", - "New = <p>test</p>" }, + "New = <p>test</p>", "Childs: 1" }, CHROME = { "Old = <span id=\"innerNode\">Old outerHTML</span>", - "New = <span id=\"innerNode\">Old outerHTML</span>" }, + "New = <span id=\"innerNode\">Old outerHTML</span>", "Childs: 1" }, IE8 = { "Old = <SPAN id=innerNode>Old outerHTML</SPAN>", "exception" }) public void setOuterHTMLAddParagraphToParagraph() throws Exception { final String html = createPageForSetOuterHTML("p", "<p>test</p>"); @@ -1253,8 +1302,8 @@ * @throws Exception if the test fails */ @Test - @Alerts(DEFAULT = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = <p>test</p>" }, - IE8 = { "Old = <SPAN id=innerNode>Old outerHTML</SPAN>", "New = <P>test</P>" }) + @Alerts(DEFAULT = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = <p>test</p>", "Childs: 1" }, + IE8 = { "Old = <SPAN id=innerNode>Old outerHTML</SPAN>", "New = <P>test</P>", "Childs: 1" }) public void setOuterHTMLAddUnclosedParagraph() throws Exception { final String html = createPageForSetOuterHTML("div", "<p>test"); loadPageWithAlerts2(html); @@ -1267,9 +1316,9 @@ */ @Test @Alerts(DEFAULT = { "Old = <span id=\"innerNode\">Old outerHTML</span>", - "New = <a>test</a>" }, + "New = <a>test</a>", "Childs: 1" }, CHROME = { "Old = <span id=\"innerNode\">Old outerHTML</span>", - "New = <span id=\"innerNode\">Old outerHTML</span>" }, + "New = <span id=\"innerNode\">Old outerHTML</span>", "Childs: 1" }, IE8 = { "Old = <SPAN id=innerNode>Old outerHTML</SPAN>", "exception" }) public void setOuterHTMLAddAnchorToAnchor() throws Exception { final String html = createPageForSetOuterHTML("a", "<a>test</a>"); @@ -1281,8 +1330,8 @@ * @throws Exception if the test fails */ @Test - @Alerts(DEFAULT = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = <div></div>" }, - IE8 = { "Old = <SPAN id=innerNode>Old outerHTML</SPAN>", "New = <DIV></DIV>" }) + @Alerts(DEFAULT = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = <div></div>", "Childs: 1" }, + IE8 = { "Old = <SPAN id=innerNode>Old outerHTML</SPAN>", "New = <DIV></DIV>", "Childs: 1" }) public void setOuterHTMLAddSelfClosingBlock() throws Exception { final String html = createPageForSetOuterHTML("div", "<div/>"); loadPageWithAlerts2(html); @@ -1294,10 +1343,11 @@ */ @Test @Alerts(DEFAULT = { "Old = <span id=\"innerNode\">Old outerHTML</span>", - "New = <div><div></div></div>" }, - CHROME = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = <div></div><div></div>" }, - IE8 = { "Old = <SPAN id=innerNode>Old outerHTML</SPAN>", "New = <DIV></DIV><DIV></DIV>" }) - @NotYetImplemented({ FF17, FF24 }) + "New = <div><div></div></div>", "Childs: 1" }, + CHROME = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = <div></div><div></div>", + "Childs: 1" }, + IE8 = { "Old = <SPAN id=innerNode>Old outerHTML</SPAN>", "New = <DIV></DIV><DIV></DIV>", "Childs: 1" }) + @NotYetImplemented({ FF17, FF24, IE8 }) public void setOuterHTMLAddMultipleSelfClosingBlock() throws Exception { final String html = createPageForSetOuterHTML("div", "<div/><div>"); loadPageWithAlerts2(html); @@ -1308,8 +1358,8 @@ * @throws Exception if the test fails */ @Test - @Alerts(DEFAULT = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = <span></span>" }, - IE8 = { "Old = <SPAN id=innerNode>Old outerHTML</SPAN>", "New = <SPAN></SPAN>" }) + @Alerts(DEFAULT = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = <span></span>", "Childs: 1" }, + IE8 = { "Old = <SPAN id=innerNode>Old outerHTML</SPAN>", "New = <SPAN></SPAN>", "Childs: 1" }) public void setOuterHTMLAddSelfClosingInline() throws Exception { final String html = createPageForSetOuterHTML("div", "<span/>"); loadPageWithAlerts2(html); @@ -1320,14 +1370,21 @@ * @throws Exception if the test fails */ @Test - @Alerts(DEFAULT = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = <br>" }, - IE8 = { "Old = <SPAN id=innerNode>Old outerHTML</SPAN>", "New = <BR>" }) + @Alerts(DEFAULT = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = <br>", "Childs: 1" }, + IE8 = { "Old = <SPAN id=innerNode>Old outerHTML</SPAN>", "New = <BR>", "Childs: 1" }) public void setOuterHTMLAddSelfClosingEmpty() throws Exception { final String html = createPageForSetOuterHTML("div", "<br/>"); loadPageWithAlerts2(html); } private String createPageForSetOuterHTML(final String nodeTag, final String newValue) { + String newVal = "null"; + if ("undefined".equals(newValue)) { + newVal = "undefined"; + } + else if (newValue != null) { + newVal = "'" + newValue + "'"; + } return "<html>\n" + "<head>\n" + " <title>test</title>\n" @@ -1337,8 +1394,9 @@ + " var innerNode = document.getElementById('innerNode');\n" + " alert('Old = ' + myNode.innerHTML);\n" + " try {\n" - + " innerNode.outerHTML = '" + newValue + "';\n" + + " innerNode.outerHTML = " + newVal + ";\n" + " alert('New = ' + myNode.innerHTML);\n" + + " alert('Childs: ' + myNode.childNodes.length);\n" + " } catch(e) {alert('exception'); }\n" + " }\n" + " </script>\n" |