View Javadoc

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