Skip to content

Commit

Permalink
Test clean up; add a failing test for #442
Browse files Browse the repository at this point in the history
  • Loading branch information
cowtowncoder committed Mar 29, 2021
1 parent 5e544db commit 43a0881
Show file tree
Hide file tree
Showing 4 changed files with 82 additions and 32 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package com.fasterxml.jackson.dataformat.xml.failing;

import com.fasterxml.jackson.core.JsonToken;

import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.fasterxml.jackson.dataformat.xml.XmlTestBase;
import com.fasterxml.jackson.dataformat.xml.deser.FromXmlParser;

public class XmlParser442Test extends XmlTestBase
{
private final XmlMapper MAPPER = newMapper();

// For [dataformat-xml#442]
public void testMixedContentAfter() throws Exception
{
try (FromXmlParser xp = (FromXmlParser) MAPPER.createParser(
"<root>\n" // START_OBJECT
+" <branch>\n" // *Missing* START_OBJECT
+" text\n"
+" <leaf>stuff</leaf>\n"
+" </branch>\n" // END_OBJECT
+"</root>\n" // END_OBJECT

/*
"<SomeXml>\n" // START_OBJECT
+" <ParentElement>\n" // *Missing* START_OBJECT
+" text\n"
+" <ChildElement someAttribute=\"value\"/>\n" // START_OBJECT/END_OBJECT
+" further text\n"
+" </ParentElement>\n" // END_OBJECT
+"</SomeXml>\n" // END_OBJECT
*/
)) {
assertToken(JsonToken.START_OBJECT, xp.nextToken());
assertToken(JsonToken.FIELD_NAME, xp.nextToken());
assertEquals("branch", xp.currentName());

// Here's what we are missing:
assertToken(JsonToken.START_OBJECT, xp.nextToken());
assertToken(JsonToken.FIELD_NAME, xp.nextToken());
assertEquals("", xp.currentName());

assertToken(JsonToken.VALUE_STRING, xp.nextToken());
assertEquals("text", xp.getText().trim());

assertToken(JsonToken.FIELD_NAME, xp.nextToken());
assertEquals("leaf", xp.currentName());
assertToken(JsonToken.VALUE_STRING, xp.nextToken());
assertEquals("stuff", xp.getText().trim());

assertToken(JsonToken.END_OBJECT, xp.nextToken());
assertToken(JsonToken.END_OBJECT, xp.nextToken());

assertNull(xp.nextToken());
}
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.fasterxml.jackson.dataformat.xml.node;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.json.JsonMapper;
import com.fasterxml.jackson.dataformat.xml.XmlTestBase;
Expand Down Expand Up @@ -46,8 +47,8 @@ public void testMixed226() throws Exception
+"<a>mixed1 <b>leaf</b>"
+" mixed2</a>\n"
+"</root>";
assertEquals(JSON_MAPPER.readTree(
a2q("{'a':{'':['mixed1 ',' mixed2'],'b':'leaf'}}")),
XML_MAPPER.readTree(XML));
JsonNode fromJson = JSON_MAPPER.readTree(
a2q("{'a':{'':['mixed1 ',' mixed2'],'b':'leaf'}}"));
assertEquals(fromJson, XML_MAPPER.readTree(XML));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,23 +14,14 @@

public class XmlParserTest extends XmlTestBase
{
protected JsonFactory _jsonFactory;
protected XmlFactory _xmlFactory;
protected XmlMapper _xmlMapper;

// let's actually reuse XmlMapper to make things bit faster
@Override
public void setUp() throws Exception {
super.setUp();
_jsonFactory = new JsonFactory();
_xmlFactory = new XmlFactory();
_xmlMapper = new XmlMapper();
}
protected final JsonFactory _jsonFactory = new JsonFactory();
protected final XmlMapper _xmlMapper = newMapper();
protected XmlFactory _xmlFactory = _xmlMapper.getFactory();

/*
/**********************************************************
/**********************************************************************
/* Unit tests, simplest/manual
/**********************************************************
/**********************************************************************
*/

public void testSimplest() throws Exception
Expand Down Expand Up @@ -119,11 +110,11 @@ public void testRootMixed() throws Exception
assertNull(p.nextToken());
}
}

/*
/**********************************************************
/**********************************************************************
/* Unit tests, slightly bigger, automated
/**********************************************************
/**********************************************************************
*/

public void testSimpleNested() throws Exception
Expand Down Expand Up @@ -370,9 +361,9 @@ public void testInferredNumbers() throws Exception
}

/*
/**********************************************************
/**********************************************************************
/* Helper methods
/**********************************************************
/**********************************************************************
*/

private String _readXmlWriteJson(String xml) throws IOException
Expand All @@ -383,14 +374,13 @@ private String _readXmlWriteJson(String xml) throws IOException
private String _readXmlWriteJson(XmlFactory xmlFactory, String xml) throws IOException
{
StringWriter w = new StringWriter();

JsonParser p = xmlFactory.createParser(xml);
JsonGenerator jg = _jsonFactory.createGenerator(w);
while (p.nextToken() != null) {
jg.copyCurrentEvent(p);
try (JsonParser p = xmlFactory.createParser(xml)) {
try (JsonGenerator jg = _jsonFactory.createGenerator(w)) {
while (p.nextToken() != null) {
jg.copyCurrentEvent(p);
}
}
}
p.close();
jg.close();
return w.toString();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,15 @@
import javax.xml.stream.*;

import com.fasterxml.jackson.core.io.ContentReference;

import com.fasterxml.jackson.dataformat.xml.XmlFactory;
import com.fasterxml.jackson.dataformat.xml.XmlTestBase;
import com.fasterxml.jackson.dataformat.xml.deser.FromXmlParser;
import com.fasterxml.jackson.dataformat.xml.deser.XmlTokenStream;

public class XmlTokenStreamTest extends XmlTestBase
{
private final XMLInputFactory _staxInputFactory = XMLInputFactory.newInstance();
private final XmlFactory XML_FACTORY = newMapper().getFactory();

public void testSimple() throws Exception
{
Expand Down Expand Up @@ -170,10 +172,10 @@ public void testMixedContentAfter() throws Exception
private XmlTokenStream _tokensFor(String doc) throws Exception {
return _tokensFor(doc, FromXmlParser.Feature.collectDefaults());
}

private XmlTokenStream _tokensFor(String doc, int flags) throws Exception
{
XMLStreamReader sr = _staxInputFactory.createXMLStreamReader(new StringReader(doc));
XMLStreamReader sr = XML_FACTORY.getXMLInputFactory().createXMLStreamReader(new StringReader(doc));
// must point to START_ELEMENT, so:
sr.nextTag();
XmlTokenStream stream = new XmlTokenStream(sr, ContentReference.rawReference(doc), flags);
Expand Down

0 comments on commit 43a0881

Please sign in to comment.