/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.cxf.staxutils.transform;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import javax.xml.namespace.NamespaceContext;
import org.junit.Assert;
import org.junit.Test;
public class DelegatingNamespaceContextTest extends Assert {
@Test
public void testSomeAddsAndGets() throws Exception {
DelegatingNamespaceContext dnc = getTestDelegatingNamespaceContext();
dnc.down(); //1
dnc.addPrefix("p1", "urn:foo1");
dnc.addPrefix("p2", "urn:foo2");
assertEquals("urn:foo0", dnc.getNamespaceURI("p0"));
assertEquals("urn:foo1", dnc.getNamespaceURI("p1"));
assertEquals("urn:foo2", dnc.getNamespaceURI("p2"));
assertEquals("p0", dnc.getPrefix("urn:foo0"));
assertEquals("p1", dnc.getPrefix("urn:foo1"));
assertEquals("p2", dnc.getPrefix("urn:foo2"));
verifyPrefixes(dnc.getPrefixes("urn:foo1"), new String[]{"p1"});
verifyPrefixes(dnc.getPrefixes("urn:foo2"), new String[]{"p2"});
dnc.down(); //2
dnc.addPrefix("p11", "urn:foo1");
dnc.addPrefix("p2", "urn:foo22");
dnc.addPrefix("p3", "urn:foo3");
assertEquals("urn:foo1", dnc.getNamespaceURI("p1"));
assertEquals("urn:foo1", dnc.getNamespaceURI("p11"));
assertEquals("urn:foo22", dnc.getNamespaceURI("p2"));
assertEquals("urn:foo3", dnc.getNamespaceURI("p3"));
String p = dnc.getPrefix("urn:foo1");
assertTrue("p1".equals(p) || "p11".equals(p));
assertNull(dnc.getPrefix("urn:foo2"));
assertEquals("p2", dnc.getPrefix("urn:foo22"));
assertEquals("p3", dnc.getPrefix("urn:foo3"));
p = dnc.findUniquePrefix("urn:foo4");
assertNotNull(p);
assertEquals(p, dnc.getPrefix("urn:foo4"));
assertEquals("urn:foo4", dnc.getNamespaceURI(p));
verifyPrefixes(dnc.getPrefixes("urn:foo1"), new String[]{"p1", "p11"});
verifyPrefixes(dnc.getPrefixes("urn:foo2"), new String[]{});
verifyPrefixes(dnc.getPrefixes("urn:foo22"), new String[]{"p2"});
verifyPrefixes(dnc.getPrefixes("urn:foo3"), new String[]{"p3"});
dnc.up(); //1
assertEquals("urn:foo1", dnc.getNamespaceURI("p1"));
assertNull(dnc.getNamespaceURI("p11"));
assertEquals("urn:foo2", dnc.getNamespaceURI("p2"));
assertNull(dnc.getNamespaceURI("p3"));
assertEquals("p1", dnc.getPrefix("urn:foo1"));
assertNull(dnc.getPrefix("urn:foo11"));
assertEquals("p2", dnc.getPrefix("urn:foo2"));
assertNull(dnc.getPrefix("urn:foo22"));
assertNull(dnc.getPrefix("urn:foo3"));
verifyPrefixes(dnc.getPrefixes("urn:foo1"), new String[]{"p1"});
verifyPrefixes(dnc.getPrefixes("urn:foo2"), new String[]{"p2"});
verifyPrefixes(dnc.getPrefixes("urn:foo3"), new String[]{});
dnc.up(); //0
try {
dnc.up(); //-1
fail("not allowed to go up");
} catch (Exception e) {
// ignore
}
}
@Test
public void testSomeAddsWithDuplicatedPrefixName() throws Exception {
DelegatingNamespaceContext dnc = getTestDelegatingNamespaceContext();
dnc.down(); // 1
dnc.addPrefix("p00", "urn:foo0");
dnc.addPrefix("p1", "urn:foo1");
dnc.addPrefix("p2", "urn:foo2");
assertEquals("urn:foo0", dnc.getNamespaceURI("p0"));
assertEquals("urn:foo0", dnc.getNamespaceURI("p00"));
assertEquals("urn:foo1", dnc.getNamespaceURI("p1"));
assertEquals("urn:foo2", dnc.getNamespaceURI("p2"));
assertTrue("p0".equals(dnc.getPrefix("urn:foo0")) || "p00".equals(dnc.getPrefix("urn:foo0")));
assertEquals("p1", dnc.getPrefix("urn:foo1"));
assertEquals("p2", dnc.getPrefix("urn:foo2"));
verifyPrefixes(dnc.getPrefixes("urn:foo1"), new String[] {"p1"});
verifyPrefixes(dnc.getPrefixes("urn:foo2"), new String[] {"p2"});
verifyPrefixes(dnc.getPrefixes("urn:foo0"), new String[] {"p0", "p00"});
}
private DelegatingNamespaceContext getTestDelegatingNamespaceContext() {
return new DelegatingNamespaceContext(
new NamespaceContext() {
public String getNamespaceURI(String prefix) {
return "p0".equals(prefix) ? "urn:foo0" : null;
}
public String getPrefix(String ns) {
return "urn:foo0".equals(ns) ? "p0" : null;
}
public Iterator<String> getPrefixes(String ns) {
return null;
}
},
Collections.singletonMap("urn:foo5", "urn:foo55"));
}
private void verifyPrefixes(Iterator<String> prefixes, String[] values) {
Set<String> tmp = new HashSet<>();
while (prefixes.hasNext()) {
tmp.add(prefixes.next());
}
for (String v : values) {
if (tmp.contains(v)) {
tmp.remove(v);
} else {
fail("not expected: " + v);
}
}
assertTrue(tmp.isEmpty());
}
}