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.XPath;
77 import org.jaxen.dom.DOMXPath;
78 import org.w3c.dom.Document;
79 import org.xml.sax.SAXException;
80
81 /***
82 * @author Elliotte Rusty Harold
83 *
84 */
85 public class LastTest extends TestCase {
86
87 private Document doc;
88
89 public void setUp() throws ParserConfigurationException, SAXException, IOException
90 {
91 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
92 factory.setNamespaceAware(true);
93 DocumentBuilder builder = factory.newDocumentBuilder();
94 doc = builder.newDocument();
95 }
96
97
98 public LastTest(String name) {
99 super(name);
100 }
101
102
103 public void testLastFunction()
104 throws JaxenException {
105
106 BaseXPath xpath = new DOMXPath("//x[position()=last()]");
107 org.w3c.dom.Element a = doc.createElementNS("", "a");
108 org.w3c.dom.Element b = doc.createElementNS("", "b");
109 doc.appendChild(a);
110 a.appendChild(b);
111 org.w3c.dom.Element x2 = doc.createElementNS("", "x");
112 org.w3c.dom.Element x3 = doc.createElementNS("", "x");
113 org.w3c.dom.Element x4 = doc.createElementNS("", "x");
114 a.appendChild(x4);
115 b.appendChild(x2);
116 b.appendChild(x3);
117 x2.appendChild(doc.createTextNode("2"));
118 x3.appendChild(doc.createTextNode("3"));
119 x4.appendChild(doc.createTextNode("4"));
120
121 List result = xpath.selectNodes(doc);
122 assertEquals(2, result.size());
123 assertEquals(x3, result.get(0));
124 assertEquals(x4, result.get(1));
125
126 }
127
128 public void testLastFunctionAllowsNoArguments() throws JaxenException
129 {
130 try
131 {
132 BaseXPath xpath = new DOMXPath("//x[position()=last(.)]");
133 org.w3c.dom.Element a = doc.createElementNS("", "a");
134 org.w3c.dom.Element b = doc.createElementNS("", "b");
135 doc.appendChild(a);
136 a.appendChild(b);
137 org.w3c.dom.Element x2 = doc.createElementNS("", "x");
138 org.w3c.dom.Element x3 = doc.createElementNS("", "x");
139 org.w3c.dom.Element x4 = doc.createElementNS("", "x");
140 a.appendChild(x4);
141 b.appendChild(x2);
142 b.appendChild(x3);
143 x2.appendChild(doc.createTextNode("2"));
144 x3.appendChild(doc.createTextNode("3"));
145 x4.appendChild(doc.createTextNode("4"));
146
147 xpath.selectNodes(doc);
148 fail("last() function took arguments");
149 }
150 catch (FunctionCallException e)
151 {
152 assertEquals("last() requires no arguments.", e.getMessage());
153 }
154 }
155
156
157
158
159 }