summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/com/isode/stroke/serializer/xml/XMLElement.java10
-rw-r--r--src/com/isode/stroke/serializer/xml/XMLTextNode.java8
-rw-r--r--test/com/isode/stroke/serializer/xml/XMLElementTest.java66
3 files changed, 75 insertions, 9 deletions
diff --git a/src/com/isode/stroke/serializer/xml/XMLElement.java b/src/com/isode/stroke/serializer/xml/XMLElement.java
index 43abfea..9512c85 100644
--- a/src/com/isode/stroke/serializer/xml/XMLElement.java
+++ b/src/com/isode/stroke/serializer/xml/XMLElement.java
@@ -57,11 +57,11 @@ public class XMLElement implements XMLNode {
public void setAttribute(String attribute, String value) {
String escapedValue = value;
- escapedValue.replaceAll("&", "&");
- escapedValue.replaceAll("<", "&lt;");
- escapedValue.replaceAll(">", "&gt;");
- escapedValue.replaceAll("'", "&apos;");
- escapedValue.replaceAll("\"", "&quot;");
+ escapedValue = escapedValue.replaceAll("&", "&amp;");
+ escapedValue = escapedValue.replaceAll("<", "&lt;");
+ escapedValue = escapedValue.replaceAll(">", "&gt;");
+ escapedValue = escapedValue.replaceAll("'", "&apos;");
+ escapedValue = escapedValue.replaceAll("\"", "&quot;");
attributes_.put(attribute, escapedValue);
}
diff --git a/src/com/isode/stroke/serializer/xml/XMLTextNode.java b/src/com/isode/stroke/serializer/xml/XMLTextNode.java
index b6940c4..fa1881e 100644
--- a/src/com/isode/stroke/serializer/xml/XMLTextNode.java
+++ b/src/com/isode/stroke/serializer/xml/XMLTextNode.java
@@ -10,13 +10,13 @@ package com.isode.stroke.serializer.xml;
public class XMLTextNode implements XMLNode {
- private final String text_;
+ private String text_;
public XMLTextNode(String text) {
text_ = text;
- text_.replaceAll("&", "&amp;"); // Should come first
- text_.replaceAll("<", "&lt;");
- text_.replaceAll(">", "&gt;");
+ text_ = text_.replaceAll("&", "&amp;"); // Should come first
+ text_ = text_.replaceAll("<", "&lt;");
+ text_ = text_.replaceAll(">", "&gt;");
}
public String serialize() {
diff --git a/test/com/isode/stroke/serializer/xml/XMLElementTest.java b/test/com/isode/stroke/serializer/xml/XMLElementTest.java
new file mode 100644
index 0000000..8377193
--- /dev/null
+++ b/test/com/isode/stroke/serializer/xml/XMLElementTest.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2012 Isode Limited, London, England.
+ * All rights reserved.
+ */
+/*
+ * Copyright (c) 2010 Remko Tronçon
+ * All rights reserved.
+ */
+package com.isode.stroke.serializer.xml;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class XMLElementTest {
+
+ @Test
+ public void testSerialize() {
+ XMLElement testling = new XMLElement("foo", "http://example.com");
+ testling.setAttribute("myatt", "myval");
+ XMLElement barElement = new XMLElement("bar");
+ barElement.addNode(new XMLTextNode("Blo"));
+ testling.addNode(barElement);
+ XMLElement bazElement = new XMLElement("baz");
+ bazElement.addNode(new XMLTextNode("Bli&</stream>"));
+ testling.addNode(bazElement);
+
+ String result = testling.serialize();
+ String expectedResult =
+ "<foo myatt=\"myval\" xmlns=\"http://example.com\">"
+ + "<bar>Blo</bar>"
+ + "<baz>Bli&amp;&lt;/stream&gt;</baz>"
+ + "</foo>";
+
+ assertEquals(expectedResult, result);
+ }
+
+ @Test
+ public void testSerialize_NoChildren() {
+ XMLElement testling = new XMLElement("foo", "http://example.com");
+
+ assertEquals("<foo xmlns=\"http://example.com\"/>", testling.serialize());
+ }
+
+ @Test
+ public void testSerialize_SpecialAttributeCharacters() {
+ XMLElement testling = new XMLElement("foo");
+ testling.setAttribute("myatt", "<\"'&>");
+
+ assertEquals("<foo myatt=\"&lt;&quot;&apos;&amp;&gt;\"/>", testling.serialize());
+ }
+
+ @Test
+ public void testSerialize_EmptyAttributeValue() {
+ XMLElement testling = new XMLElement("foo");
+ testling.setAttribute("myatt", "");
+
+ assertEquals("<foo myatt=\"\"/>", testling.serialize());
+ }
+}
+
+