package thredds.crawlabledataset;
import org.junit.Test;
import static org.junit.Assert.*;
public class CrawlableDatasetUtilsTest {
@Test
public void checkNullEmptyPath() {
String path = null;
String[] pathSegments = CrawlableDatasetUtils.getPathSegments( path);
assertFalse( CrawlableDatasetUtils.isValidAbsolutePath( pathSegments));
assertFalse( CrawlableDatasetUtils.isValidRelativePath( pathSegments));
path = "";
pathSegments = CrawlableDatasetUtils.getPathSegments( path);
assertFalse( CrawlableDatasetUtils.isValidAbsolutePath( pathSegments));
assertFalse( CrawlableDatasetUtils.isValidRelativePath(pathSegments));
}
@Test(expected = IllegalArgumentException.class)
public void checkStepDownFromNullPath() {
String[] pathSegments = CrawlableDatasetUtils.getPathSegments( null);
CrawlableDatasetUtils.stepDownRelativePath( pathSegments);
}
@Test(expected = IllegalArgumentException.class)
public void checkStepDownFromEmptyPath() {
String[] pathSegments = CrawlableDatasetUtils.getPathSegments( "");
CrawlableDatasetUtils.stepDownRelativePath( pathSegments);
}
@Test
public void checkSlashOnly() {
String path = "/";
String[] pathSegments = CrawlableDatasetUtils.getPathSegments( path);
assertTrue( CrawlableDatasetUtils.isValidAbsolutePath( pathSegments));
assertFalse( CrawlableDatasetUtils.isValidRelativePath( pathSegments));
assertEquals("Reformulated path", removeAnyTrailingSlash( path), CrawlableDatasetUtils.getPath(pathSegments));
}
@Test(expected = IllegalArgumentException.class)
public void checkStepDownFromSlashOnly() {
String[] pathSegments = CrawlableDatasetUtils.getPathSegments( "/");
CrawlableDatasetUtils.stepDownRelativePath( pathSegments);
}
@Test
public void checkSingleSegmentRelative() {
String path = "a";
String[] pathSegments = CrawlableDatasetUtils.getPathSegments(path);
assertFalse( CrawlableDatasetUtils.isValidAbsolutePath( pathSegments));
assertTrue(CrawlableDatasetUtils.isValidRelativePath(pathSegments));
assertEquals("Reformulated path", removeAnyTrailingSlash( path), CrawlableDatasetUtils.getPath(pathSegments));
}
@Test(expected = IllegalArgumentException.class)
public void checkStepDownFromSingleSegmentRelative() {
String[] pathSegments = CrawlableDatasetUtils.getPathSegments( "a");
CrawlableDatasetUtils.stepDownRelativePath( pathSegments);
}
@Test
public void checkTwoSegmentsRelative() {
String path = "a/b";
String[] pathSegments = CrawlableDatasetUtils.getPathSegments( path);
assertFalse( CrawlableDatasetUtils.isValidAbsolutePath( pathSegments));
assertTrue(CrawlableDatasetUtils.isValidRelativePath(pathSegments));
assertEquals("b", CrawlableDatasetUtils.stepDownRelativePath(pathSegments));
assertEquals( "Reformulated path", removeAnyTrailingSlash( path), CrawlableDatasetUtils.getPath(pathSegments));
}
@Test
public void checkThreeSegmentsRelative() {
String path = "a/b/c";
String[] pathSegments = CrawlableDatasetUtils.getPathSegments( path);
assertFalse( CrawlableDatasetUtils.isValidAbsolutePath( pathSegments));
assertTrue( CrawlableDatasetUtils.isValidRelativePath( pathSegments));
assertEquals( "b/c", CrawlableDatasetUtils.stepDownRelativePath( pathSegments));
assertEquals( "Reformulated path", removeAnyTrailingSlash( path), CrawlableDatasetUtils.getPath(pathSegments));
}
@Test
public void checkFourSegmentsRelative() {
String path = "a/b/c/d";
String[] pathSegments = CrawlableDatasetUtils.getPathSegments( path);
assertFalse( CrawlableDatasetUtils.isValidAbsolutePath( pathSegments));
assertTrue( CrawlableDatasetUtils.isValidRelativePath( pathSegments));
assertEquals( "b/c/d", CrawlableDatasetUtils.stepDownRelativePath( pathSegments));
assertEquals( "Reformulated path", removeAnyTrailingSlash( path), CrawlableDatasetUtils.getPath(pathSegments));
}
@Test
public void checkFourSegmentsRelativeWithTrailingSlash() {
String path = "a/b/c/d/";
String[] pathSegments = CrawlableDatasetUtils.getPathSegments( path);
assertFalse( CrawlableDatasetUtils.isValidAbsolutePath( pathSegments));
assertTrue( CrawlableDatasetUtils.isValidRelativePath( pathSegments));
assertEquals( "b/c/d", CrawlableDatasetUtils.stepDownRelativePath( pathSegments));
assertEquals( "Reformulated path", removeAnyTrailingSlash( path), CrawlableDatasetUtils.getPath(pathSegments));
}
@Test
public void checkSingleSegmentAbsolute() {
String path = "/a";
String[] pathSegments = CrawlableDatasetUtils.getPathSegments( path);
assertTrue( CrawlableDatasetUtils.isValidAbsolutePath( pathSegments));
assertFalse( CrawlableDatasetUtils.isValidRelativePath( pathSegments));
assertEquals( "Reformulated path", removeAnyTrailingSlash( path), CrawlableDatasetUtils.getPath(pathSegments));
}
@Test(expected = IllegalArgumentException.class)
public void checkStepDownFromSingleSegmentAbsolute() {
String path = "/a";
String[] pathSegments = CrawlableDatasetUtils.getPathSegments( path);
CrawlableDatasetUtils.stepDownRelativePath( pathSegments);
}
@Test
public void checkSingleSegmentAbsoluteWithTrailingSlash() {
String path = "/a/";
String[] pathSegments = CrawlableDatasetUtils.getPathSegments( path);
assertTrue( CrawlableDatasetUtils.isValidAbsolutePath( pathSegments));
assertFalse( CrawlableDatasetUtils.isValidRelativePath( pathSegments));
assertEquals( "Reformulated path", removeAnyTrailingSlash( path), CrawlableDatasetUtils.getPath(pathSegments));
}
@Test(expected = IllegalArgumentException.class)
public void checkStepDownFromSingleSegmentAbsoluteWithTrailingSlash() {
String[] pathSegments = CrawlableDatasetUtils.getPathSegments( "/a/");
CrawlableDatasetUtils.stepDownRelativePath( pathSegments);
}
@Test
public void checkTwoSegmentsAbsolute() {
String path = "/a/b";
String[] pathSegments = CrawlableDatasetUtils.getPathSegments( path);
assertTrue( CrawlableDatasetUtils.isValidAbsolutePath( pathSegments));
assertFalse( CrawlableDatasetUtils.isValidRelativePath( pathSegments));
//assertEquals( "b", CrawlableDatasetUtils.stepDownRelativePath(pathSegments));
assertEquals( "Reformulated path", removeAnyTrailingSlash( path), CrawlableDatasetUtils.getPath(pathSegments));
}
@Test(expected = IllegalArgumentException.class)
public void checkStepDownFromTwoSegmentAbsolute() {
String[] pathSegments = CrawlableDatasetUtils.getPathSegments( "/a/b");
CrawlableDatasetUtils.stepDownRelativePath( pathSegments);
}
@Test
public void checkThreeSegmentsAbsolute() {
String path = "/a/b/c";
String[] pathSegments = CrawlableDatasetUtils.getPathSegments( path);
assertTrue( CrawlableDatasetUtils.isValidAbsolutePath( pathSegments));
assertFalse( CrawlableDatasetUtils.isValidRelativePath( pathSegments));
assertEquals( "Reformulated path", removeAnyTrailingSlash( path), CrawlableDatasetUtils.getPath(pathSegments));
}
@Test
public void checkFourSegmentsAbsolute() {
String path = "/a/b/c/d";
String[] pathSegments = CrawlableDatasetUtils.getPathSegments( path);
assertTrue( CrawlableDatasetUtils.isValidAbsolutePath( pathSegments));
assertFalse( CrawlableDatasetUtils.isValidRelativePath( pathSegments));
assertEquals( "Reformulated path", removeAnyTrailingSlash( path), CrawlableDatasetUtils.getPath(pathSegments));
}
@Test
public void checkFourSegmentsAbsoluteWithTrailingSlash() {
String path = "/a/b/c/d/";
String[] pathSegments = CrawlableDatasetUtils.getPathSegments( path);
assertTrue( CrawlableDatasetUtils.isValidAbsolutePath( pathSegments));
assertFalse( CrawlableDatasetUtils.isValidRelativePath( pathSegments));
assertEquals( "Reformulated path", removeAnyTrailingSlash( path), CrawlableDatasetUtils.getPath(pathSegments));
}
private static String removeAnyTrailingSlash( String path) {
if ( path == null || path.length() < 2 || ! path.endsWith( "/"))
return path;
return path.substring( 0, path.length() - 1 );
}
}