package stream; import java.io.*; import javax.xml.stream.*; import org.codehaus.stax2.*; /** * These tests try to specifically verify that name encoding and decoding * work as expected */ public class TestNameDecoding extends base.BaseTestCase { final static String NAME_ASCII = "funnyAsciiName_123"; // "A" and second "c" of "Accents" with some decorations... final static String NAME_LATIN1 = "some\u00C0"+"c\u00C7ents"; final static String NAME_UTF8 = "\u1165_\ud7a2"; public void testValidElemNameDecodingUtf8() throws Exception { verifyValidElemName(NAME_ASCII, ENC_UTF8); verifyValidElemName(NAME_LATIN1, ENC_UTF8); verifyValidElemName(NAME_UTF8, ENC_UTF8); } public void testValidElemNameDecodingLatin1() throws Exception { verifyValidElemName(NAME_ASCII, ENC_LATIN1); verifyValidElemName(NAME_LATIN1, ENC_LATIN1); } public void testValidElemNameDecodingAscii() throws Exception { verifyValidElemName(NAME_ASCII, ENC_ASCII); } /* /********************************************************************** /* Helper methods /********************************************************************** */ void verifyValidElemName(String name, String enc) throws IOException, XMLStreamException { // note: must specify encoding so parsers knows which decoder to use String DOC = "<?xml version='1.0' encoding='"+enc+"' ?><"+name+" />"; XMLStreamReader sr = createReader(DOC, enc); assertTokenType(START_DOCUMENT, sr.getEventType()); assertTokenType(START_ELEMENT, sr.next()); assertEquals(name, sr.getLocalName()); assertTokenType(END_ELEMENT, sr.next()); assertEquals(name, sr.getLocalName()); assertTokenType(END_DOCUMENT, sr.next()); sr.close(); } XMLStreamReader createReader(String content, String enc) throws IOException, XMLStreamException { // Let's ensure it's a new factory, to minimize caching probs XMLInputFactory2 f = getNewInputFactory(); byte[] data = content.getBytes(enc); return f.createXMLStreamReader(new ByteArrayInputStream(data)); } }