package tests.net.sf.jabref;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import net.sf.jabref.BibtexEntry;
import net.sf.jabref.Util;
/**
* Testing Util.findFile for finding files based on regular expressions.
*
* @author Christopher Oezbek <oezi@oezi.de>
*/
public class UtilFindFileTest extends FileBasedTestCase {
String findFile(String dir, String file) {
return Util.findFile(entry, database, dir, file, true);
}
/**
* Test that more than one slash is taken to mean that a relative path is to
* be returned.
*
* @throws IOException
*/
public void testFindFileRelative() throws IOException {
// Most basic case
assertEqualPaths("HipKro03.pdf", findFile(root.getAbsolutePath() + "/test/",
"[bibtexkey].pdf"));
// Including directory
assertEqualPaths("test/HipKro03.pdf", findFile(root.getAbsolutePath(),
"test/[bibtexkey].pdf"));
// No relative paths
assertEqualPaths(new File(root, "test/HipKro03.pdf").getCanonicalPath(), findFile(null,
root.getAbsolutePath() + "/test/" + "[bibtexkey].pdf"));
// No relative paths
assertEqualPaths(new File(root, "test/HipKro03.pdf").getCanonicalPath(), Util.findFile(
entry, database, root.getAbsolutePath() + "/test/" + "[bibtexkey].pdf"));
}
public void testFindPdf() throws IOException {
{
String pdf = Util.findPdf(entry, "pdf", root.getAbsolutePath());
assertEqualPaths("HipKro03 - Hello.pdf", pdf);
File fullPath = Util.expandFilename(pdf, root.getAbsolutePath());
assertTrue(fullPath.exists());
}
{
String pdf = Util.findPdf(entry, "pdf", root.getAbsolutePath() + "/pdfs/");
assertEqualPaths("sub/HipKro03-sub.pdf", pdf);
File fullPath = Util.expandFilename(pdf, root.getAbsolutePath() + "/pdfs/");
assertTrue(fullPath.exists());
}
}
public void testFindAssociatedFiles() throws IOException {
Collection<BibtexEntry> entries = Arrays.asList(new BibtexEntry[]{entry});
Collection<String> extensions = Arrays.asList(new String[]{"jpg", "pdf"});
Collection<File> dirs = Arrays.asList(new File[] { new File(root.getAbsoluteFile() + "/pdfs/"), new File(root.getAbsoluteFile() + "/graphicsDir/") });
Map<BibtexEntry, List<File>> results = Util.findAssociatedFiles(entries, extensions, dirs);
assertEquals(2, results.get(entry).size());
assertTrue(results.get(entry).contains(new File(root.getAbsoluteFile() + "/graphicsDir/subDir/testHipKro03test.jpg")));
assertFalse(results.get(entry).contains(new File(root.getAbsoluteFile() + "/graphicsDir/subDir/testHipKro03test.png")));
assertTrue(results.get(entry).contains(new File(root.getAbsoluteFile() + "/pdfs/sub/HipKro03-sub.pdf")));
}
public void testFindPdfInMultiple() throws IOException {
{
String[] dirsToSearch = new String[] { root.getAbsolutePath(),
root.getAbsolutePath() + "/pdfs/" };
String pdf = Util.findPdf(entry, "pdf", dirsToSearch);
assertEqualPaths("HipKro03 - Hello.pdf", pdf);
File fullPath = Util.expandFilename(pdf, dirsToSearch);
assertTrue(fullPath.exists());
assertEqualPaths(root.getAbsolutePath() + "/HipKro03 - Hello.pdf", fullPath
.getAbsolutePath());
String tmp = dirsToSearch[1];
dirsToSearch[1] = dirsToSearch[0];
dirsToSearch[0] = tmp;
fullPath = Util.expandFilename(pdf, dirsToSearch);
assertTrue(fullPath.exists());
assertEqualPaths(root.getAbsolutePath() + "/HipKro03 - Hello.pdf", fullPath
.getAbsolutePath());
fullPath = Util.expandFilename(pdf, new String[] { dirsToSearch[0] });
assertEquals(null, fullPath);
fullPath = Util.expandFilename(pdf, new String[] { dirsToSearch[1] });
assertTrue(fullPath.exists());
assertEqualPaths(root.getAbsolutePath() + "/HipKro03 - Hello.pdf", fullPath
.getAbsolutePath());
}
{
String[] dirsToSearch = new String[] { root.getAbsolutePath() + "/pdfs/",
root.getAbsolutePath() };
String pdf = Util.findPdf(entry, "pdf", dirsToSearch);
assertEqualPaths("sub/HipKro03-sub.pdf", pdf);
File fullPath = Util.expandFilename(pdf, dirsToSearch);
assertTrue(fullPath.exists());
assertEqualPaths(root.getAbsolutePath() + "/pdfs/sub/HipKro03-sub.pdf", fullPath
.getAbsolutePath());
String tmp = dirsToSearch[1];
dirsToSearch[1] = dirsToSearch[0];
dirsToSearch[0] = tmp;
fullPath = Util.expandFilename(pdf, dirsToSearch);
assertTrue(fullPath.exists());
assertEqualPaths(root.getAbsolutePath() + "/pdfs/sub/HipKro03-sub.pdf", fullPath
.getAbsolutePath());
fullPath = Util.expandFilename(pdf, new String[] { dirsToSearch[0] });
assertEquals(null, fullPath);
fullPath = Util.expandFilename(pdf, new String[] { dirsToSearch[1] });
assertTrue(fullPath.exists());
assertEqualPaths(root.getAbsolutePath() + "/pdfs/sub/HipKro03-sub.pdf", fullPath
.getAbsolutePath());
}
}
public void testFindFile() throws IOException {
// Simple case
assertEqualPaths("HipKro03.pdf", Util.findFile(entry, database, root.getAbsolutePath()
+ "/test/", "[bibtexkey].pdf", true));
// Not found
assertEqualPaths(null, Util.findFile(entry, database, root.getAbsolutePath() + "/test/",
"Not there [bibtexkey].pdf", true));
// Test current dir
assertEqualPaths(new File(new File("."), "build.xml").getCanonicalPath(), Util.findFile(
entry, database, "./build.xml"));
assertEqualPaths("build.xml", Util.findFile(entry, database, ".", "build.xml", true));
// Test keys in path and regular expression in file
assertEqualPaths(new File(root, "/2003/Paper by HipKro03.pdf").getCanonicalPath(), Util
.findFile(entry, database, root.getAbsolutePath() + "/[year]/.*[bibtexkey].pdf"));
// Test . and ..
assertEqualPaths(new File(root, "/Organization Science/HipKro03 - Hello.pdf")
.getCanonicalPath(), Util.findFile(entry, database, root.getAbsolutePath()
+ "/[year]/../2003/.././././[journal]\\" + ".*[bibtexkey].*.pdf"));
// Test Escape
assertEqualPaths(new File(root, "/Organization Science/HipKro03 - Hello.pdf")
.getCanonicalPath(), Util.findFile(entry, database, root.getAbsolutePath() + "/*/"
+ "[bibtexkey] - Hello\\\\.pdf"));
assertEqualPaths("TE.ST", Util.findFile(entry, database, root.getAbsolutePath() + "/test/",
"TE\\\\.ST", true));
assertEqualPaths(".TEST", Util.findFile(entry, database, root.getAbsolutePath() + "/test/",
"\\\\.TEST", true));
assertEqualPaths("TEST[", Util.findFile(entry, database, root.getAbsolutePath() + "/test/",
"TEST\\\\[", true));
// Test *
assertEqualPaths(new File(root, "/Organization Science/HipKro03 - Hello.pdf")
.getCanonicalPath(), Util.findFile(entry, database, root.getAbsolutePath() + "/*/"
+ "[bibtexkey].+?.pdf"));
// Test **
assertEqualPaths(new File(root, "/pdfs/sub/HipKro03-sub.pdf").getCanonicalPath(), Util
.findFile(entry, database, root.getAbsolutePath() + "/**/" + "[bibtexkey]-sub.pdf"));
// Test ** - Find in level itself too
assertEqualPaths(new File(root, "/pdfs/sub/HipKro03-sub.pdf").getCanonicalPath(), Util
.findFile(entry, database, root.getAbsolutePath() + "/pdfs/sub/**/"
+ "[bibtexkey]-sub.pdf"));
// Test ** - Find lowest level first (Rest is Depth first)
assertEqualPaths(new File(root, "/HipKro03 - Hello.pdf").getCanonicalPath(), Util.findFile(
entry, database, root.getAbsolutePath() + "/**/" + "[bibtexkey].*Hello.pdf"));
}
}