package org.codehaus.mojo.jaxb2.schemageneration.postprocessing.schemaenhancement;
import org.codehaus.plexus.util.FileUtils;
import org.junit.Assert;
import org.junit.Test;
import javax.xml.XMLConstants;
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
* @author <a href="mailto:lj@jguru.se">Lennart Jörelid</a>
*/
public class SimpleNamespaceResolverTest {
public static final String SCHEMA_DIR = "/org/codehaus/mojo/jaxb2/helpers/";
private File getSchemaFile(String resource) {
return FileUtils.toFile(this.getClass().getResource(resource));
}
@Test
public void validateCollectingSchemaInfoForSingleNamespaceSchemaFile() {
// Assemble
final String schemaFile = "yetAnotherSchema.xsd";
final File resolvedSchemaFile = getSchemaFile(SCHEMA_DIR + schemaFile);
final SimpleNamespaceResolver unitUnderTest = new SimpleNamespaceResolver(resolvedSchemaFile);
// Act
final Map<String, String> namespaceURI2PrefixMap = unitUnderTest.getNamespaceURI2PrefixMap();
// Assert
Assert.assertEquals(schemaFile, unitUnderTest.getSourceFilename());
Assert.assertEquals("http://yet/another/namespace", unitUnderTest.getLocalNamespaceURI());
Assert.assertEquals(1, namespaceURI2PrefixMap.size());
Assert.assertEquals("xs", namespaceURI2PrefixMap.get(XMLConstants.W3C_XML_SCHEMA_NS_URI));
Assert.assertEquals(XMLConstants.W3C_XML_SCHEMA_NS_URI, unitUnderTest.getNamespaceURI("xs"));
}
@Test
public void validateCollectingSchemaInfoForMultipleNamespaceSchemaFile() {
// Assemble
final String schemaFile = "anotherSchema.xsd";
final SimpleNamespaceResolver unitUnderTest = new SimpleNamespaceResolver(getSchemaFile(SCHEMA_DIR + schemaFile));
// Act
final Map<String, String> namespaceURI2PrefixMap = unitUnderTest.getNamespaceURI2PrefixMap();
// Assert
Assert.assertEquals(schemaFile, unitUnderTest.getSourceFilename());
Assert.assertEquals("http://another/namespace", unitUnderTest.getLocalNamespaceURI());
Assert.assertEquals(3, namespaceURI2PrefixMap.size());
Assert.assertEquals("xs", namespaceURI2PrefixMap.get(XMLConstants.W3C_XML_SCHEMA_NS_URI));
Assert.assertEquals("yetAnother", namespaceURI2PrefixMap.get("http://yet/another/namespace"));
Assert.assertEquals("some", namespaceURI2PrefixMap.get("http://some/namespace"));
for (String current : namespaceURI2PrefixMap.keySet()) {
final String currentPrefix = namespaceURI2PrefixMap.get(current);
Assert.assertEquals(currentPrefix, unitUnderTest.getPrefix(current));
}
}
@Test(expected = IllegalArgumentException.class)
public void validateExceptionOnEmptyRelativePathToXmlFile() {
// Assemble
final String incorrectEmpty = "";
// Act & Assert
new SimpleNamespaceResolver(getSchemaFile(incorrectEmpty));
Assert.fail(
"Creating a SimpleNamespaceResolver with empty argument " + "should yield an IllegalArgumentException.");
}
@Test
public void validateExceptionOnNonexistentXmlSchemaFile() {
// Assemble
final String nonExistentPath = "this/file/does/not/exist.xml";
final File nonExistent = new File(nonExistentPath);
// Act & Assert
try {
new SimpleNamespaceResolver(nonExistent);
Assert.fail("Creating a SimpleNamespaceResolver connected to a nonexistent file "
+ "should yield an IllegalArgumentException.");
} catch (IllegalArgumentException e) {
// Expected
} catch (Exception e) {
Assert.fail("Expected IllegalArgumentException, but received [" + e.getClass().getName() + "]");
}
}
@Test
public void validateJaxbNamespaceResolverComplianceInThrowingExceptionOnNullNamespaceResolverArguments() {
// Assemble
final String schemaFile = "yetAnotherSchema.xsd";
final SimpleNamespaceResolver unitUnderTest = new SimpleNamespaceResolver(getSchemaFile(SCHEMA_DIR + schemaFile));
final String incorrectNull = null;
// Act & Assert
try {
unitUnderTest.getPrefix(incorrectNull);
Assert.fail("Running getPrefix with a null argument should yield an IllegalArgumentException.");
} catch (IllegalArgumentException e) {
// Expected
} catch (Exception e) {
Assert.fail("Expected IllegalArgumentException, but received [" + e.getClass().getName() + "]");
}
try {
unitUnderTest.getNamespaceURI(incorrectNull);
Assert.fail("Running getNamespaceURI with a null argument should yield an IllegalArgumentException.");
} catch (IllegalArgumentException e) {
// Expected
} catch (Exception e) {
Assert.fail("Expected IllegalArgumentException, but received [" + e.getClass().getName() + "]");
}
try {
unitUnderTest.getPrefixes(incorrectNull);
Assert.fail("Running getPrefixes with a null argument should yield an IllegalArgumentException.");
} catch (IllegalArgumentException e) {
// Expected
} catch (Exception e) {
Assert.fail("Expected IllegalArgumentException, but received [" + e.getClass().getName() + "]");
}
}
@Test
public void validatePrefixesIterator() {
// Assemble
final String schemaFile = "yetAnotherSchema.xsd";
final SimpleNamespaceResolver unitUnderTest = new SimpleNamespaceResolver(getSchemaFile(SCHEMA_DIR + schemaFile));
// Act
List<String> prefixesList = new ArrayList<String>();
for (Iterator<String> it = unitUnderTest.getPrefixes(XMLConstants.W3C_XML_SCHEMA_NS_URI); it.hasNext(); ) {
prefixesList.add(it.next());
}
// Assert
Assert.assertEquals(1, prefixesList.size());
Assert.assertEquals("xs", prefixesList.get(0));
}
}