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 package org.jaxen.test;
49
50 import java.io.IOException;
51
52 import javax.xml.parsers.DocumentBuilder;
53 import javax.xml.parsers.DocumentBuilderFactory;
54 import javax.xml.parsers.ParserConfigurationException;
55
56 import junit.framework.TestCase;
57
58 import org.jaxen.BaseXPath;
59 import org.jaxen.FunctionCallException;
60 import org.jaxen.JaxenException;
61 import org.jaxen.XPath;
62 import org.jaxen.dom.DOMXPath;
63 import org.w3c.dom.Document;
64 import org.xml.sax.SAXException;
65
66 /***
67 * @author Elliotte Rusty Harold
68 *
69 */
70 public class CountTest extends TestCase {
71
72 private Document doc;
73
74 public void setUp() throws ParserConfigurationException, SAXException, IOException
75 {
76 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
77 factory.setNamespaceAware(true);
78 DocumentBuilder builder = factory.newDocumentBuilder();
79 doc = builder.parse( "xml/basic.xml" );
80 }
81
82
83 public CountTest(String name) {
84 super(name);
85 }
86
87 public void testCount3()
88 {
89 try
90 {
91 XPath xpath = new DOMXPath( "count(3)" );
92 xpath.selectNodes( doc );
93 fail("Allowed count of number");
94 }
95 catch (FunctionCallException e)
96 {
97 assertEquals("count() function can only be used for node-sets", e.getMessage());
98 }
99 catch (Exception e)
100 {
101 e.printStackTrace();
102 fail( e.getMessage() );
103 }
104 }
105
106 public void testCountFunctionRequiresAtLeastOneArgument()
107 throws JaxenException {
108
109 BaseXPath xpath = new DOMXPath("count()");
110
111 try {
112 xpath.selectNodes(doc);
113 fail("Allowed count function with no arguments");
114 }
115 catch (FunctionCallException ex) {
116 assertNotNull(ex.getMessage());
117 }
118
119 }
120
121 public void testCountFunctionRequiresAtMostOneArgument()
122 throws JaxenException {
123
124 BaseXPath xpath = new DOMXPath("count(/*, /@*)");
125
126 try {
127 xpath.selectNodes(doc);
128 fail("Allowed count function with two arguments");
129 }
130 catch (FunctionCallException ex) {
131 assertNotNull(ex.getMessage());
132 }
133
134 }
135
136 public void testCountRootElement()
137 throws JaxenException {
138
139 BaseXPath xpath = new DOMXPath("count(/*)");
140 Double result = (Double) xpath.evaluate(doc);
141 assertEquals(1.0, result.doubleValue(), 0.00001);
142
143 }
144
145
146 }