package com.github.sommeri.less4j.utils;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.fail;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
public class TestFileUtils {
private String[] additionalDataFileSuffixes = new String[0];
public TestFileUtils() {
}
public TestFileUtils(String... additionalDataFileSuffix) {
this.additionalDataFileSuffixes = additionalDataFileSuffix;
}
public Collection<Object[]> loadTestFiles(String... directories) {
Collection<File> allFiles = getAllLessFiles(directories);
Collection<Object[]> result = new ArrayList<Object[]>();
for (File file : allFiles) {
addFiles(result, file);
}
return result;
}
private Collection<File> getAllLessFiles(String... directories) {
Collection<File> allFiles = new LinkedList<File>();
for (String directory : directories) {
allFiles.addAll(FileUtils.listFiles(new File(directory), new String[] { "less" }, false));
}
return allFiles;
}
private void addFiles(Collection<Object[]> result, File... files) {
for (File file : files) {
result.add(createParameters(file));
}
}
private Object[] createParameters(File file) {
List<Object> parameters = new ArrayList<Object>();
parameters.add(file);
parameters.add(findCorrespondingExpected(file));
for (String suffix : additionalDataFileSuffixes) {
parameters.add(findCorrespondingAdditional(file, suffix));
}
parameters.add(file.getName());
return parameters.toArray();
}
private File findCorrespondingExpected(File lessFile) {
String lessFileName = lessFile.getPath();
String cssFileName = convertToOutputFilename(lessFileName);
File cssFile = new File(cssFileName);
return cssFile;
}
private String convertToOutputFilename(String name) {
if (name.endsWith(".less")) {
return name.substring(0, name.length() - 5) + ".css";
}
return name;
}
private File findCorrespondingAdditional(File lessFile, String newSuffix) {
String lessFileName = lessFile.getPath();
String cssFileName = convertToAdditionalFilename(lessFileName, newSuffix);
File cssFile = new File(cssFileName);
return cssFile;
}
private String convertToAdditionalFilename(String name, String newSuffix) {
if (name.endsWith(".less")) {
return name.substring(0, name.length() - 5) + newSuffix;
}
return name;
}
public Collection<Object[]> loadTestFile(String directory, String filename) {
String name = directory + filename;
File input = new File(name);
Collection<Object[]> result = new ArrayList<Object[]>();
addFiles(result, input);
return result;
}
public void removeFile(String filename) {
File file = new File(filename);
if (file.exists())
file.delete();
}
public void assertFileContent(String lessFile, String expectedContent) {
String realContent = readFile(lessFile);
assertEquals(expectedContent, realContent);
}
public void assertSameFileContent(String expectedFile, String actualFile) {
String actualContent = readFile(actualFile);
String expectedContent = readFile(expectedFile);
assertEquals(expectedContent, actualContent);
}
public void assertFileNotExists(String filename) {
File file = new File(filename);
assertFalse("File " + filename + " should not exists.", file.exists());
}
public String readFile(String filename) {
File inputFile = new File(filename);
if (!inputFile.exists())
fail("File " + filename + " was not created.");
try {
FileReader input = new FileReader(inputFile);
String expected = IOUtils.toString(input).replace("\r\n", "\n");
input.close();
return expected;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public String concatenateFiles(String... files) {
String result = "";
for (String file : files) {
result += readFile(file);
}
return result;
}
public void removeFiles(String... files) {
for (String file : files) {
removeFile(file);
}
}
}