package org.jdom2.test.cases.jaxb;
import static org.jdom2.test.util.UnitTestUtil.checkException;
import static org.jdom2.test.util.UnitTestUtil.failNoException;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import java.util.Iterator;
import org.junit.Test;
import org.jdom2.JDOMConstants;
import org.jdom2.Namespace;
import org.jdom2.util.JDOMNamespaceContext;
@SuppressWarnings("javadoc")
public class TestJDOMNamespaceContext {
private final Namespace[] nsok = {Namespace.getNamespace("", "defns"), Namespace.XML_NAMESPACE,
Namespace.getNamespace("a", "urla"), Namespace.getNamespace("b", "urlb"),
Namespace.getNamespace("a2", "urla")};
private final Namespace[] nsmay = {Namespace.getNamespace("a", "urla"), Namespace.getNamespace("b", "urlb"),
Namespace.getNamespace("a2", "urla")};
private final Namespace[] nsduppfx = {Namespace.getNamespace("a", "urla"), Namespace.getNamespace("b", "urlb"),
Namespace.getNamespace("a", "urlx")};
private final Namespace[] nsnullmember = {Namespace.getNamespace("a", "urla"), Namespace.getNamespace("b", "urlb"),
null, Namespace.getNamespace("c", "urlc")};
@Test
public void testJDOMNamespaceContext() {
final JDOMNamespaceContext nsc = new JDOMNamespaceContext(nsok);
assertEquals("urla", nsc.getNamespaceURI("a"));
try {
new JDOMNamespaceContext(null);
failNoException(IllegalArgumentException.class);
} catch (Exception e) {
checkException(IllegalArgumentException.class, e);
}
try {
new JDOMNamespaceContext(nsduppfx);
failNoException(IllegalArgumentException.class);
} catch (Exception e) {
checkException(IllegalArgumentException.class, e);
}
try {
new JDOMNamespaceContext(nsnullmember);
failNoException(IllegalArgumentException.class);
} catch (Exception e) {
checkException(IllegalArgumentException.class, e);
}
}
@Test
public void testGetNamespaceURIWithDef() {
final JDOMNamespaceContext nsc = new JDOMNamespaceContext(nsok);
assertEquals("defns", nsc.getNamespaceURI(""));
assertEquals(Namespace.XML_NAMESPACE.getURI(), nsc.getNamespaceURI(Namespace.XML_NAMESPACE.getPrefix()));
assertEquals(JDOMConstants.NS_URI_XMLNS, nsc.getNamespaceURI(JDOMConstants.NS_PREFIX_XMLNS));
assertEquals("urla", nsc.getNamespaceURI("a"));
assertEquals("urla", nsc.getNamespaceURI("a2"));
assertEquals("urlb", nsc.getNamespaceURI("b"));
assertEquals("", nsc.getNamespaceURI("dummy"));
try {
nsc.getNamespaceURI(null);
failNoException(IllegalArgumentException.class);
} catch (Exception e) {
checkException(IllegalArgumentException.class, e);
}
}
@Test
public void testGetNamespaceURIWithoutDef() {
final JDOMNamespaceContext nsc = new JDOMNamespaceContext(nsmay);
assertEquals("", nsc.getNamespaceURI(""));
assertEquals(Namespace.XML_NAMESPACE.getURI(), nsc.getNamespaceURI(Namespace.XML_NAMESPACE.getPrefix()));
assertEquals(JDOMConstants.NS_URI_XMLNS, nsc.getNamespaceURI(JDOMConstants.NS_PREFIX_XMLNS));
assertEquals("urla", nsc.getNamespaceURI("a"));
assertEquals("urla", nsc.getNamespaceURI("a2"));
assertEquals("urlb", nsc.getNamespaceURI("b"));
assertEquals("", nsc.getNamespaceURI("dummy"));
try {
nsc.getNamespaceURI(null);
failNoException(IllegalArgumentException.class);
} catch (Exception e) {
checkException(IllegalArgumentException.class, e);
}
}
@Test
public void testGetPrefixWithDef() {
final JDOMNamespaceContext nsc = new JDOMNamespaceContext(nsok);
assertEquals("", nsc.getPrefix("defns"));
assertEquals(null, nsc.getPrefix(Namespace.NO_NAMESPACE.getURI()));
assertEquals(Namespace.XML_NAMESPACE.getPrefix(), nsc.getPrefix(Namespace.XML_NAMESPACE.getURI()));
assertEquals(JDOMConstants.NS_PREFIX_XMLNS, nsc.getPrefix(JDOMConstants.NS_URI_XMLNS));
assertEquals("a", nsc.getPrefix("urla"));
assertEquals("b", nsc.getPrefix("urlb"));
try {
nsc.getPrefix(null);
failNoException(IllegalArgumentException.class);
} catch (Exception e) {
checkException(IllegalArgumentException.class, e);
}
}
@Test
public void testGetPrefixWithoutDef() {
final JDOMNamespaceContext nsc = new JDOMNamespaceContext(nsmay);
assertEquals(null, nsc.getPrefix("defns"));
assertEquals(null, nsc.getPrefix(Namespace.NO_NAMESPACE.getURI()));
assertEquals(Namespace.XML_NAMESPACE.getPrefix(), nsc.getPrefix(Namespace.XML_NAMESPACE.getURI()));
assertEquals(JDOMConstants.NS_PREFIX_XMLNS, nsc.getPrefix(JDOMConstants.NS_URI_XMLNS));
assertEquals("a", nsc.getPrefix("urla"));
assertEquals("b", nsc.getPrefix("urlb"));
}
@Test
public void testGetPrefixesWithDef() {
final JDOMNamespaceContext nsc = new JDOMNamespaceContext(nsok);
checkIteratorEquals(nsc.getPrefixes("defns"), "");
checkIteratorEquals(nsc.getPrefixes(Namespace.NO_NAMESPACE.getURI()));
checkIteratorEquals(nsc.getPrefixes(Namespace.XML_NAMESPACE.getURI()), Namespace.XML_NAMESPACE.getPrefix());
checkIteratorEquals(nsc.getPrefixes(JDOMConstants.NS_URI_XMLNS), JDOMConstants.NS_PREFIX_XMLNS);
checkIteratorEquals(nsc.getPrefixes("urla"), "a", "a2");
checkIteratorEquals(nsc.getPrefixes("urlb"), "b");
try {
nsc.getPrefixes(null);
failNoException(IllegalArgumentException.class);
} catch (Exception e) {
checkException(IllegalArgumentException.class, e);
}
}
@Test
public void testGetPrefixesWithoutDef() {
final JDOMNamespaceContext nsc = new JDOMNamespaceContext(nsmay);
checkIteratorEquals(nsc.getPrefixes("defns"));
checkIteratorEquals(nsc.getPrefixes(Namespace.NO_NAMESPACE.getURI()));
checkIteratorEquals(nsc.getPrefixes(Namespace.XML_NAMESPACE.getURI()), Namespace.XML_NAMESPACE.getPrefix());
checkIteratorEquals(nsc.getPrefixes(JDOMConstants.NS_URI_XMLNS), JDOMConstants.NS_PREFIX_XMLNS);
checkIteratorEquals(nsc.getPrefixes("urla"), "a", "a2");
checkIteratorEquals(nsc.getPrefixes("urlb"), "b");
}
private void checkIteratorEquals(Iterator<?> prefixes, String...vals) {
final int sz = vals.length;
int c = 0;
while (c < sz && prefixes.hasNext()) {
final String v = (String)prefixes.next();
try {
prefixes.remove();
failNoException(UnsupportedOperationException.class);
} catch (Exception e) {
checkException(UnsupportedOperationException.class, e);
}
assertEquals("Expect '" + vals[c] + "' at position " + c + " but got '" + v + "'", vals[c], v);
c++;
}
if (prefixes.hasNext()) {
fail ("Expected there to be no more prefixes, but there are more than " + sz + " with the next one being '" + prefixes.next() + "'.");
}
if (c < sz) {
fail ("Expected there to be more prefixes (" + sz + ") , but there were only " + c + ".");
}
}
}