package org.tigris.juxy.util;
import junit.framework.TestCase;
import javax.xml.transform.Source;
import javax.xml.transform.TransformerException;
import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
/**
*/
public class UTestJuxyURIResolver extends TestCase {
private JuxyURIResolver resolver;
protected void setUp() throws Exception {
resolver = new JuxyURIResolver();
}
private URI fileToURI(String path) throws IOException {
return new File(path).getCanonicalFile().toURI();
}
public void testResolveNonExistentFile() throws TransformerException {
assertNull(resolver.resolve(null, null));
assertNull(resolver.resolve("unknown_file.xml", null));
}
public void testRelativeResolveToExistingFile() throws Exception {
Source src = resolver.resolve("tests/xml/document.xml", null);
assertNotNull(src);
assertEquals(fileToURI("tests/xml/document.xml"), new URI(src.getSystemId()));
}
public void testRelativeResolveWithNotEmptyBase() throws Exception {
Source src = resolver.resolve("tests/xml/document.xml", System.getProperty("user.dir"));
assertNotNull(src);
assertEquals(fileToURI("tests/xml/document.xml"), new URI(src.getSystemId()));
}
public void testAbsoluteResolveWithNotEmptyBase() throws Exception {
Source src = resolver.resolve(new File("tests/xml/document.xml").getAbsolutePath(), System.getProperty("user.dir"));
assertNotNull(src);
assertEquals(fileToURI("tests/xml/document.xml"), new URI(src.getSystemId()));
}
public void testAbsoluteResolveWithEmptyBase() throws Exception {
Source src = resolver.resolve(new File("tests/xml/document.xml").getAbsoluteFile().toURI().toString(), "");
assertNotNull(src);
assertEquals(fileToURI("tests/xml/document.xml"), new URI(src.getSystemId()));
}
public void testResourceResolving_NotWithinJar() throws TransformerException, URISyntaxException {
String expectedURI = getClass().getResource("/xml/resolver/file.xml").toString();
Source src = resolver.resolve("/xml/resolver/file.xml", null);
assertNotNull(src);
assertEquals(expectedURI, src.getSystemId());
src = resolver.resolve("file.xml", "/xml/resolver/file.xsl");
assertNotNull(src);
assertEquals(expectedURI, src.getSystemId());
src = resolver.resolve("../file.xml", "/xml/resolver/path/file.xsl");
assertNotNull(src);
assertEquals(expectedURI, src.getSystemId());
}
public void testResourceResolving_WithinJar() throws TransformerException, URISyntaxException {
String expectedURI = getClass().getResource("/xml/document.xml").toString();
Source src = resolver.resolve("/xml/document.xml", null);
assertNotNull(src);
assertEquals(expectedURI, src.getSystemId());
String expectedXsltURI = getClass().getResource("/xml/resolver/resource-import.xsl").toString();
src = resolver.resolve("resource-import.xsl", expectedXsltURI);
assertNotNull(src);
assertEquals(expectedXsltURI, src.getSystemId());
src = resolver.resolve("../document.xml", expectedXsltURI);
assertNotNull(src);
assertEquals(expectedURI, src.getSystemId());
src = resolver.resolve(expectedURI, expectedXsltURI);
assertNotNull(src);
assertEquals(expectedURI, src.getSystemId());
}
public void testMoreThanOneResourceWithSameName() throws TransformerException, URISyntaxException, IOException {
List resources = new ArrayList();
Enumeration resourcesEnum = getClass().getClassLoader().getResources("xml/document.xml");
while (resourcesEnum.hasMoreElements()) {
resources.add(resourcesEnum.nextElement());
}
assertEquals(3, resources.size());
assertTrue(resources.get(0).toString().contains("resources.jar"));
assertTrue(resources.get(1).toString().contains("test-classes"));
assertTrue(resources.get(2).toString().contains("resources2.jar"));
Enumeration expected = getClass().getClassLoader().getResources("xml/imported.xsl");
String expectedURLInFirstJar = expected.nextElement().toString();
String expectedURLInClasses = expected.nextElement().toString();
String expectedURLInSecondJar = expected.nextElement().toString();
Source src = resolver.resolve("imported.xsl", resources.get(0).toString());
assertNotNull(src);
assertEquals(expectedURLInFirstJar, src.getSystemId());
src = resolver.resolve("imported.xsl", resources.get(1).toString());
assertNotNull(src);
assertEquals(expectedURLInClasses, src.getSystemId());
src = resolver.resolve("imported.xsl", resources.get(2).toString());
assertNotNull(src);
assertEquals(expectedURLInSecondJar, src.getSystemId());
}
}