1
2
3
4
5
6
7
8
9
10
11
12
13
14
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 }