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