View Javadoc

1   /*
2    * $Id: ReversibleXMLStreamReaderTest.java 19191 2010-08-25 21:05:23Z tcarlson $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
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()); // this is the last event we saved
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()); // this is the last event we saved
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          //com.ctc.wstx.sr.ValidatingStreamReader
99          //com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl
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