package uk.org.taverna.fswrap;
import static org.junit.Assert.*;
import java.net.URI;
import java.nio.file.FileSystem;
import java.nio.file.FileSystemAlreadyExistsException;
import java.nio.file.FileSystems;
import java.nio.file.spi.FileSystemProvider;
import java.util.Collections;
import java.util.Map;
import org.junit.After;
import org.junit.Test;
public class TestWrappedFSProvider {
@Test
public void isDiscovered() throws Exception {
for (FileSystemProvider fsp : FileSystemProvider.installedProviders()) {
if (fsp instanceof WrappedFileSystemProvider) {
return;
}
// System.out.println(fsp);
// System.out.println(fsp.getScheme());
}
fail("Could not find file system provider "
+ WrappedFileSystemProvider.class);
}
@Test
public void constructor() throws Exception {
Map<String, ?> env = Collections.emptyMap();
URI uri = URI.create("wrap:file:/");
try (WrappedFileSystem fs = new WrappedFileSystemProvider().newFileSystem(
uri, env)) {
assertNotNull(fs);
}
}
@Test
public void newFileSystemFromURI() throws Exception {
Map<String, ?> env = Collections.emptyMap();
URI uri = URI.create("wrap:file:///");
try (FileSystem fs = FileSystems.newFileSystem(uri, env)) {
assertTrue(fs instanceof WrappedFileSystem);
assertEquals(FileSystems.getDefault(),
((WrappedFileSystem) fs).getOriginalFilesystem());
}
}
@Test(expected = FileSystemAlreadyExistsException.class)
public void newFileSystemTwiceShouldFail() throws Exception {
Map<String, ?> env = Collections.emptyMap();
URI uri = URI.create("wrap:file:///");
try (FileSystem fs = FileSystems.newFileSystem(uri, env);
FileSystem fs2 = FileSystems.newFileSystem(uri, env)) {
}
}
@Test
public void wrapDefaultFs() throws Exception {
try (WrappedFileSystem fs = WrappedFileSystemProvider.wrapDefaultFs()) {
assertNotNull(fs);
assertEquals(FileSystems.getDefault(), fs.getOriginalFilesystem());
}
}
@Test
public void toWrappedUri() throws Exception {
WrappedFileSystemProvider fsp = new WrappedFileSystemProvider();
URI origUri = URI.create("ex://test");
URI wrappedUri = fsp.toWrappedUri(origUri);
assertEquals("wrap", wrappedUri.getScheme());
assertEquals("ex://test", wrappedUri.getRawSchemeSpecificPart());
assertEquals(origUri, fsp.toOrigUri(wrappedUri));
}
@Test
public void toWrappedUriEvil() throws Exception {
WrappedFileSystemProvider fsp = new WrappedFileSystemProvider();
URI origUri = URI
.create("http://fred:soup@example.com/very/long/path%20with%20spaces/#andAHash%20with%20spaces");
URI wrappedUri = fsp.toWrappedUri(origUri);
assertEquals(null, wrappedUri.getFragment());
// Double escaped now
assertTrue(wrappedUri.toASCIIString().contains("%2520with%2520spaces"));
URI restored = fsp.toOrigUri(wrappedUri);
assertFalse(restored.toASCIIString().contains("%2520with%2520spaces"));
assertEquals(origUri, restored);
}
}