diff --git a/src/changes/changes.xml b/src/changes/changes.xml index fe28c01412..cb2eb20738 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -8,6 +8,10 @@ + + asXml(): emit formatting line breaks only where the document contains whitespace; + adjacent elements no longer gain a fabricated line break that renders as a space. + Many, many javadoc improvements. diff --git a/src/main/java/org/htmlunit/html/DomElement.java b/src/main/java/org/htmlunit/html/DomElement.java index e3daafa9a1..9178034dd4 100644 --- a/src/main/java/org/htmlunit/html/DomElement.java +++ b/src/main/java/org/htmlunit/html/DomElement.java @@ -362,7 +362,7 @@ protected boolean printXml(final String indent, final boolean tagBefore, final P if (hasChildren) { printWriter.print(">"); - final boolean tag = printChildrenAsXml(indent, true, printWriter); + final boolean tag = printChildrenAsXml(indent, false, printWriter); if (tag) { printWriter.print("\r\n"); printWriter.print(indent); @@ -380,7 +380,7 @@ else if (isEmptyXmlTagExpanded()) { printWriter.print("/>"); } - return true; + return false; } /** diff --git a/src/main/java/org/htmlunit/html/DomText.java b/src/main/java/org/htmlunit/html/DomText.java index 2f27a88462..2dc140b231 100644 --- a/src/main/java/org/htmlunit/html/DomText.java +++ b/src/main/java/org/htmlunit/html/DomText.java @@ -141,6 +141,9 @@ protected boolean printXml(final String indent, final boolean tagBefore, final P printWriter.print(data); tag = false; } + else if (data != null && !data.isEmpty()) { + tag = true; + } return printChildrenAsXml(indent, tag, printWriter); } diff --git a/src/test/java/org/htmlunit/WebClient8Test.java b/src/test/java/org/htmlunit/WebClient8Test.java index 195cd6b258..3b4f0ecb95 100644 --- a/src/test/java/org/htmlunit/WebClient8Test.java +++ b/src/test/java/org/htmlunit/WebClient8Test.java @@ -59,15 +59,45 @@ public void asXml() throws Exception { try (WebClient webClient = new WebClient(getBrowserVersion(), false, null, -1)) { final HtmlPage page = loadPage(webClient, html, null, URL_FIRST); - assertEquals("\r\n\r\n" - + " \r\n" - + " foo\r\n" - + " \r\n" - + " \r\n" - + "
Hello HtmlUnit\r\n" - + "
\r\n" - + " \r\n" - + "", + assertEquals("\r\n" + + "foo" + + "
Hello HtmlUnit
", + page.asXml()); + } + } + + /** + * @throws Exception if something goes wrong + */ + @Test + public void asXmlNoWhitespaceBetweenAdjacentElements() throws Exception { + final String html = DOCTYPE_HTML + + "foo" + + "
ab
"; + + try (WebClient webClient = new WebClient(getBrowserVersion(), false, null, -1)) { + final HtmlPage page = loadPage(webClient, html, null, URL_FIRST); + assertEquals("\r\n" + + "foo" + + "
ab
", + page.asXml()); + } + } + + /** + * @throws Exception if something goes wrong + */ + @Test + public void asXmlWhitespaceOnlyTextBetweenElements() throws Exception { + final String html = DOCTYPE_HTML + + "foo" + + "
a b
"; + + try (WebClient webClient = new WebClient(getBrowserVersion(), false, null, -1)) { + final HtmlPage page = loadPage(webClient, html, null, URL_FIRST); + assertEquals("\r\n" + + "foo" + + "
a\r\n b
", page.asXml()); } } diff --git a/src/test/java/org/htmlunit/html/HtmlFormTest.java b/src/test/java/org/htmlunit/html/HtmlFormTest.java index 93d27f15aa..8ac393446e 100644 --- a/src/test/java/org/htmlunit/html/HtmlFormTest.java +++ b/src/test/java/org/htmlunit/html/HtmlFormTest.java @@ -1199,13 +1199,8 @@ public void asXml_emptyTag() throws Exception { final String xml = "\r\n" - + "\r\n" - + " \r\n" - + " \r\n" - + "
\r\n" - + "
test
\r\n" - + " \r\n" - + ""; + + "\r\n
\r\n
test
\r\n" + + " "; final HtmlPage page = loadPage(html); assertEquals(xml, page.asXml()); diff --git a/src/test/java/org/htmlunit/html/HtmlNoScript2Test.java b/src/test/java/org/htmlunit/html/HtmlNoScript2Test.java index 0645c5d75b..5a54191440 100644 --- a/src/test/java/org/htmlunit/html/HtmlNoScript2Test.java +++ b/src/test/java/org/htmlunit/html/HtmlNoScript2Test.java @@ -34,8 +34,7 @@ public class HtmlNoScript2Test extends SimpleWebTestCase { */ @Test @Alerts("\r\n" - + " \r\n" - + "") + + " ") public void asXml_jsEnabled() throws Exception { final String html = DOCTYPE_HTML + "\n" @@ -57,10 +56,7 @@ public void asXml_jsDisabled() throws Exception { + ""; final String expected = "\r\n" - + " \r\n" - + ""; + + " "; final WebClient client = getWebClient(); client.getOptions().setJavaScriptEnabled(false); diff --git a/src/test/java/org/htmlunit/html/HtmlOrderedListTest.java b/src/test/java/org/htmlunit/html/HtmlOrderedListTest.java index e840b46f1b..994daacb8d 100644 --- a/src/test/java/org/htmlunit/html/HtmlOrderedListTest.java +++ b/src/test/java/org/htmlunit/html/HtmlOrderedListTest.java @@ -70,12 +70,8 @@ public void asXml() throws Exception { // assertEquals("
    ", element.asXml()); assertEquals("\r\n" - + "\r\n" - + " \r\n" - + " \r\n" - + "
      \n" + + "\r\n
        \n" + "foo\n" - + "\r\n" - + "", page.asXml()); + + "", page.asXml()); } } diff --git a/src/test/java/org/htmlunit/html/HtmlPageTest.java b/src/test/java/org/htmlunit/html/HtmlPageTest.java index 9835fa088b..b874be1bb3 100644 --- a/src/test/java/org/htmlunit/html/HtmlPageTest.java +++ b/src/test/java/org/htmlunit/html/HtmlPageTest.java @@ -1042,14 +1042,9 @@ public void asXml_noscript() throws Exception { + ""; final String expected = "\r\n" - + "\r\n" - + " \r\n" - + " \r\n" - + " \r\n" - + " \r\n" - + ""; + + ""; final HtmlPage page = loadPage(html); assertEquals(expected, page.asXml()); diff --git a/src/test/java/org/htmlunit/html/HtmlScriptTest.java b/src/test/java/org/htmlunit/html/HtmlScriptTest.java index 9e48f23dfe..dac58b871e 100644 --- a/src/test/java/org/htmlunit/html/HtmlScriptTest.java +++ b/src/test/java/org/htmlunit/html/HtmlScriptTest.java @@ -110,20 +110,13 @@ public void asXml() throws Exception { // asXml() should be reusable final String xml = page.asXml(); assertEquals("\r\n" - + "\r\n" - + " \r\n" - + " foo\r\n" - + " \r\n" - + " \r\n" - + " \r\n" - + " \r\n" - + "", + + " ", xml); loadPageWithAlerts(xml); diff --git a/src/test/java/org/htmlunit/html/HtmlUnorderedList2Test.java b/src/test/java/org/htmlunit/html/HtmlUnorderedList2Test.java index a9743b414b..d53d7cd115 100644 --- a/src/test/java/org/htmlunit/html/HtmlUnorderedList2Test.java +++ b/src/test/java/org/htmlunit/html/HtmlUnorderedList2Test.java @@ -68,12 +68,8 @@ public void asXml() throws Exception { assertEquals("", element.asXml()); assertEquals("\r\n" - + "\r\n" - + " \r\n" - + " \r\n" - + " \n" + + "\r\n \n" + "foo\n" - + "\r\n" - + "", page.asXml()); + + "", page.asXml()); } }