ExternalSubset184Test.java

package failing;

import javax.xml.stream.*;

import org.codehaus.stax.test.SimpleResolver;
import org.codehaus.stax.test.vstream.BaseVStreamTest;

/**
 * Currently failing case(s) of {@code ExternalSubsetTest}
 */
public class ExternalSubset184Test
    extends BaseVStreamTest
{
    public void testNotationReferenceInInternalSubset()
            throws XMLStreamException
    {
        String EXT_ENTITY_VALUE = "Overridden value";
        String XML = "<!DOCTYPE root SYSTEM 'myurl' [ <!ENTITY gr2 SYSTEM \"gr2\" NDATA IMAGE> " +
                " <!ENTITY extEnt '"+EXT_ENTITY_VALUE+"'>" + " ]>"
                +"<root>&extEnt;</root>";

        String EXT_SUBSET =
                "<!ELEMENT root (#PCDATA)>\n"
                        +"<!ENTITY extEnt 'Original DTD value'>\n" +
                        "<!NOTATION IMAGE       PUBLIC \"-//ES//NOTATION image format//EN\" \n" +
                        "                       \"http://www.test.com/xml/common/dtd/notation/image\">";

        XMLStreamReader sr = getReader(XML, true,
                new SimpleResolver(EXT_SUBSET));
        assertTokenType(DTD, sr.next());
        assertTokenType(START_ELEMENT, sr.next());
        assertEquals("root", sr.getLocalName());
        assertTokenType(CHARACTERS, sr.next());
        assertEquals(EXT_ENTITY_VALUE, getAndVerifyText(sr));
        assertTokenType(END_ELEMENT, sr.next());
        sr.close();
    }

    /*
    ////////////////////////////////////////
    // Private methods, other
    ////////////////////////////////////////
     */

    private XMLStreamReader getReader(String contents, boolean nsAware,
                                      XMLResolver resolver)
        throws XMLStreamException
    {
        XMLInputFactory f = getInputFactory();
        setCoalescing(f, false); // shouldn't really matter
        setNamespaceAware(f, nsAware);
        setSupportDTD(f, true);
        setValidating(f, true);
        // This shouldn't be required but let's play it safe:
        setSupportExternalEntities(f, true);
        setResolver(f, resolver);
        return constructStreamReader(f, contents);
    }
}