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  package org.springframework.xml.namespace;
17  
18  import java.util.Collections;
19  import java.util.Iterator;
20  
21  import javax.xml.XMLConstants;
22  
23  import junit.framework.TestCase;
24  
25  public class SimpleNamespaceContextTest extends TestCase {
26  
27      private SimpleNamespaceContext context;
28  
29      protected void setUp() throws Exception {
30          context = new SimpleNamespaceContext();
31          context.bindNamespaceUri("prefix", "namespaceURI");
32      }
33  
34      public void testGetNamespaceURI() {
35          assertEquals("Invalid namespaceURI for default namespace", "", context
36                  .getNamespaceURI(XMLConstants.DEFAULT_NS_PREFIX));
37          String defaultNamespaceUri = "defaultNamespace";
38          context.bindNamespaceUri(XMLConstants.DEFAULT_NS_PREFIX, defaultNamespaceUri);
39          assertEquals("Invalid namespaceURI for default namespace", defaultNamespaceUri, context
40                  .getNamespaceURI(XMLConstants.DEFAULT_NS_PREFIX));
41          assertEquals("Invalid namespaceURI for bound prefix", "namespaceURI", context.getNamespaceURI("prefix"));
42          assertEquals("Invalid namespaceURI for unbound prefix", "", context.getNamespaceURI("unbound"));
43          assertEquals("Invalid namespaceURI for namespace prefix", XMLConstants.XML_NS_URI, context
44                  .getNamespaceURI(XMLConstants.XML_NS_PREFIX));
45          assertEquals("Invalid namespaceURI for attribute prefix", XMLConstants.XMLNS_ATTRIBUTE_NS_URI, context
46                  .getNamespaceURI(XMLConstants.XMLNS_ATTRIBUTE));
47  
48      }
49  
50      public void testGetPrefix() {
51          context.bindDefaultNamespaceUri("defaultNamespaceURI");
52          assertEquals("Invalid prefix for default namespace", XMLConstants.DEFAULT_NS_PREFIX, context.getPrefix("defaultNamespaceURI"));
53          assertEquals("Invalid prefix for bound namespace", "prefix", context.getPrefix("namespaceURI"));
54          assertNull("Invalid prefix for unbound namespace", context.getPrefix("unbound"));
55          assertEquals("Invalid prefix for namespace", XMLConstants.XML_NS_PREFIX, context
56                  .getPrefix(XMLConstants.XML_NS_URI));
57          assertEquals("Invalid prefix for attribute namespace", XMLConstants.XMLNS_ATTRIBUTE, context
58                  .getPrefix(XMLConstants.XMLNS_ATTRIBUTE_NS_URI));
59      }
60  
61      public void testGetPrefixes() {
62          context.bindDefaultNamespaceUri("defaultNamespaceURI");
63          assertPrefixes("defaultNamespaceURI", XMLConstants.DEFAULT_NS_PREFIX);
64          assertPrefixes("namespaceURI", "prefix");
65          assertFalse("Invalid prefix for unbound namespace", context.getPrefixes("unbound").hasNext());
66          assertPrefixes(XMLConstants.XML_NS_URI, XMLConstants.XML_NS_PREFIX);
67          assertPrefixes(XMLConstants.XMLNS_ATTRIBUTE_NS_URI, XMLConstants.XMLNS_ATTRIBUTE);
68      }
69  
70      public void testMultiplePrefixes() {
71          context.bindNamespaceUri("prefix1", "namespace");
72          context.bindNamespaceUri("prefix2", "namespace");
73          Iterator iterator = context.getPrefixes("namespace");
74          assertNotNull("getPrefixes returns null", iterator);
75          assertTrue("iterator is empty", iterator.hasNext());
76          String result = (String) iterator.next();
77          assertTrue("Invalid prefix", result.equals("prefix1") || result.equals("prefix2"));
78          assertTrue("iterator is empty", iterator.hasNext());
79          result = (String) iterator.next();
80          assertTrue("Invalid prefix", result.equals("prefix1") || result.equals("prefix2"));
81          assertFalse("iterator contains more than two values", iterator.hasNext());
82      }
83  
84      private void assertPrefixes(String namespaceUri, String prefix) {
85          Iterator iterator = context.getPrefixes(namespaceUri);
86          assertNotNull("getPrefixes returns null", iterator);
87          assertTrue("iterator is empty", iterator.hasNext());
88          String result = (String) iterator.next();
89          assertEquals("Invalid prefix", prefix, result);
90          assertFalse("iterator contains multiple values", iterator.hasNext());
91      }
92  
93      public void testGetBoundPrefixes() throws Exception {
94          Iterator iterator = context.getBoundPrefixes();
95          assertNotNull("getPrefixes returns null", iterator);
96          assertTrue("iterator is empty", iterator.hasNext());
97          String result = (String) iterator.next();
98          assertEquals("Invalid prefix", "prefix", result);
99          assertFalse("iterator contains multiple values", iterator.hasNext());
100     }
101 
102     public void testSetBindings() throws Exception {
103         context.setBindings(Collections.singletonMap("prefix", "namespace"));
104         assertEquals("Invalid namespace uri", "namespace", context.getNamespaceURI("prefix"));
105     }
106 
107     public void testRemoveBinding() {
108         context.clear();
109         String prefix1 = "prefix1";
110         String prefix2 = "prefix2";
111         String namespaceUri = "namespaceUri";
112         context.bindNamespaceUri(prefix1,  namespaceUri);
113         context.bindNamespaceUri(prefix2,  namespaceUri);
114         Iterator iter = context.getPrefixes(namespaceUri);
115         assertTrue("iterator is empty", iter.hasNext());
116         assertEquals(prefix1, iter.next());
117         assertTrue("iterator is empty", iter.hasNext());
118         assertEquals(prefix2, iter.next());
119         assertFalse("iterator not empty", iter.hasNext());
120 
121         context.removeBinding(prefix1);
122 
123         iter = context.getPrefixes(namespaceUri);
124         assertTrue("iterator is empty", iter.hasNext());
125         assertEquals(prefix2, iter.next());
126         assertFalse("iterator not empty", iter.hasNext());
127 
128         context.removeBinding(prefix2);
129 
130         iter = context.getPrefixes(namespaceUri);
131         assertFalse("iterator not empty", iter.hasNext());
132     }
133 
134     public void testHasBinding() {
135         context.clear();
136         String prefix = "prefix";
137         assertFalse("Context has binding", context.hasBinding(prefix));
138         String namespaceUri = "namespaceUri";
139         context.bindNamespaceUri(prefix, namespaceUri);
140         assertTrue("Context has no binding", context.hasBinding(prefix));
141     }
142 
143     public void testDefaultNamespaceMultiplePrefixes() {
144         String defaultNamespace = "http://springframework.org/spring-ws";
145         context.bindDefaultNamespaceUri(defaultNamespace);
146         context.bindNamespaceUri("prefix", defaultNamespace);
147         assertEquals("Invalid prefix", XMLConstants.DEFAULT_NS_PREFIX, context.getPrefix(defaultNamespace));
148         Iterator iterator = context.getPrefixes(defaultNamespace);
149         assertNotNull("getPrefixes returns null", iterator);
150         assertTrue("iterator is empty", iterator.hasNext());
151         String result = (String) iterator.next();
152         assertTrue("Invalid prefix", result.equals(XMLConstants.DEFAULT_NS_PREFIX) || result.equals("prefix"));
153         assertTrue("iterator is empty", iterator.hasNext());
154         result = (String) iterator.next();
155         assertTrue("Invalid prefix", result.equals(XMLConstants.DEFAULT_NS_PREFIX) || result.equals("prefix"));
156         assertFalse("iterator contains more than two values", iterator.hasNext());
157     }
158 
159 }