Package stream

Source Code of stream.TestDTDSkimming

package stream;

import java.io.*;

import javax.xml.stream.XMLStreamException;

import org.codehaus.stax2.XMLInputFactory2;
import org.codehaus.stax2.XMLStreamReader2;

public class TestDTDSkimming extends base.BaseTestCase
{
    public void testSimple() throws Exception
    {
        _doTestSimple(null, false);
        _doTestSimple(null, true);
        _doTestSimple("UTF-8", false);
        _doTestSimple("UTF-8", true);
    }

    public void testInvalidDup() throws Exception
    {
        _doTestInvalidDup(null, false);
        _doTestInvalidDup(null, true);
        _doTestInvalidDup("UTF-8", false);
        _doTestInvalidDup("UTF-8", true);
    }
   
    /*
    /**********************************************************************
    /* Helper methods
    /**********************************************************************
     */

    private void _doTestSimple(String encoding, boolean skip)
        throws IOException, XMLStreamException
    {
        final String INTERNAL_SUBSET = "<!--test-->";
       
        String DOC = "<?xml version='1.0'?><!DOCTYPE root ["+INTERNAL_SUBSET+"]> <root />";
        XMLStreamReader2 sr = createReader(DOC, encoding);
        assertTokenType(START_DOCUMENT, sr.getEventType());
        int t = sr.next();
        assertTokenType(DTD, t);
        if (!skip) {
            assertEquals("root", sr.getPrefixedName());
            assertEquals(INTERNAL_SUBSET, sr.getText());
        }
        assertTokenType(START_ELEMENT, sr.next());
        assertEquals("root", sr.getLocalName());
        assertTokenType(END_ELEMENT, sr.next());
        assertEquals("root", sr.getLocalName());
        assertTokenType(END_DOCUMENT, sr.next());
        sr.close();
    }

    private void _doTestInvalidDup(String encoding, boolean skip)
        throws IOException, XMLStreamException
    {
        String DOC = "<?xml version='1.0'?><!DOCTYPE root>  <!DOCTYPE root>";
        XMLStreamReader2 sr = createReader(DOC, encoding);
        assertTokenType(START_DOCUMENT, sr.getEventType());
        int t = sr.next();
        assertTokenType(DTD, t);
        if (!skip) {
            assertEquals("root", sr.getPrefixedName());
            sr.getText(); // just to force its parsing
        }
        // But second one should fail
        try {
            t = sr.next(); // to get second DTD
            fail("Should fail on invalid DOCTYPE declaration: instead got "+t);
        } catch (XMLStreamException e) {
            verifyException(e, "Duplicate DOCTYPE declaration");
        }
        sr.close();
    }
   
    private XMLStreamReader2 createReader(String content, String enc)
        throws IOException, XMLStreamException
    {
        // Let's ensure it's a new factory, to minimize caching probs
        XMLInputFactory2 f = getNewInputFactory();
        if (enc == null) { // reader-based
            return (XMLStreamReader2) f.createXMLStreamReader(new StringReader(content));
        }
        // nope, byte based
        byte[] data = content.getBytes(enc);
        return (XMLStreamReader2) f.createXMLStreamReader(new ByteArrayInputStream(data));
    }
}
TOP

Related Classes of stream.TestDTDSkimming

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.