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