package aQute.lib.io;
import java.io.File;
import java.io.InputStream;
import java.nio.ByteBuffer;
import java.nio.file.Files;
import junit.framework.TestCase;
public class IOTest extends TestCase {
public void testSafeFileName() {
if (IO.isWindows()) {
assertEquals("abc%def", IO.toSafeFileName("abc:def"));
assertEquals("%abc%def%", IO.toSafeFileName("<abc:def>"));
assertEquals("LPT1_", IO.toSafeFileName("LPT1"));
assertEquals("COM2_", IO.toSafeFileName("COM2"));
} else {
assertEquals("abc%def", IO.toSafeFileName("abc/def"));
assertEquals("<abc%def>", IO.toSafeFileName("<abc/def>"));
}
}
public void testFilesetCopy() throws Exception {
File destDir = new File("generated/fileset-copy-test");
if (destDir.exists()) {
IO.delete(destDir);
assertFalse(destDir.exists());
}
IO.mkdirs(destDir);
assertTrue(destDir.isDirectory());
File srcDir = new File("testresources/fileset");
IO.copy(srcDir, destDir);
assertTrue(new File(destDir, "a/b/c/d/e/f/a.abc").exists());
assertTrue(new File(destDir, "a/b/c/c.abc").exists());
assertTrue(new File(destDir, "root").exists());
}
public void testCopyURLToByteArray() throws Exception {
File src = new File("testresources/unzipped.dat");
byte[] file = IO.read(src);
byte[] result = IO.read(src.toURI().toURL());
assertEquals((int) src.length(), result.length);
assertEquals(file.length, result.length);
int length = file.length;
for (int i = 0; i < length; i++) {
assertEquals(file[i], result[i]);
}
}
public void testCopyToExactHeapByteBuffer() throws Exception {
File src = new File("testresources/unzipped.dat");
byte[] file = IO.read(src);
ByteBuffer bb = IO.copy(IO.stream(src), ByteBuffer.allocate((int) src.length()));
assertEquals((int) src.length(), bb.position());
assertEquals(bb.capacity(), bb.position());
assertFalse(bb.hasRemaining());
bb.flip();
int length = bb.remaining();
for (int i = 0; i < length; i++) {
assertEquals(file[i], bb.get());
}
}
public void testCopyToSmallerHeapByteBuffer() throws Exception {
File src = new File("testresources/unzipped.dat");
byte[] file = IO.read(src);
ByteBuffer bb = IO.copy(IO.stream(src), ByteBuffer.allocate((int) src.length() - 8));
assertEquals(bb.capacity(), bb.position());
assertFalse(bb.hasRemaining());
bb.flip();
int length = bb.remaining();
for (int i = 0; i < length; i++) {
assertEquals(file[i], bb.get());
}
}
public void testCopyToLargerHeapByteBuffer() throws Exception {
File src = new File("testresources/unzipped.dat");
byte[] file = IO.read(src);
ByteBuffer bb = IO.copy(IO.stream(src), ByteBuffer.allocate((int) src.length() + 20));
assertEquals((int) src.length(), bb.position());
assertTrue(bb.hasRemaining());
bb.flip();
int length = bb.remaining();
for (int i = 0; i < length; i++) {
assertEquals(file[i], bb.get());
}
}
public void testCopyToExactDirectByteBuffer() throws Exception {
File src = new File("testresources/unzipped.dat");
byte[] file = IO.read(src);
ByteBuffer bb = IO.copy(IO.stream(src), ByteBuffer.allocateDirect((int) src.length()));
assertEquals((int) src.length(), bb.position());
assertEquals(bb.capacity(), bb.position());
assertFalse(bb.hasRemaining());
bb.flip();
int length = bb.remaining();
for (int i = 0; i < length; i++) {
assertEquals(file[i], bb.get());
}
}
public void testCopyToSmallerDirectByteBuffer() throws Exception {
File src = new File("testresources/unzipped.dat");
byte[] file = IO.read(src);
ByteBuffer bb = IO.copy(IO.stream(src), ByteBuffer.allocateDirect((int) src.length() - 8));
assertEquals(bb.capacity(), bb.position());
assertFalse(bb.hasRemaining());
bb.flip();
int length = bb.remaining();
for (int i = 0; i < length; i++) {
assertEquals(file[i], bb.get());
}
}
public void testCopyToLargerDirectByteBuffer() throws Exception {
File src = new File("testresources/unzipped.dat");
byte[] file = IO.read(src);
ByteBuffer bb = IO.copy(IO.stream(src), ByteBuffer.allocateDirect((int) src.length() + 20));
assertEquals((int) src.length(), bb.position());
assertTrue(bb.hasRemaining());
bb.flip();
int length = bb.remaining();
for (int i = 0; i < length; i++) {
assertEquals(file[i], bb.get());
}
}
public void testCopyToHugeDirectByteBuffer() throws Exception {
File src = new File("testresources/unzipped.dat");
byte[] file = IO.read(src);
ByteBuffer bb = IO.copy(IO.stream(src), ByteBuffer.allocateDirect(IOConstants.PAGE_SIZE * 32));
assertEquals((int) src.length(), bb.position());
assertTrue(bb.hasRemaining());
bb.flip();
int length = bb.remaining();
for (int i = 0; i < length; i++) {
assertEquals(file[i], bb.get());
}
}
public void testCopyToOffsetHeapByteBuffer() throws Exception {
File src = new File("testresources/unzipped.dat");
byte[] file = IO.read(src);
byte[] wrapped = new byte[file.length + 1];
ByteBuffer bb = ByteBuffer.wrap(wrapped);
bb.put((byte) 0xbb);
ByteBuffer slice = bb.slice();
IO.copy(IO.stream(src), slice);
assertEquals(wrapped.length, slice.arrayOffset() + slice.position());
assertFalse(slice.hasRemaining());
int length = wrapped.length;
assertEquals((byte) 0xbb, wrapped[0]);
for (int i = 1; i < length; i++) {
assertEquals(file[i - 1], wrapped[i]);
}
slice.flip();
length = slice.remaining();
for (int i = 0; i < length; i++) {
assertEquals(file[i], slice.get());
}
}
public void testDestDirIsChildOfSource() throws Exception {
File parentDir = new File("generated/test/parentDir");
if (parentDir.exists()) {
IO.delete(parentDir);
assertFalse(parentDir.exists());
}
IO.mkdirs(parentDir);
assertTrue(parentDir.isDirectory());
File childDir = new File("generated/test/parentDir/childDir");
try {
IO.copy(parentDir, childDir);
fail("Expected IllegalArgumentException");
} catch (IllegalArgumentException e) {
}
}
public void testIfCreateSymlinkOrCopyFileDependingOnOS() throws Exception {
File link = new File("generated/test/target.dat");
IO.delete(link);
assertFalse(link.exists() || IO.isSymbolicLink(link));
IO.mkdirs(link.getParentFile());
File source = new File("testresources/zipped.dat");
assertTrue(source.exists());
assertTrue(IO.createSymbolicLinkOrCopy(link, source));
if (IO.isWindows()) {
assertFalse(IO.isSymbolicLink(link));
} else {
assertTrue(IO.isSymbolicLink(link));
}
}
public void testOnlyCopyIfReallyNeededOnWindows() throws Exception {
if (IO.isWindows()) {
File link = new File("generated/test/target.dat");
IO.delete(link);
assertFalse(link.exists() || IO.isSymbolicLink(link));
IO.mkdirs(link.getParentFile());
File source = new File("testresources/zipped.dat");
assertTrue(source.exists());
assertTrue(IO.createSymbolicLinkOrCopy(link, source));
assertEquals(link.lastModified(), source.lastModified());
assertEquals(link.length(), source.length());
assertTrue(IO.createSymbolicLinkOrCopy(link, source));
assertEquals(link.lastModified(), source.lastModified());
assertEquals(link.length(), source.length());
}
}
public void testCreateSymlinkOrCopyWillDeleteOriginalLink() throws Exception {
File originalSource = new File("testresources/unzipped.dat");
File link = new File("generated/test/originalLink");
IO.delete(link);
assertFalse(IO.isSymbolicLink(link));
assertTrue(IO.createSymbolicLinkOrCopy(link, originalSource));
File newSource = new File("testresources/zipped.dat");
assertTrue(IO.createSymbolicLinkOrCopy(link, newSource));
if (IO.isWindows()) {
assertEquals(link.lastModified(), newSource.lastModified());
assertEquals(link.length(), newSource.length());
} else {
assertTrue(IO.isSymbolicLink(link));
assertTrue(Files.readSymbolicLink(link.toPath()).equals(newSource.toPath()));
}
}
public void testCollectEncoded() throws Exception {
InputStream in = IO.stream("testString", "UTF-8");
String result = IO.collect(in, "UTF-8");
assertEquals("testString", result);
}
}