package de.uni_siegen.wineme.come_in.thumbnailer.test.slow;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
import de.uni_siegen.wineme.come_in.thumbnailer.test.TestConfiguration;
import de.uni_siegen.wineme.come_in.thumbnailer.util.mime.MimeTypeDetector;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized.Parameters;
import uk.ac.lkl.common.util.testing.LabelledParameterized;
import static org.junit.Assert.*;
// Foreach Filename in TestFileDirectory : combine extensions.
@RunWith(LabelledParameterized.class)
// Strange as it sounds, these tests only run inside Eclipse. In Ant, the @RunWith-Annotation seems to go ignored. I'd really like to know why!
public class MIMEDectectionExtensiveTest implements TestConfiguration
{
private MimeTypeDetector mimeType;
private File file;
private String expectedMime;
public MIMEDectectionExtensiveTest(String name, String expectedMime, File file)
{
this.file = file;
this.expectedMime = expectedMime;
}
@Before
public void setUp() throws Exception
{
mimeType = new MimeTypeDetector();
}
@Test
public void testMime()
{
String mime = mimeType.getMimeType(file);
if (!expectedMime.equalsIgnoreCase(mime))
fail("File " + file.getName() + ": Mime is not equal: expected \"" + expectedMime + "\", but was \"" + mime + "\".");
}
@Parameters
public static Collection<Object[]> suite() throws Exception
{
MimeTypeDetector mimeType = new MimeTypeDetector();
File path = new File (TESTFILES_DIR);
File tmpDir = File.createTempFile("test-mime-detection", "");
File[] testfiles = path.listFiles();
tmpDir.delete();
tmpDir.mkdirs();
ArrayList<String> extensions = new ArrayList<String>(testfiles.length);
for(File input : testfiles)
{
if (input.isDirectory() || input.isHidden())
continue;
extensions.add(FilenameUtils.getExtension(input.getName()));
}
extensions.add("");
Collection<Object[]> param = new ArrayList<Object[]>();
for (File input : testfiles)
{
if (input.isDirectory() || input.isHidden())
continue;
String myName = FilenameUtils.getBaseName(input.getName());
String myExt = FilenameUtils.getExtension(input.getName());
final String myMime = mimeType.getMimeType(input);
for (String otherExt : extensions)
{
String newFilename = tmpDir.getAbsolutePath() + File.separator + myName + "-" + myExt;
if (!otherExt.isEmpty())
newFilename += "." + otherExt;
File output = new File(newFilename);
try {
FileUtils.copyFile(input, output);
param.add(new Object[]{ "test_mime_" + myExt + "_" + otherExt, myMime, output});
} catch (IOException e) {
System.err.println("Warning: Filename " + output.getName() + " is could not be written.");
}
}
}
return param;
}
}