1
2
3
4
5
6
7
8
9
10
11 package org.mule.module.xml.stax;
12
13 import javax.xml.namespace.QName;
14 import javax.xml.stream.XMLInputFactory;
15 import javax.xml.stream.XMLStreamConstants;
16 import javax.xml.stream.XMLStreamException;
17 import javax.xml.stream.XMLStreamReader;
18
19 import junit.framework.TestCase;
20
21 public class ReversibleXMLStreamReaderTest extends TestCase
22 {
23 private JaxpStreamReaderAsserter asserter = null;
24
25 @Override
26 protected void setUp() throws Exception
27 {
28 super.setUp();
29
30 String factoryName = XMLInputFactory.newInstance().getClass().getName();
31 if (factoryName.equals("com.sun.xml.internal.stream.XMLInputFactoryImpl"))
32 {
33 asserter = new JaxpStreamReaderAsserter();
34 }
35 else if (factoryName.equals("com.ctc.wstx.stax.WstxInputFactory"))
36 {
37 asserter = new StaxStreamReaderAsserter();
38 }
39 else
40 {
41 fail("Don't know how to handle XMLInputFactory \"" + factoryName + "\"");
42 }
43 }
44
45 public void testReverse() throws Exception
46 {
47 ReversibleXMLStreamReader xsr = createReader();
48
49 asserter.assertDocumentStart(xsr);
50 QName start = xsr.getName();
51 assertEquals(XMLStreamConstants.CHARACTERS, xsr.next());
52 String text = xsr.getText();
53
54 xsr.reset();
55
56 assertEquals(XMLStreamConstants.START_ELEMENT, xsr.next());
57 assertEquals(start, xsr.getName());
58 assertEquals(start.getPrefix(), xsr.getPrefix());
59 assertEquals(start.getLocalPart(), xsr.getLocalName());
60 assertEquals(start.getNamespaceURI(), xsr.getNamespaceURI());
61 assertEquals(XMLStreamConstants.CHARACTERS, xsr.next());
62 assertEquals(text, xsr.getText());
63 assertEquals(XMLStreamConstants.END_ELEMENT, xsr.next());
64 asserter.assertDocumentEnd(xsr);
65
66 xsr.reset();
67
68 assertEquals(XMLStreamConstants.START_ELEMENT, xsr.next());
69 assertEquals(start, xsr.getName());
70 assertEquals(XMLStreamConstants.CHARACTERS, xsr.next());
71 assertEquals(text, xsr.getText());
72 assertEquals(XMLStreamConstants.END_ELEMENT, xsr.next());
73 assertEquals(XMLStreamConstants.END_DOCUMENT, xsr.next());
74 }
75
76 public void testFullReverse() throws Exception
77 {
78 ReversibleXMLStreamReader xsr = createReader();
79
80 asserter.assertDocumentStart(xsr);
81 assertEquals(XMLStreamConstants.CHARACTERS, xsr.next());
82 assertEquals(XMLStreamConstants.END_ELEMENT, xsr.next());
83 asserter.assertDocumentEnd(xsr);
84
85 xsr.reset();
86
87 assertEquals(XMLStreamConstants.START_ELEMENT, xsr.next());
88 assertEquals(XMLStreamConstants.CHARACTERS, xsr.next());
89 assertEquals(XMLStreamConstants.END_ELEMENT, xsr.next());
90 assertEquals(XMLStreamConstants.END_DOCUMENT, xsr.next());
91 }
92
93 private ReversibleXMLStreamReader createReader() throws Exception
94 {
95 XMLInputFactory xif = XMLInputFactory.newInstance();
96 XMLStreamReader coreReader = xif.createXMLStreamReader(getClass().getResourceAsStream("/simple.xml"));
97
98
99
100 ReversibleXMLStreamReader xsr = new ReversibleXMLStreamReader(coreReader);
101 xsr.setTracking(true);
102 return xsr;
103 }
104
105 private static class JaxpStreamReaderAsserter
106 {
107 public void assertDocumentStart(XMLStreamReader xsr) throws XMLStreamException
108 {
109 assertEquals(XMLStreamConstants.START_ELEMENT, xsr.next());
110 }
111
112 public void assertDocumentEnd(XMLStreamReader xsr) throws XMLStreamException
113 {
114 assertEquals(XMLStreamConstants.END_DOCUMENT, xsr.next());
115 }
116 }
117
118 private static class StaxStreamReaderAsserter extends JaxpStreamReaderAsserter
119 {
120 @Override
121 public void assertDocumentStart(XMLStreamReader xsr) throws XMLStreamException
122 {
123 assertEquals(XMLStreamConstants.SPACE, xsr.next());
124 assertEquals(XMLStreamConstants.START_ELEMENT, xsr.next());
125 }
126
127 @Override
128 public void assertDocumentEnd(XMLStreamReader xsr) throws XMLStreamException
129 {
130 assertEquals(XMLStreamConstants.SPACE, xsr.next());
131 assertEquals(XMLStreamConstants.END_DOCUMENT, xsr.next());
132 }
133 }
134 }
135
136