From: <rb...@us...> - 2013-02-02 19:22:21
|
Revision: 8086 http://sourceforge.net/p/htmlunit/code/8086 Author: rbri Date: 2013-02-02 19:22:17 +0000 (Sat, 02 Feb 2013) Log Message: ----------- tescase for script.innerHTML added (including a minor output fix for IE) Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElement.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLScriptElementTest.java 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-02-02 18:06:54 UTC (rev 8085) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElement.java 2013-02-02 19:22:17 UTC (rev 8086) @@ -34,6 +34,7 @@ import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_CLIENT_LEFT_TOP_ZERO; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_ELEMENT_EXTENT_WITHOUT_PADDING; 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_SET_ATTRIBUTE_CONSIDERS_ATTR_FOR_CLASS_AS_REAL; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.QUERYSELECTORALL_NOT_IN_QUIRKS; @@ -853,8 +854,13 @@ final StringBuilder buf = new StringBuilder(); final String tagName = getTagName(); - final boolean isPlain = "SCRIPT".equals(tagName) || "STYLE".equals(tagName); + boolean isPlain = "SCRIPT".equals(tagName); + if(isPlain && getBrowserVersion().hasFeature(JS_NATIVE_FUNCTION_TOSTRING_NEW_LINE)) { + buf.append("\r\n"); + } + isPlain = isPlain || "STYLE".equals(tagName); + // we can't rely on DomNode.asXml because it adds indentation and new lines printChildren(buf, getDomNodeOrDie(), !isPlain); return buf.toString(); Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLScriptElementTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLScriptElementTest.java 2013-02-02 18:06:54 UTC (rev 8085) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLScriptElementTest.java 2013-02-02 19:22:17 UTC (rev 8086) @@ -35,6 +35,7 @@ * @author Ahmed Ashour * @author Marc Guillemot * @author Frank Danek + * @author Ronald Brill */ @RunWith(BrowserRunner.class) public class HTMLScriptElementTest extends WebDriverTestCase { @@ -868,4 +869,34 @@ assertEquals(getExpectedAlerts()[0], webDriver.findElement(By.id("myTextarea")).getAttribute("value")); } + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(DEFAULT = { "function foo() { return a > b}", "function mce() { return a > b}" }, + IE = { "\r\nfunction foo() { return a > b}", "function mce() { return a > b}" }) + public void innerHtml() throws Exception { + final String html + = "<html><head><title>foo</title>\n" + + + "<script id='script1'>function foo() { return a > b}</script>\n" + + + "<script>\n" + + "function doTest() {\n" + + " script = document.getElementById('script1');\n" + + " alert(script.innerHTML);\n" + + + " script = document.getElementById('mce');\n" + + " alert(script.innerHTML);\n" + + + "}\n" + + "</script>\n" + + "</head><body onload='doTest()'>\n" + // this is done by TinyMce + + "<script>document.write('<mce:script id=\"mce\">function mce() { return a > b}</mce:script>');</script>\n" + + + "</body></html>"; + + loadPageWithAlerts2(html); + } } |