1   /*
2    * $Id: DomXmlTransformersTestCase.java 12370 2008-07-17 13:11:17Z tcarlson $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.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.transformers.xml;
12  
13  import org.mule.api.transformer.Transformer;
14  import org.mule.module.xml.transformer.DomDocumentToXml;
15  import org.mule.module.xml.transformer.XmlToDomDocument;
16  import org.mule.module.xml.util.XMLTestUtils;
17  import org.mule.module.xml.util.XMLUtils;
18  import org.mule.util.IOUtils;
19  
20  import java.io.InputStream;
21  import java.io.OutputStream;
22  import java.util.Iterator;
23  import java.util.List;
24  
25  import javax.xml.stream.XMLStreamReader;
26  import javax.xml.transform.OutputKeys;
27  import javax.xml.transform.TransformerException;
28  import javax.xml.transform.TransformerFactory;
29  import javax.xml.transform.dom.DOMSource;
30  import javax.xml.transform.stream.StreamResult;
31  
32  import org.dom4j.DocumentHelper;
33  import org.dom4j.io.DOMWriter;
34  import org.w3c.dom.Document;
35  import org.w3c.dom.Node;
36  
37  public class DomXmlTransformersTestCase extends AbstractXmlTransformerTestCase
38  {
39  
40      private String srcData;
41      private Document resultData;
42  
43      // @Override
44      protected void doSetUp() throws Exception
45      {
46          srcData = IOUtils.getResourceAsString("cdcatalog.xml", getClass());
47          org.dom4j.Document dom4jDoc = DocumentHelper.parseText(srcData);
48          resultData = new DOMWriter().write(dom4jDoc);
49      }
50  
51      public Transformer getTransformer() throws Exception
52      {
53          XmlToDomDocument trans = new XmlToDomDocument();
54          trans.setReturnClass(org.w3c.dom.Document.class);
55          return trans;
56      }
57  
58      public Transformer getRoundTripTransformer() throws Exception
59      {
60          DomDocumentToXml trans = new DomDocumentToXml();
61          trans.setReturnClass(String.class);
62          return trans;
63      }
64  
65      public Object getTestData()
66      {
67          return srcData;
68      }
69  
70      public Object getResultData()
71      {
72          return resultData;
73      }
74  
75      public void testTransformXMLStreamReader() throws Exception
76      {
77          Object expectedResult = getResultData();
78          assertNotNull(expectedResult);
79          
80          XmlToDomDocument transformer = (XmlToDomDocument) getTransformer();
81          
82          InputStream is = IOUtils.getResourceAsStream("cdcatalog.xml", XMLTestUtils.class);
83          XMLStreamReader sr = XMLUtils.toXMLStreamReader(transformer.getXMLInputFactory(), is);
84  
85          Object result = transformer.transform(sr);
86          writeXml((Node) result, System.out);
87          assertNotNull(result);
88          assertTrue("expected: " + expectedResult + "\nresult: " + result, compareResults(expectedResult, result));
89      }
90  
91      public static void writeXml(Node n, OutputStream os) throws TransformerException {
92          TransformerFactory tf = TransformerFactory.newInstance();
93          // identity
94          javax.xml.transform.Transformer t = tf.newTransformer();
95          t.setOutputProperty(OutputKeys.INDENT, "yes");
96          t.transform(new DOMSource(n), new StreamResult(os));
97      }
98      
99      public void testAllXmlMessageTypes() throws Exception
100     {
101         List list = XMLTestUtils.getXmlMessageVariants("cdcatalog.xml");
102         Iterator it = list.iterator();
103         
104         Object expectedResult = getResultData();
105         assertNotNull(expectedResult);
106         
107         Object msg, result;
108         while (it.hasNext())
109         {
110             msg = it.next();
111             result = getTransformer().transform(msg);
112             assertNotNull(result);
113             assertTrue("Test failed for message type: " + msg.getClass(), compareResults(expectedResult, result));
114         }        
115     }
116 
117 }