package stax2;
import java.io.*;
import javax.xml.stream.*;
import org.codehaus.stax2.XMLStreamReader2;
import org.codehaus.stax2.XMLStreamWriter2;
/**
* Unit tests to verify expected handling of property accessors and
* modifiers with Stax2 input and output factories, as well as
* simple readers and writers.
* These are mostly related to issue [WSTX-243]
*/
public class TestFactories extends BaseStax2Test
{
private final String NO_SUCH_PROPERTY = "noSuchProperty";
// [WSTX-243]; verify exception for input factory
public void testPropertiesInputFactory() throws XMLStreamException
{
XMLInputFactory f = getInputFactory();
// First, verify property is indeed unsupported
assertFalse(f.isPropertySupported(NO_SUCH_PROPERTY));
// First: error for trying to access unknown
try {
f.getProperty(NO_SUCH_PROPERTY);
fail("Expected exception");
} catch (IllegalArgumentException e) {
verifyException(e, NO_SUCH_PROPERTY);
}
// Ditto for trying to set such property
try {
f.setProperty(NO_SUCH_PROPERTY, "foobar");
fail("Expected exception");
} catch (IllegalArgumentException e) {
verifyException(e, NO_SUCH_PROPERTY);
}
}
public void testPropertiesStreamReader() throws XMLStreamException
{
XMLInputFactory f = getInputFactory();
XMLStreamReader2 r = (XMLStreamReader2) f.createXMLStreamReader(new StringReader("<root></root>"));
// First, verify property is indeed unsupported
assertFalse(r.isPropertySupported(NO_SUCH_PROPERTY));
/* Ok: as of Woodstox 4.0, behavior is such that no exception is thrown,
* because javadocs do not indicate that it should be done (save for case
* where property name is null). Whether this is right interpretation or not
* is open to discussion; but for now we will verify that behavior does not
* change from 4.0 without explicit decision.
*/
/*
try {
Object ob = r.getProperty(NO_SUCH_PROPERTY);
fail("Expected exception, instead got result: "+ob);
} catch (IllegalArgumentException e) {
verifyException(e, NO_SUCH_PROPERTY);
}
*/
Object ob = r.getProperty(NO_SUCH_PROPERTY);
assertNull(ob);
// And although setter is specified by Stax2, it too fails on unrecognized:
try {
r.setProperty(NO_SUCH_PROPERTY, "foobar");
fail("Expected exception");
} catch (IllegalArgumentException e) {
verifyException(e, NO_SUCH_PROPERTY);
}
}
// [WSTX-243]; verify exception for input factory
public void testPropertiesOutputFactory() throws XMLStreamException
{
XMLOutputFactory f = getOutputFactory();
// First, verify property is indeed unsupported
assertFalse(f.isPropertySupported(NO_SUCH_PROPERTY));
// First: error for trying to access unknown
try {
f.getProperty(NO_SUCH_PROPERTY);
fail("Expected exception");
} catch (IllegalArgumentException e) {
verifyException(e, NO_SUCH_PROPERTY);
}
// Ditto for trying to set such property
try {
f.setProperty(NO_SUCH_PROPERTY, "foobar");
fail("Expected exception");
} catch (IllegalArgumentException e) {
verifyException(e, NO_SUCH_PROPERTY);
}
}
public void testPropertiesStreamWriter() throws XMLStreamException
{
XMLOutputFactory f = getOutputFactory();
XMLStreamWriter2 w = (XMLStreamWriter2) f.createXMLStreamWriter(new StringWriter());
// First, verify property is indeed unsupported
assertFalse(w.isPropertySupported(NO_SUCH_PROPERTY));
// First: error for trying to access unknown, as per Stax 1.0 spec:
try {
w.getProperty(NO_SUCH_PROPERTY);
fail("Expected exception");
} catch (IllegalArgumentException e) {
verifyException(e, NO_SUCH_PROPERTY);
}
// And although setter is specified by Stax2, it too fails on unrecognized:
try {
w.setProperty(NO_SUCH_PROPERTY, "foobar");
fail("Expected exception");
} catch (IllegalArgumentException e) {
verifyException(e, NO_SUCH_PROPERTY);
}
}
}