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.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
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
93
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 }