TestAutoEmptyElems.java

package stax2.wstream;

import java.io.StringWriter;

import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;

import org.codehaus.stax2.XMLOutputFactory2;

import com.ctc.wstx.api.WstxOutputProperties;

public class TestAutoEmptyElems extends BaseWriterTest
{
    public void testDefaultSetting() throws Exception
    {
        final XMLOutputFactory f = getOutputFactory();
        assertEquals(Boolean.TRUE, f.getProperty(XMLOutputFactory2.P_AUTOMATIC_EMPTY_ELEMENTS));
    }

    public void testAutoEmptyElemDisabled() throws Exception
    {
        assertEquals("<root><leaf></leaf></root>", _writeDoc(getFactory(false, false)));
        assertEquals("<root><leaf></leaf></root>", _writeDoc(getFactory(false, true)));
    }
    
    public void testAutoEmptyElemEnabled() throws Exception
    {
        assertEquals("<root><leaf/></root>", _writeDoc(getFactory(true, false)));
        assertEquals("<root><leaf /></root>", _writeDoc(getFactory(true, true)));
    }

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

    private XMLOutputFactory2 getFactory(boolean autoEndElems,
            boolean spaceAfterEmpty) throws XMLStreamException
    {
        XMLOutputFactory2 f = getOutputFactory();
        // ns-awareness, repairing shouldn't matter, just whether automatic end elems enabled
        f.setProperty(XMLOutputFactory2.P_AUTOMATIC_EMPTY_ELEMENTS,
                autoEndElems ? Boolean.TRUE : Boolean.FALSE);
        f.setProperty(WstxOutputProperties.P_ADD_SPACE_AFTER_EMPTY_ELEM,
                spaceAfterEmpty ? Boolean.TRUE : Boolean.FALSE);
        return f;
    }    

    private String _writeDoc(XMLOutputFactory f) throws XMLStreamException
    {
        StringWriter strw = new StringWriter();
        XMLStreamWriter sw = f.createXMLStreamWriter(strw);
        sw.writeStartElement("root");
        sw.writeStartElement("leaf");
        sw.writeEndElement();
        sw.writeEndElement();
        sw.close();
        return strw.toString();
    }
}