1
2
3
4
5
6
7
8
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
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
85
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 }