1   /*
2    * Copyright 2005 the original author or authors.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *      http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  package org.springframework.xml.namespace;
18  
19  import javax.xml.namespace.QName;
20  import javax.xml.parsers.DocumentBuilder;
21  import javax.xml.parsers.DocumentBuilderFactory;
22  
23  import junit.framework.TestCase;
24  import org.springframework.util.StringUtils;
25  import org.w3c.dom.Document;
26  import org.w3c.dom.Element;
27  
28  public class QNameUtilsTest extends TestCase {
29  
30      public void testValidQNames() {
31          assertTrue("Namespace QName not validated", QNameUtils.validateQName("{namespace}local"));
32          assertTrue("No Namespace QName not validated", QNameUtils.validateQName("local"));
33      }
34  
35      public void testInvalidQNames() {
36          assertFalse("Null QName validated", QNameUtils.validateQName(null));
37          assertFalse("Empty QName validated", QNameUtils.validateQName(""));
38          assertFalse("Invalid QName validated", QNameUtils.validateQName("{namespace}"));
39          assertFalse("Invalid QName validated", QNameUtils.validateQName("{namespace"));
40      }
41  
42      public void testGetQNameForNodeNoNamespace() throws Exception {
43          DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
44          DocumentBuilder builder = factory.newDocumentBuilder();
45          Document document = builder.newDocument();
46          Element element = document.createElement("localname");
47          QName qName = QNameUtils.getQNameForNode(element);
48          assertNotNull("getQNameForNode returns null", qName);
49          assertEquals("QName has invalid localname", "localname", qName.getLocalPart());
50          assertFalse("Qname has invalid namespace", StringUtils.hasLength(qName.getNamespaceURI()));
51          assertFalse("Qname has invalid prefix", StringUtils.hasLength(qName.getPrefix()));
52  
53      }
54  
55      public void testGetQNameForNodeNoPrefix() throws Exception {
56          DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
57          DocumentBuilder builder = factory.newDocumentBuilder();
58          Document document = builder.newDocument();
59          Element element = document.createElementNS("namespace", "localname");
60          QName qName = QNameUtils.getQNameForNode(element);
61          assertNotNull("getQNameForNode returns null", qName);
62          assertEquals("QName has invalid localname", "localname", qName.getLocalPart());
63          assertEquals("Qname has invalid namespace", "namespace", qName.getNamespaceURI());
64          assertFalse("Qname has invalid prefix", StringUtils.hasLength(qName.getPrefix()));
65      }
66  
67      public void testGetQNameForNode() throws Exception {
68          DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
69          DocumentBuilder builder = factory.newDocumentBuilder();
70          Document document = builder.newDocument();
71          Element element = document.createElementNS("namespace", "prefix:localname");
72          QName qName = QNameUtils.getQNameForNode(element);
73          assertNotNull("getQNameForNode returns null", qName);
74          assertEquals("QName has invalid localname", "localname", qName.getLocalPart());
75          assertEquals("Qname has invalid namespace", "namespace", qName.getNamespaceURI());
76          assertEquals("Qname has invalid prefix", "prefix", qName.getPrefix());
77      }
78  
79      public void testToQualifiedNamePrefix() throws Exception {
80          QName qName = new QName("namespace", "localName", "prefix");
81          String result = QNameUtils.toQualifiedName(qName);
82          assertEquals("Invalid result", "prefix:localName", result);
83      }
84  
85      public void testToQualifiedNameNoPrefix() throws Exception {
86          QName qName = new QName("localName");
87          String result = QNameUtils.toQualifiedName(qName);
88          assertEquals("Invalid result", "localName", result);
89      }
90  
91      public void testToQNamePrefix() throws Exception {
92          QName result = QNameUtils.toQName("namespace", "prefix:localName");
93          assertEquals("invalid namespace", "namespace", result.getNamespaceURI());
94          assertEquals("invalid prefix", "prefix", result.getPrefix());
95          assertEquals("invalid localname", "localName", result.getLocalPart());
96      }
97  
98      public void testToQNameNoPrefix() throws Exception {
99          QName result = QNameUtils.toQName("namespace", "localName");
100         assertEquals("invalid namespace", "namespace", result.getNamespaceURI());
101         assertEquals("invalid prefix", "", result.getPrefix());
102         assertEquals("invalid localname", "localName", result.getLocalPart());
103     }
104 
105 
106 }