package liquibase.resource; import static org.junit.Assert.assertEquals; import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; import java.util.Set; import org.junit.Test; public class AbstractResourceAccessorJavaTest { // @Test // public void testConvertToPathIsInsensibleToTrailingSlashOnRootPath() throws MalformedURLException { // { // AbstractResourceAccessor ara = new MyARA(); // ara.addRootPath(new URL("file:/a/")); // String path = ara.convertToPath("file:/a/b"); // assertEquals("b", path); // } // { // AbstractResourceAccessor ara = new MyARA(); // ara.addRootPath(new URL("file:/a")); // String path = ara.convertToPath("file:/a/b"); // //path must not be '/b' // assertEquals("b", path); // } // } // @Test // public void testConvertToPathIsConsistentGivenTheRootPathInsertionOrder() throws MalformedURLException { // //Fixed the order of insertion of the rootPaths the resolution convertToPath() must // //work always in the same way. Otherwise the content of the rootPath strings will influence // //the path generation and the identity of the changesets. // //This is a problem when you deploy on multiple machines with the same file structure but // //path different (e.g. because every country has a specific folder). // checkConvertToPathIsConsistentGivenTheRootPathInsertionOrder("file:/th/"); // checkConvertToPathIsConsistentGivenTheRootPathInsertionOrder("file:/sa/"); // } @Test public void testConvertToPathRelativeDoesntGenerateDoubleSlahes() { AbstractResourceAccessor ara = new MyARA(); URL rootPathURL = ara.toClassLoader().getResource("liquibase/resource/"); ara.addRootPath(rootPathURL); String path = ara.convertToPath("liquibase/resource/empty.txt", "changelogs/"); //liquibase.resource.AbstractResourceAccessor.convertToPath(String, String) introduces a double slash //then in liquibase.resource.AbstractResourceAccessor.convertToPath(String), if it matches the part //before the double slash, then an absolute path is generated instead of a relative one (E.g. '/changelogs/' //instead of 'changelogs/'). assertEquals("changelogs/", path); } private void checkConvertToPathIsConsistentGivenTheRootPathInsertionOrder( String prefix) throws MalformedURLException { AbstractResourceAccessor ara = new MyARA(); ara.addRootPath(new URL(prefix + "logs/")); ara.addRootPath(new URL(prefix)); //System.out.println(ara.getRootPaths()); String path = ara.convertToPath(prefix + "logs/cs-1.0.xml"); assertEquals("cs-1.0.xml", path); } private final static class MyARA extends AbstractResourceAccessor { @Override protected void init() { //We don't pollute the tests with external rootPaths } @Override public Set<InputStream> getResourcesAsStream(String path) throws IOException { return null; } @Override public Set<String> list(String relativeTo, String path, boolean includeFiles, boolean includeDirectories, boolean recursive) throws IOException { return null; } @Override public ClassLoader toClassLoader() { return Thread.currentThread().getContextClassLoader(); } } }