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));
+ 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));
+ }
+
+ @Test
+ public void test4() throws Exception {
+ Iframe iframe = TagCreator.iframe();
+ iframe.setId("foo");
+ String iframeStr = m2e.saveToString(iframe);
+ assertThat(iframeStr.matches(""), is(true));
+ // assertThat(m2e.saveToString(iframe).matches(""), is(true));
+ }
+
+}