From f04e0160036c08c6268d264c23d9c9626df69cbd Mon Sep 17 00:00:00 2001 From: nabedge Date: Wed, 13 Apr 2016 23:47:54 +0900 Subject: [PATCH] fix #11 --- src/main/java/org/mixer2/Mixer2Engine.java | 20 +++++ .../java/org/mixer2/issues/Issue0011.java | 86 +++++++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 src/test/java/org/mixer2/issues/Issue0011.java diff --git a/src/main/java/org/mixer2/Mixer2Engine.java b/src/main/java/org/mixer2/Mixer2Engine.java index a2c8158..24bdbe4 100644 --- a/src/main/java/org/mixer2/Mixer2Engine.java +++ b/src/main/java/org/mixer2/Mixer2Engine.java @@ -32,6 +32,7 @@ import org.apache.commons.logging.LogFactory; import org.mixer2.jaxb.exception.Mixer2JAXBException; import org.mixer2.jaxb.xhtml.Html; +import org.mixer2.jaxb.xhtml.Iframe; import org.mixer2.jaxb.xhtml.Script; import org.mixer2.jaxb.xhtml.Textarea; import org.mixer2.xhtml.AbstractJaxb; @@ -239,6 +240,13 @@ public void saveToStringWriter(T tag, script.setContent(" "); } } + + // add one white space into iframe tag having empty content. + for (Iframe iframe : tag.getDescendants(Iframe.class)) { + if (iframe.getContent() == null || iframe.getContent().size() < 1) { + iframe.getContent().add(" "); + } + } // add one line break into textarea tag // having empty content. @@ -399,6 +407,17 @@ protected StringBuilder inputStreamToStringBuilder(InputStream inputStream) return stringBuilder; } + protected StringBuilder replaceIframeEndTag(StringBuilder sb) { + if (sb == null) { + return null; + } + String patternStr = ""; + String replaceStr = " "; + Pattern ptn = Pattern.compile(patternStr, Pattern.CASE_INSENSITIVE); + String result = ptn.matcher(sb).replaceAll(replaceStr); + return new StringBuilder(result); + } + /** *

* unmarshal from html string to html object. @@ -410,6 +429,7 @@ protected StringBuilder inputStreamToStringBuilder(InputStream inputStream) */ protected Html unmarshal(StringBuilder sb) throws JAXBException { Html html = null; + sb = replaceIframeEndTag(sb); sb = removeDoctypeDeclaration(sb); sb = replaceNamedEntity(sb); StringReader stringReader = new StringReader(sb.toString()); diff --git a/src/test/java/org/mixer2/issues/Issue0011.java b/src/test/java/org/mixer2/issues/Issue0011.java new file mode 100644 index 0000000..6d2fffe --- /dev/null +++ b/src/test/java/org/mixer2/issues/Issue0011.java @@ -0,0 +1,86 @@ +package org.mixer2.issues; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.Test; +import org.mixer2.Mixer2Engine; +import org.mixer2.jaxb.xhtml.*; +import org.mixer2.xhtml.Mixer2EngineSingleton; +import org.mixer2.xhtml.TagCreator; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; + +/** + * see https://github.com/nabedge/mixer2/issues/11 + * + * @author nabedge + * + */ +public class Issue0011 { + + private static Log log = LogFactory.getLog(Issue0011.class); + + private static Mixer2Engine m2e = Mixer2EngineSingleton.getInstance(); + + @Test + public void test() throws Exception { + StringBuilder sb = new StringBuilder(); + sb.append(""); + sb.append(""); + sb.append("test"); + sb.append(""); + sb.append(""); + sb.append(""); + sb.append(""); + sb.append(""); + String str = sb.toString(); + Html html = m2e.loadHtmlTemplate(str); + String result = m2e.saveToString(html); + //log.info(result); + assertThat(result.contains(""), is(true)); + } + + @Test + public void test2() throws Exception { + StringBuilder sb = new StringBuilder(); + sb.append(""); + sb.append(""); + sb.append("test"); + sb.append(""); + sb.append(""); + sb.append(""); + sb.append(""); + sb.append(""); + String str = sb.toString(); + Html html = m2e.loadHtmlTemplate(str); + String result = m2e.saveToString(html); + //log.info(result); + assertThat(result.contains(""), is(true)); + } + + @Test + public void test3() throws Exception { + Iframe iframe = TagCreator.iframe(); + String iframeStr = m2e.saveToString(iframe); + //log.info(iframeStr); + assertThat(iframeStr.matches(""), is(true)); + // assertThat(m2e.saveToString(iframe).matches(""), is(true)); + // assertThat(m2e.saveToString(iframe).matches("