package com.googlecode.totallylazy.io;
import org.junit.Test;
import java.io.File;
import java.io.IOException;
import java.util.List;
import static com.googlecode.totallylazy.Files.emptyVMDirectory;
import static com.googlecode.totallylazy.Files.file;
import static com.googlecode.totallylazy.Files.temporaryFile;
import static com.googlecode.totallylazy.io.Sources.constructors.sources;
import static com.googlecode.totallylazy.io.Uri.packageUri;
import static com.googlecode.totallylazy.io.Uri.uri;
import static com.googlecode.totallylazy.io.Zip.zip;
import static com.googlecode.totallylazy.matchers.NumberMatcher.is;
import static com.googlecode.totallylazy.predicates.Not.not;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsInAnyOrder;
import static org.hamcrest.Matchers.greaterThan;
public class SourcesTest {
@Test
public void canReadSourcesFromPackageUri() throws IOException {
Sources sources = sources(packageUri(SourcesTest.class));
assertThat(sources.sources().size(), greaterThan(1));
sources.close();
}
@Test
public void canReadSourcesFromFileUri() throws IOException {
File files = files();
Sources sources = sources(uri(files));
assertThat(sources.sources().size(), is(4));
sources.close();
}
@Test
public void canReadSourcesFromZipUri() throws IOException {
File zipFile = temporaryFile();
zip(files(), zipFile);
Sources sources = sources(uri(String.format("jar:file:%s!/", zipFile)));
assertThat(sources.sources().size(), is(4));
sources.close();
}
@Test
public void canReadSourcesFromZipUriSubFolder() throws IOException {
File zipFile = temporaryFile();
zip(files(), zipFile);
Sources sources = sources(uri(String.format("jar:file:%s!/folder/", zipFile)));
List<String> names = sources.sources().map(Source::name).toList();
assertThat(names, containsInAnyOrder("b.txt", "c.txt"));
sources.close();
}
@Test
public void canFilterDirectories() throws IOException {
File zipFile = temporaryFile();
zip(files(), zipFile);
Sources sources = sources(uri(String.format("jar:file:%s!/", zipFile)));
List<String> names = sources.sources().filter(not(Source::isDirectory)).map(Source::name).toList();
assertThat(names, containsInAnyOrder("a.txt", "folder/b.txt", "folder/c.txt"));
sources.close();
}
private File files() {
File directory = emptyVMDirectory("totallylazy");
file(directory, "a.txt");
file(directory, "folder/b.txt");
file(directory, "folder/c.txt");
return directory;
}
}