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