package com.beijunyi.parallelgit.filesystem.io;
import java.io.IOException;
import java.nio.file.*;
import java.util.Iterator;
import java.util.NoSuchElementException;
import com.beijunyi.parallelgit.filesystem.AbstractGitFileSystemTest;
import org.junit.Test;
import static org.junit.Assert.*;
public class GfsDirectoryStreamTest extends AbstractGitFileSystemTest {
@Test
public void directoryStreamOfDirectoryTest() throws IOException {
initRepository();
String[] files = new String[] {"/a/b.txt", "/a/c/c1.txt", "/a/d/d1.txt", "/a/d/d2.txt", "/a/e.txt", "/f.txt", "/g/h.txt"};
for(String file : files)
writeToCache(file);
commitToMaster();
initGitFileSystem();
try(DirectoryStream<Path> ds = provider.newDirectoryStream(gfs.getPath("/a"), null)) {
String[] filesInA = new String[] {"/a/b.txt", "/a/c", "/a/d", "/a/e.txt"};
Iterator<Path> dsIt = ds.iterator();
for(String file : filesInA) {
assertTrue(dsIt.hasNext());
assertEquals(file, dsIt.next().toString());
}
assertFalse(dsIt.hasNext());
}
}
@Test(expected = NoSuchElementException.class)
public void directoryStreamOfDirectoryNoSuchElementTest() throws IOException {
initRepository();
writeToCache("/dir/file.txt");
commitToMaster();
initGitFileSystem();
try(DirectoryStream<Path> ds = Files.newDirectoryStream(gfs.getPath("/dir"))) {
Iterator<Path> dsIt = ds.iterator();
dsIt.next();
dsIt.next();
}
}
@Test(expected = UnsupportedOperationException.class)
public void directoryStreamOfDirectoryRemoveTest() throws IOException {
initRepository();
writeToCache("/dir/file.txt");
commitToMaster();
initGitFileSystem();
try(DirectoryStream<Path> ds = Files.newDirectoryStream(gfs.getPath("/dir"))) {
Iterator<Path> dsIt = ds.iterator();
dsIt.next();
dsIt.remove();
}
}
@Test(expected = ClosedDirectoryStreamException.class)
public void userClosedDirectoryStream_shouldThrowClosedDirectoryStreamException() throws IOException {
initRepository();
writeToCache("/dir/file.txt");
commitToMaster();
initGitFileSystem();
DirectoryStream<Path> ds = Files.newDirectoryStream(gfs.getPath("/dir"));
ds.close();
ds.iterator().next();
}
}