1 /* $Header$
2 * $Revision$
3 * $Date$
4 *
5 * ====================================================================
6 *
7 * Copyright (C) 2005 Elliotte Rusty Harold.
8 * All rights reserved.
9 *
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
12 * are met:
13 *
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions, and the following disclaimer.
16 *
17 * 2. Redistributions in binary form must reproduce the above copyright
18 * notice, this list of conditions, and the disclaimer that follows
19 * these conditions in the documentation and/or other materials
20 * provided with the distribution.
21 *
22 * 3. The name "Jaxen" must not be used to endorse or promote products
23 * derived from this software without prior written permission. For
24 * written permission, please contact license@jaxen.org.
25 *
26 * 4. Products derived from this software may not be called "Jaxen", nor
27 * may "Jaxen" appear in their name, without prior written permission
28 * from the Jaxen Project Management (pm@jaxen.org).
29 *
30 * In addition, we request (but do not require) that you include in the
31 * end-user documentation provided with the redistribution and/or in the
32 * software itself an acknowledgement equivalent to the following:
33 * "This product includes software developed by the
34 * Jaxen Project (http://www.jaxen.org/)."
35 * Alternatively, the acknowledgment may be graphical using the logos
36 * available at http://www.jaxen.org/
37 *
38 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
39 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
40 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
41 * DISCLAIMED. IN NO EVENT SHALL THE Jaxen AUTHORS OR THE PROJECT
42 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
43 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
44 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
45 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
46 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
47 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
48 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
49 * SUCH DAMAGE.
50 *
51 * ====================================================================
52 * This software consists of voluntary contributions made by many
53 * individuals on behalf of the Jaxen Project and was originally
54 * created by bob mcwhirter <bob@werken.com> and
55 * James Strachan <jstrachan@apache.org>. For more information on the
56 * Jaxen Project, please see <http://www.jaxen.org/>.
57 *
58 * $Id$
59 */
60 package org.jaxen.dom;
61
62 import java.util.List;
63
64 import javax.xml.parsers.DocumentBuilderFactory;
65 import javax.xml.parsers.ParserConfigurationException;
66
67 import org.jaxen.JaxenException;
68 import org.jaxen.XPath;
69 import org.w3c.dom.Attr;
70 import org.w3c.dom.Element;
71
72 import junit.framework.TestCase;
73
74 public class NamespaceTest extends TestCase {
75
76 private org.w3c.dom.Document doc;
77
78 public NamespaceTest(String name) {
79 super(name);
80 }
81
82 protected void setUp() throws ParserConfigurationException {
83
84 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
85 factory.setNamespaceAware(true);
86 doc = factory.newDocumentBuilder().newDocument();
87
88 }
89
90 public void testMultipleNamespaceAxis() throws JaxenException {
91
92 org.w3c.dom.Element root = doc.createElement("root");
93 doc.appendChild(root);
94 Element child = doc.createElementNS("http://www.example.org", "child");
95 child.setAttributeNS("http://www.w3.org/2000/xmlns/" , "xmlns:pre", "value");
96 root.appendChild(child);
97
98 XPath xpath = new DOMXPath("namespace::node()");
99 List result = xpath.selectNodes(child);
100 assertEquals(3, result.size());
101
102 }
103
104 public void testNumberOfNamespaceNodes() throws JaxenException {
105
106 org.w3c.dom.Element root = doc.createElement("root");
107 doc.appendChild(root);
108 Element child = doc.createElementNS("http://www.example.org", "foo:child");
109 root.appendChild(child);
110
111 XPath xpath = new DOMXPath("//namespace::node()");
112 List result = xpath.selectNodes(doc);
113 assertEquals(3, result.size());
114 // 1 for xml prefix on root; 1 for foo prefix on child; 1 for xml prefix on child
115
116 }
117
118
119 public void testNamespaceAxis() throws JaxenException {
120
121 org.w3c.dom.Element root = doc.createElement("root");
122 doc.appendChild(root);
123 Element child = doc.createElementNS("http://www.example.org", "foo:child");
124 root.appendChild(child);
125
126 XPath xpath = new DOMXPath("namespace::node()");
127 List result = xpath.selectNodes(child);
128 assertEquals(2, result.size());
129
130 }
131
132
133 public void testUnprefixedNamespaceAxis() throws JaxenException {
134
135 org.w3c.dom.Element root = doc.createElement("root");
136 doc.appendChild(root);
137 Element child = doc.createElementNS("http://www.example.org", "child");
138 root.appendChild(child);
139
140 XPath xpath = new DOMXPath("namespace::node()");
141 List result = xpath.selectNodes(child);
142 assertEquals(2, result.size());
143
144 }
145
146
147 public void testNamespaceNodesReadFromAttributes() throws JaxenException {
148
149 org.w3c.dom.Element root = doc.createElement("root");
150 doc.appendChild(root);
151 Attr a = doc.createAttributeNS("http://www.example.org/", "a");
152 a.setNodeValue("value");
153 root.setAttributeNode(a);
154
155 XPath xpath = new DOMXPath("namespace::node()");
156 List result = xpath.selectNodes(root);
157 // one for the xml prefix; one from the attribute node
158 assertEquals(2, result.size());
159
160 }
161
162
163 }