Skip to content

Commit

Permalink
Added escaping test for maps
Browse files Browse the repository at this point in the history
  • Loading branch information
codemonstur committed Jun 18, 2024
1 parent e47307d commit ae2fa61
Show file tree
Hide file tree
Showing 5 changed files with 459 additions and 3 deletions.
2 changes: 1 addition & 1 deletion bobfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ packaging: jar
enablePreview: false
release: 19
dependencies:
- repository: org.objenesis:objenesis:3.3
- repository: org.objenesis:objenesis:3.4
- repository: junit:junit:4.13.2
scope: test
- repository: org.unitils:unitils-core:3.4.6
Expand Down
4 changes: 2 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

<groupId>com.github.codemonstur</groupId>
<artifactId>simplexml</artifactId>
<version>3.1.1</version>
<version>3.1.2</version>

<name>${project.groupId}:${project.artifactId}</name>
<description>A clean and simple XML parser, serializer, and deserializer.</description>
Expand Down Expand Up @@ -41,7 +41,7 @@
<maven.compiler.target>19</maven.compiler.target>
<maven.compiler.release>19</maven.compiler.release>

<version.library.objenesis>3.3</version.library.objenesis>
<version.library.objenesis>3.4</version.library.objenesis>
<version.library.junit>4.13.2</version.library.junit>
<version.library.unitils-core>3.4.6</version.library.unitils-core>
<version.library.commons-text>1.12.0</version.library.commons-text>
Expand Down
103 changes: 103 additions & 0 deletions src/test/java/unittests/EscapeMapTagIsKeyTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
package unittests;

import org.junit.Test;
import xmlparser.XmlParser;
import xmlparser.annotations.XmlMapTagIsKey;
import xmlparser.annotations.XmlMapWithAttributes;

import java.util.Map;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static xmlparser.XmlParser.newXmlParser;

public class EscapeMapTagIsKeyTest {

private final XmlParser parserDefault = new XmlParser();
private final XmlParser parserEncodeUTF8 = newXmlParser().shouldEncodeUTF8().build();

private static class PojoMap {
@XmlMapTagIsKey
private final Map<String, String> map;

private PojoMap(final Map<String, String> map) {
this.map = map;
}
}

@Test
public void serializeMapWithDangerousChars() {
final PojoMap inputPojo = new PojoMap(Map.of("key", "<>&\"'"));
final String expected = "<pojomap>\n" +
" <map>\n" +
" <key>&lt;&gt;&amp;&quot;&apos;</key>\n" +
" </map>\n" +
"</pojomap>\n";

final String actual = parserDefault.toXml(inputPojo);

assertNotNull("No serialization response", actual);
assertEquals("Invalid serialized output", expected, actual);
}

@Test
public void deserializeMapWithEscapedChars() {
final String inputXml = "<pojomap>\n" +
" <map>\n" +
" <key>&lt;&gt;&amp;&quot;&apos;</key>\n" +
" </map>\n" +
"</pojomap>\n";
final PojoMap expected = new PojoMap(Map.of("key", "<>&\"'"));

final PojoMap actual = parserDefault.fromXml(inputXml, PojoMap.class);

assertNotNull("No serialization response", actual);
assertEquals("Invalid serialized output", expected.map.get("key"), actual.map.get("key"));
}

@Test
public void serializeMapUTF8Characters() {
final PojoMap inputPojo = new PojoMap(Map.of("key", "ƑƟƠƄǠȒ"));
final String expected = "<pojomap>\n" +
" <map>\n" +
" <key>&#401;&#415;&#416;&#388;&#480;&#530;</key>\n" +
" </map>\n" +
"</pojomap>\n";

final String actual = parserEncodeUTF8.toXml(inputPojo);

assertNotNull("No serialization response", actual);
assertEquals("Invalid serialized output", expected, actual);
}

@Test
public void dontSerializeMapUTF8Characters() {
final PojoMap inputPojo = new PojoMap(Map.of("key", "ƑƟƠƄǠȒ"));
final String expected = "<pojomap>\n" +
" <map>\n" +
" <key>ƑƟƠƄǠȒ</key>\n" +
" </map>\n" +
"</pojomap>\n";

final String actual = parserDefault.toXml(inputPojo);

assertNotNull("No serialization response", actual);
assertEquals("Invalid serialized output", expected, actual);
}

@Test
public void deserializeMapUTF8Characters() {
final String inputXml = "<pojomap>\n" +
" <map>\n" +
" <key>&#401;&#415;&#416;&#388;&#480;&#530;</key>\n" +
" </map>\n" +
"</pojomap>\n";
final PojoMap expected = new PojoMap(Map.of("key", "ƑƟƠƄǠȒ"));

final PojoMap actual = parserEncodeUTF8.fromXml(inputXml, PojoMap.class);

assertNotNull("No serialization response", actual);
assertEquals("Invalid serialized output", expected.map.get("key"), actual.map.get("key"));
}

}
161 changes: 161 additions & 0 deletions src/test/java/unittests/EscapeMapWithAttributesTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
package unittests;

import org.junit.Test;
import xmlparser.XmlParser;
import xmlparser.annotations.XmlMapWithAttributes;
import xmlparser.annotations.XmlMapWithChildNodes;

import java.util.Map;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static xmlparser.XmlParser.newXmlParser;

public class EscapeMapWithAttributesTest {

private final XmlParser parserDefault = new XmlParser();
private final XmlParser parserEncodeUTF8 = newXmlParser().shouldEncodeUTF8().build();

private static class PojoMap {
@XmlMapWithAttributes(keyName = "key")
private final Map<String, String> map1;
@XmlMapWithAttributes(keyName = "key", valueName = "value")
private final Map<String, String> map2;

private PojoMap(final Map<String, String> map1, final Map<String, String> map2) {
this.map1 = map1;
this.map2 = map2;
}
}

@Test
public void serializeMap1WithDangerousChars() {
final PojoMap inputPojo = new PojoMap(Map.of("<>&\"'", "<>&\"'"), null);
final String expected = "<pojomap>\n" +
" <map1 key=\"&lt;&gt;&amp;&quot;&apos;\">&lt;&gt;&amp;&quot;&apos;</map1>\n" +
"</pojomap>\n";

final String actual = parserDefault.toXml(inputPojo);

assertNotNull("No serialization response", actual);
assertEquals("Invalid serialized output", expected, actual);
}

@Test
public void serializeMap2WithDangerousChars() {
final PojoMap inputPojo = new PojoMap(null, Map.of("<>&\"'", "<>&\"'"));
final String expected = "<pojomap>\n" +
" <map2 key=\"&lt;&gt;&amp;&quot;&apos;\" value=\"&lt;&gt;&amp;&quot;&apos;\" />\n" +
"</pojomap>\n";

final String actual = parserDefault.toXml(inputPojo);

assertNotNull("No serialization response", actual);
assertEquals("Invalid serialized output", expected, actual);
}

@Test
public void deserializeMap1WithEscapedChars() {
final String inputXml = "<pojomap>\n" +
" <map1 key=\"&lt;&gt;&amp;&quot;&apos;\">&lt;&gt;&amp;&quot;&apos;</map1>\n" +
"</pojomap>\n";
final PojoMap expected = new PojoMap(Map.of("<>&\"'", "<>&\"'"), null);

final PojoMap actual = parserDefault.fromXml(inputXml, PojoMap.class);

assertNotNull("No serialization response", actual);
assertEquals("Invalid serialized output", expected.map1.get("<>&\"'"), actual.map1.get("<>&\"'"));
}

@Test
public void deserializeMap2WithEscapedChars() {
final String inputXml = "<pojomap>\n" +
" <map2 key=\"&lt;&gt;&amp;&quot;&apos;\" value=\"&lt;&gt;&amp;&quot;&apos;\" />\n" +
"</pojomap>\n";
final PojoMap expected = new PojoMap(null, Map.of("<>&\"'", "<>&\"'"));

final PojoMap actual = parserDefault.fromXml(inputXml, PojoMap.class);

assertNotNull("No serialization response", actual);
assertEquals("Invalid serialized output", expected.map2.get("<>&\"'"), actual.map2.get("<>&\"'"));
}

@Test
public void serializeMap1UTF8Characters() {
final PojoMap inputPojo = new PojoMap(Map.of("ƑƟƠƄǠȒ", "ƑƟƠƄǠȒ"), null);
final String expected = "<pojomap>\n" +
" <map1 key=\"&#401;&#415;&#416;&#388;&#480;&#530;\">&#401;&#415;&#416;&#388;&#480;&#530;</map1>\n" +
"</pojomap>\n";

final String actual = parserEncodeUTF8.toXml(inputPojo);

assertNotNull("No serialization response", actual);
assertEquals("Invalid serialized output", expected, actual);
}

@Test
public void dontSerializeMap1UTF8Characters() {
final PojoMap inputPojo = new PojoMap(Map.of("ƑƟƠƄǠȒ", "ƑƟƠƄǠȒ"), null);
final String expected = "<pojomap>\n" +
" <map1 key=\"ƑƟƠƄǠȒ\">ƑƟƠƄǠȒ</map1>\n" +
"</pojomap>\n";

final String actual = parserDefault.toXml(inputPojo);

assertNotNull("No serialization response", actual);
assertEquals("Invalid serialized output", expected, actual);
}

@Test
public void deserializeMap1UTF8Characters() {
final String inputXml = "<pojomap>\n" +
" <map1 key=\"&#401;&#415;&#416;&#388;&#480;&#530;\">&#401;&#415;&#416;&#388;&#480;&#530;</map1>\n" +
"</pojomap>\n";
final PojoMap expected = new PojoMap(Map.of("ƑƟƠƄǠȒ", "ƑƟƠƄǠȒ"), null);

final PojoMap actual = parserEncodeUTF8.fromXml(inputXml, PojoMap.class);

assertNotNull("No serialization response", actual);
assertEquals("Invalid serialized output", expected.map1.get("ƑƟƠƄǠȒ"), actual.map1.get("ƑƟƠƄǠȒ"));
}

@Test
public void serializeMap2UTF8Characters() {
final PojoMap inputPojo = new PojoMap(null, Map.of("ƑƟƠƄǠȒ", "ƑƟƠƄǠȒ"));
final String expected = "<pojomap>\n" +
" <map2 key=\"&#401;&#415;&#416;&#388;&#480;&#530;\" value=\"&#401;&#415;&#416;&#388;&#480;&#530;\" />\n" +
"</pojomap>\n";

final String actual = parserEncodeUTF8.toXml(inputPojo);

assertNotNull("No serialization response", actual);
assertEquals("Invalid serialized output", expected, actual);
}

@Test
public void dontSerializeMap2UTF8Characters() {
final PojoMap inputPojo = new PojoMap(null, Map.of("ƑƟƠƄǠȒ", "ƑƟƠƄǠȒ"));
final String expected = "<pojomap>\n" +
" <map2 key=\"ƑƟƠƄǠȒ\" value=\"ƑƟƠƄǠȒ\" />\n" +
"</pojomap>\n";

final String actual = parserDefault.toXml(inputPojo);

assertNotNull("No serialization response", actual);
assertEquals("Invalid serialized output", expected, actual);
}

@Test
public void deserializeMap2UTF8Characters() {
final String inputXml = "<pojomap>\n" +
" <map2 key=\"&#401;&#415;&#416;&#388;&#480;&#530;\" value=\"&#401;&#415;&#416;&#388;&#480;&#530;\" />\n" +
"</pojomap>\n";
final PojoMap expected = new PojoMap(null, Map.of("ƑƟƠƄǠȒ", "ƑƟƠƄǠȒ"));

final PojoMap actual = parserEncodeUTF8.fromXml(inputXml, PojoMap.class);

assertNotNull("No serialization response", actual);
assertEquals("Invalid serialized output", expected.map2.get("ƑƟƠƄǠȒ"), actual.map2.get("ƑƟƠƄǠȒ"));
}

}
Loading

0 comments on commit ae2fa61

Please sign in to comment.