1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62 package org.jaxen.function;
63
64 import java.io.IOException;
65 import java.util.List;
66
67 import javax.xml.parsers.DocumentBuilder;
68 import javax.xml.parsers.DocumentBuilderFactory;
69 import javax.xml.parsers.ParserConfigurationException;
70
71 import junit.framework.TestCase;
72
73 import org.jaxen.BaseXPath;
74 import org.jaxen.FunctionCallException;
75 import org.jaxen.JaxenException;
76 import org.jaxen.dom.DOMXPath;
77 import org.w3c.dom.Document;
78 import org.xml.sax.SAXException;
79
80 /***
81 * @author Elliotte Rusty Harold
82 *
83 */
84 public class LastTest extends TestCase {
85
86 private Document doc;
87
88 public void setUp() throws ParserConfigurationException, SAXException, IOException
89 {
90 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
91 factory.setNamespaceAware(true);
92 DocumentBuilder builder = factory.newDocumentBuilder();
93 doc = builder.newDocument();
94 }
95
96
97 public LastTest(String name) {
98 super(name);
99 }
100
101
102 public void testLastFunction()
103 throws JaxenException {
104
105 BaseXPath xpath = new DOMXPath("//x[position()=last()]");
106 org.w3c.dom.Element a = doc.createElementNS("", "a");
107 org.w3c.dom.Element b = doc.createElementNS("", "b");
108 doc.appendChild(a);
109 a.appendChild(b);
110 org.w3c.dom.Element x2 = doc.createElementNS("", "x");
111 org.w3c.dom.Element x3 = doc.createElementNS("", "x");
112 org.w3c.dom.Element x4 = doc.createElementNS("", "x");
113 a.appendChild(x4);
114 b.appendChild(x2);
115 b.appendChild(x3);
116 x2.appendChild(doc.createTextNode("2"));
117 x3.appendChild(doc.createTextNode("3"));
118 x4.appendChild(doc.createTextNode("4"));
119
120 List result = xpath.selectNodes(doc);
121 assertEquals(2, result.size());
122 assertEquals(x3, result.get(0));
123 assertEquals(x4, result.get(1));
124
125 }
126
127 public void testLastFunctionAllowsNoArguments() throws JaxenException
128 {
129 try
130 {
131 BaseXPath xpath = new DOMXPath("//x[position()=last(.)]");
132 org.w3c.dom.Element a = doc.createElementNS("", "a");
133 org.w3c.dom.Element b = doc.createElementNS("", "b");
134 doc.appendChild(a);
135 a.appendChild(b);
136 org.w3c.dom.Element x2 = doc.createElementNS("", "x");
137 org.w3c.dom.Element x3 = doc.createElementNS("", "x");
138 org.w3c.dom.Element x4 = doc.createElementNS("", "x");
139 a.appendChild(x4);
140 b.appendChild(x2);
141 b.appendChild(x3);
142 x2.appendChild(doc.createTextNode("2"));
143 x3.appendChild(doc.createTextNode("3"));
144 x4.appendChild(doc.createTextNode("4"));
145
146 xpath.selectNodes(doc);
147 fail("last() function took arguments");
148 }
149 catch (FunctionCallException e)
150 {
151 assertEquals("last() requires no arguments.", e.getMessage());
152 }
153 }
154
155
156
157
158 }