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