package stax2.evt;

import java.io.*;

import javax.xml.namespace.QName;
import javax.xml.stream.*;
import javax.xml.stream.events.*;

import org.codehaus.stax2.*;
import org.codehaus.stax2.evt.*;

import stax2.BaseStax2Test;

/**
 * Set of unit tests that checks that new Stax2 features work (generically)
 * for event instances.
 */
public class TestEventTypes
    extends BaseStax2Test
{
    /**
     * This unit test does some crude checking to ensure that the usual
     * events can be output to the specified writer. Events are here
     * constructed using event factory.
     */
    public void testEventObjectOutput()
        throws XMLStreamException
    {
        XMLEventFactory2 evtf = getEventFactory();
        XMLOutputFactory2 f = getOutputFactory();
        StringWriter strw = new StringWriter();
        XMLStreamWriter sw = f.createXMLStreamWriter(strw, "UTF-8");

        XMLEvent2 evt = (XMLEvent2) evtf.createStartDocument();
        evt.writeUsing(sw);

        // Let's output root element with no attrs
        ((XMLEvent2) evtf.createStartElement("", "", "root")).writeUsing(sw);
        ((XMLEvent2) evtf.createEndElement("", "", "root")).writeUsing(sw);

        ((XMLEvent2) evtf.createEndDocument()).writeUsing(sw);

        sw.close();

        // Ok, parsing:
        XMLInputFactory f2 = getInputFactory();
        XMLStreamReader sr = f2.createXMLStreamReader(new StringReader(strw.toString()));
        assertTokenType(START_DOCUMENT, sr.getEventType());
        assertTokenType(START_ELEMENT, sr.next());
        assertTokenType(END_ELEMENT, sr.next());
        assertTokenType(END_DOCUMENT, sr.next());
        sr.close();
    }

    /*
    ////////////////////////////////////////
    // Non-test methods
    ////////////////////////////////////////
     */
}
