Skip to content

Commit

Permalink
Add another test for external entities expansion
Browse files Browse the repository at this point in the history
  • Loading branch information
gnodet committed Jul 13, 2023
1 parent dc01ec0 commit 558fffe
Show file tree
Hide file tree
Showing 3 changed files with 100 additions and 39 deletions.
2 changes: 1 addition & 1 deletion src/main/java/com/ctc/wstx/sr/StreamScanner.java
Original file line number Diff line number Diff line change
Expand Up @@ -1639,7 +1639,7 @@ protected EntityDecl expandEntity(String id, boolean allowExt,
return null;
}

if (!mCfgTreatCharRefsAsEntities || this instanceof MinimalDTDReader) {
if (mCfgReplaceEntities || !mCfgTreatCharRefsAsEntities || this instanceof MinimalDTDReader) {
expandEntity(ed, allowExt);
}

Expand Down
38 changes: 0 additions & 38 deletions src/test/java/stax2/stream/TestCharEntityRef.java

This file was deleted.

99 changes: 99 additions & 0 deletions src/test/java/stax2/stream/TestExternalEntityRef.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
package stax2.stream;

import com.ctc.wstx.api.WstxInputProperties;
import org.codehaus.stax2.XMLInputFactory2;
import org.codehaus.stax2.XMLStreamReader2;
import stax2.BaseStax2Test;

import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLResolver;
import javax.xml.stream.XMLStreamException;

/**
* Test entities in round-trip mode
*
* @author Guillaume Nodet
*/
public class TestExternalEntityRef
extends BaseStax2Test
{
private static final String TEST_BASIC = "<project>" +
"<?foo?>" +
"<name>&oelig;</name>" +
"</project>";

public void testEntityRef()
throws XMLStreamException {

XMLInputFactory2 f = getInputFactory();
f.configureForRoundTripping();
XMLStreamReader2 sr = constructStreamReader(f, TEST_BASIC);

assertEquals(START_ELEMENT, sr.next());
assertEquals("project", sr.getLocalName());
assertEquals(PROCESSING_INSTRUCTION, sr.next());
assertEquals("foo", sr.getPITarget());
assertEquals(START_ELEMENT, sr.next());
assertEquals("name", sr.getLocalName());
assertEquals(ENTITY_REFERENCE, sr.next());
assertEquals("oelig", sr.getLocalName());
}

private static final String TEST_DTD = "<!DOCTYPE foo [\n" +
" <!ENTITY desc SYSTEM \"file:desc.xml\">\n" +
" ]>\n" +
"<project>" +
"&desc;" +
"</project>";

public void testWithDtd()
throws XMLStreamException {

XMLInputFactory2 f = getInputFactory();
f.configureForRoundTripping();
XMLStreamReader2 sr = constructStreamReader(f, TEST_DTD);

assertEquals(DTD, sr.next());
assertEquals(SPACE, sr.next());
assertEquals(START_ELEMENT, sr.next());
assertEquals("project", sr.getLocalName());
assertEquals(ENTITY_REFERENCE, sr.next());
assertEquals("desc", sr.getLocalName());
assertEquals(END_ELEMENT, sr.next());
assertEquals("project", sr.getLocalName());
}

public void testWithDtdExpand()
throws XMLStreamException {

XMLInputFactory2 f = getInputFactory();
f.configureForRoundTripping();
f.setProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES, true);
f.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, true);
f.setProperty(WstxInputProperties.P_ENTITY_RESOLVER, new XMLResolver() {
@Override
public Object resolveEntity(String publicID, String systemID, String baseURI, String namespace) throws XMLStreamException {
if ("file:desc.xml".equals(systemID)) {
return "<?xml version='1.0' encoding='UTF-8'?><description>foo</description>";
}
return null;
}
});
XMLStreamReader2 sr = constructStreamReader(f, TEST_DTD);

assertEquals(DTD, sr.next());
assertEquals(SPACE, sr.next());
assertEquals(START_ELEMENT, sr.next());
assertEquals("project", sr.getLocalName());
assertEquals(ENTITY_REFERENCE, sr.next());
assertEquals("desc", sr.getLocalName());
assertEquals(START_ELEMENT, sr.next());
assertEquals("description", sr.getLocalName());
assertEquals(CHARACTERS, sr.next());
assertEquals("foo", sr.getText());
assertEquals(END_ELEMENT, sr.next());
assertEquals("description", sr.getLocalName());
assertEquals(END_ELEMENT, sr.next());
assertEquals("project", sr.getLocalName());
}
}

0 comments on commit 558fffe

Please sign in to comment.