View Javadoc

1   /*
2    * $Id: JXPathExtractorTestCase.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.transformers.xml;
12  
13  import org.mule.module.xml.transformer.JXPathExtractor;
14  import org.mule.tck.AbstractMuleTestCase;
15  
16  import java.util.List;
17  
18  import org.dom4j.Node;
19  
20  public class JXPathExtractorTestCase extends AbstractMuleTestCase
21  {
22  
23      protected static final String TEST_XML_MULTI_RESULTS = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
24                                                             + "<root>" + "<node>value1</node>"
25                                                             + "<node>value2</node>" + "<node>value3</node>"
26                                                             + "</root>";
27  
28      protected static final String TEST_XML_MULTI_NESTED_RESULTS = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
29                                                                    + "<root>"
30                                                                    + "<node>"
31                                                                    + "<subnode1>val1</subnode1>"
32                                                                    + "<subnode2>val2</subnode2>"
33                                                                    + "</node>"
34                                                                    + "<node>"
35                                                                    + "<subnode1>val3</subnode1>"
36                                                                    + "<subnode2>val4</subnode2>"
37                                                                    + "</node>"
38                                                                    + "</root>";
39  
40      protected static final String TEST_XML_SINGLE_RESULT = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
41                                                             + "<root>" + "<node>value1</node>" + "</root>";
42  
43      public void testSingeResult() throws Exception
44      {
45          final JXPathExtractor extractor = createObject(JXPathExtractor.class);
46          final String expression = "/root/node";
47          extractor.setExpression(expression);
48          // just make code coverage tools happy
49          assertEquals("Wrong expression returned.", expression, extractor.getExpression());
50          final Object objResult = extractor.transform(TEST_XML_SINGLE_RESULT);
51          assertNotNull(objResult);
52          String result = (String)objResult;
53          assertEquals("Wrong value extracted.", "value1", result);
54      }
55  
56      public void testMultipleResults() throws Exception
57      {
58          JXPathExtractor extractor = createObject(JXPathExtractor.class);
59          extractor.setExpression("/root/node");
60          extractor.setSingleResult(false);
61          final Object objResult = extractor.transform(TEST_XML_MULTI_RESULTS);
62          assertNotNull(objResult);
63          List results = (List)objResult;
64          assertEquals("Wrong number of results returned.", 3, results.size());
65          assertEquals("Wrong value returned.", "value1", results.get(0));
66          assertEquals("Wrong value returned.", "value2", results.get(1));
67          assertEquals("Wrong value returned.", "value3", results.get(2));
68      }
69  
70      public void testMultipleResultsAsNode() throws Exception
71      {
72          JXPathExtractor extractor = createObject(JXPathExtractor.class);
73          extractor.setExpression("/root/node");
74          extractor.setSingleResult(false);
75          extractor.setOutputType(JXPathExtractor.OUTPUT_TYPE_NODE);
76          
77          final Object objResult = extractor.transform(TEST_XML_MULTI_RESULTS);
78          assertNotNull(objResult);
79          List results = (List)objResult;
80          assertEquals("Wrong number of results returned.", 3, results.size());
81          assertTrue(results.get(0) instanceof Node);
82      }
83      /**
84       * This xpath expression will internally have DefaultText returned, test there
85       * are no ClassCastExceptions.
86       */
87      public void testMultipleResultsNested() throws Exception
88      {
89          JXPathExtractor extractor = createObject(JXPathExtractor.class);
90          extractor.setExpression("/root/node[*]/*/text()");
91          extractor.setSingleResult(false);
92          final Object objResult = extractor.transform(TEST_XML_MULTI_NESTED_RESULTS);
93          assertNotNull(objResult);
94          List results = (List)objResult;
95          assertEquals("Wrong number of results returned.", 4, results.size());
96          assertEquals("Wrong value returned.", "val1", results.get(0));
97          assertEquals("Wrong value returned.", "val2", results.get(1));
98          assertEquals("Wrong value returned.", "val3", results.get(2));
99          assertEquals("Wrong value returned.", "val4", results.get(3));
100     }
101 
102 }