package net.ayld.facade.util;
import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableSet;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import javax.annotation.PostConstruct;
import java.io.File;
import java.io.IOException;
import java.util.Set;
/**
* Created by ayld on 1/10/14.
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath:META-INF/test-contexts/testDirectoriesContext.xml"})
public class TestDirectories {
private final static Set<String> TEST_DIR_NAMES = ImmutableSet.of(
"test.jar", "test1.jar", "test2.jar", "testDir", "testDir1" , "test1Dir"
);
@Autowired
private String workDir;
@PostConstruct
public void init() {
workDir = workDir + File.separator + "/testDirs";
new File(workDir).mkdirs();
final Joiner joiner = Joiner.on(File.separator);
for (String testDirName : TEST_DIR_NAMES) {
new File(joiner.join(workDir, testDirName)).mkdirs();
}
}
@Test
public void list() throws IOException {
final Set<File> foundDirs = Directories.in(workDir).list();
Assert.assertTrue(foundDirs.size() >= TEST_DIR_NAMES.size());
for (File found : foundDirs) {
final String dirNameNoPath = Tokenizer.delimiter(File.separator).tokenize(found.getAbsolutePath()).lastToken();
Assert.assertTrue(found + " not present in test dirs, allowed are: " + TEST_DIR_NAMES, TEST_DIR_NAMES.contains(dirNameNoPath));
}
}
@Test
public void named() throws IOException {
final String searchFor = "testDir";
final Set<File> found = Directories.in(workDir).named(searchFor).list();
Assert.assertTrue(found != null);
Assert.assertTrue(found.size() == 1);
final File foundDir = found.iterator().next();
Assert.assertTrue(foundDir.isDirectory());
Assert.assertTrue(foundDir.getAbsolutePath().endsWith(searchFor));
}
@Test
public void endsWith() throws IOException {
final String searchFor = "Dir";
final Set<File> found = Directories.in(workDir).nameEndsWith(searchFor).list();
Assert.assertTrue(found != null);
Assert.assertTrue(found.size() == 2);
for (File foundDir : found) {
Assert.assertTrue(foundDir.isDirectory());
Assert.assertTrue(foundDir.getAbsolutePath().endsWith(searchFor));
}
}
@Test
public void recursive() throws IOException {
makeSubDirs();
Assert.assertTrue(Directories.in(workDir).recursive().list().size() == TEST_DIR_NAMES.size() * 2);
}
@Test
public void nonRecursive() throws IOException {
makeSubDirs();
Assert.assertTrue(Directories.in(workDir).list().size() == TEST_DIR_NAMES.size());
}
private void makeSubDirs() {
final Joiner pathJoiner = Joiner.on(File.separator);
for (String name : TEST_DIR_NAMES) {
new File(pathJoiner.join(workDir, name, "subDir")).mkdirs();
}
}
}