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
66 import javax.xml.parsers.DocumentBuilder;
67 import javax.xml.parsers.DocumentBuilderFactory;
68 import javax.xml.parsers.ParserConfigurationException;
69
70 import junit.framework.TestCase;
71
72 import org.jaxen.BaseXPath;
73 import org.jaxen.FunctionCallException;
74 import org.jaxen.JaxenException;
75 import org.jaxen.XPath;
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 SubstringBeforeTest 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 doc.appendChild(doc.createElement("root"));
95 }
96
97
98 public SubstringBeforeTest(String name) {
99 super(name);
100 }
101
102 public void testSubstringBeforeNumber() throws JaxenException
103 {
104 XPath xpath = new DOMXPath( "substring-before(33, '3')" );
105 String result = (String) xpath.evaluate( doc );
106 assertEquals("", result);
107 }
108
109 public void testSubstringBeforeString() throws JaxenException
110 {
111 XPath xpath = new DOMXPath( "substring-before('test', 'es')" );
112 String result = (String) xpath.evaluate( doc );
113 assertEquals("t", result);
114 }
115
116 public void testContainsString3() throws JaxenException
117 {
118 XPath xpath = new DOMXPath( "substring-before('superlative', 'superlative')" );
119 String result = (String) xpath.evaluate( doc );
120 assertEquals("", result);
121 }
122
123 public void testSubstringBeforeNumber2() throws JaxenException
124 {
125 XPath xpath = new DOMXPath( "substring-before(43, '0')" );
126 String result = (String) xpath.evaluate( doc );
127 assertEquals("", result);
128 }
129
130 public void testSubstringBeforeString2() throws JaxenException
131 {
132 XPath xpath = new DOMXPath( "substring-before('1234567890', '1234567a')" );
133 String result = (String) xpath.evaluate( doc );
134 assertEquals("", result);
135 }
136
137
138 public void testSubstringBeforeString3() throws JaxenException
139 {
140 XPath xpath = new DOMXPath( "substring-before('1234567890', '456')" );
141 String result = (String) xpath.evaluate( doc );
142 assertEquals("123", result);
143 }
144
145
146 public void testEmptyStringSubstringBeforeNonEmptyString() throws JaxenException
147 {
148 XPath xpath = new DOMXPath( "substring-before('', 'a')" );
149 String result = (String) xpath.evaluate( doc );
150 assertEquals("", result);
151 }
152
153 public void testEmptyStringBeforeEmptyString() throws JaxenException
154 {
155 XPath xpath = new DOMXPath( "substring-before('', '')" );
156 String result = (String) xpath.evaluate( doc );
157 assertEquals("", result);
158 }
159
160 public void testSubstringBeforeEmptyString() throws JaxenException
161 {
162 XPath xpath = new DOMXPath( "substring-before('a', '')" );
163 String result = (String) xpath.evaluate( doc );
164 assertEquals("", result);
165 }
166
167 public void testSubstringBeforeFunctionRequiresAtLeastTwoArguments()
168 throws JaxenException {
169
170 BaseXPath xpath = new DOMXPath("substring-before('a')");
171
172 try {
173 xpath.selectNodes(doc);
174 fail("Allowed substring-before function with one argument");
175 }
176 catch (FunctionCallException ex) {
177 assertNotNull(ex.getMessage());
178 }
179
180 }
181
182 public void testContainsFunctionRequiresAtMostTwoArguments()
183 throws JaxenException {
184
185 BaseXPath xpath = new DOMXPath("substring-before('a', 'a', 'a')");
186
187 try {
188 xpath.selectNodes(doc);
189 fail("Allowed substring-before function with three arguments");
190 }
191 catch (FunctionCallException ex) {
192 assertNotNull(ex.getMessage());
193 }
194
195 }
196
197 }