package com.github.sommeri.less4j.compiler;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import org.apache.commons.io.FileUtils;
import org.junit.runners.Parameterized.Parameters;
import com.github.sommeri.less4j.AbstractFileBasedTest;
/**
* Testing whether less4j correctly compiles css3 media conforming to
* <a href="http://www.w3.org/TR/css3-mediaqueries/">w3c specification</a>. The test case
* goes through official w3c test cases extracted from <a href="http://www.w3.org/Style/CSS/Test/MediaQueries/20120229/">w3.org</a>.
*
* As less.js does not support aspect-ratio in css3 media, we did not run inputs through it. Instead, we assume that the compiler
* output must be the same as its input.
*
* Ignored cases:
* 1.) Some w3c tests test interpreter behavior on malformed css, those are irrelevant and
* stored in incorrect-css directory.
*
*/
public class W3CMediaTest extends AbstractFileBasedTest {
private static final String standardCases = "src/test/resources/w3c-official-test-cases/CSS3-Media/";
public W3CMediaTest(File inputFile, File outputFile, File errorList, File mapdataFile, File configFile, String testName) {
super(inputFile, outputFile, errorList, mapdataFile, configFile, testName);
}
@Parameters(name="Less: {5}")
public static Collection<Object[]> allTestsParameters() {
Collection<File> allFiles = FileUtils.listFiles(new File(standardCases), new String[] {"less"}, false);
Collection<Object[]> result = new ArrayList<Object[]>();
for (File file : allFiles) {
addFiles(result, file);
}
return result;
}
protected static void addFiles(Collection<Object[]> result, File... files) {
for (File file : files) {
result.add(new Object[] { file, findCorrespondingCss(file), null, null, null, file.getName() });
}
}
protected static File findCorrespondingCss(File lessFile) {
String lessFileName = lessFile.getPath();
File cssFile = new File(lessFileName);
return cssFile;
}
protected String canonize(String text) {
//ignore end of line separator differences
text = text.replace("\r\n", "\n");
//ignore differences in various ways to write "1/1"
text = text.replaceAll("1 */ *1", "1/1");
//ignore occasional end lines
if (text.endsWith("\n"))
return text.substring(0, text.length()-1);
return text;
}
}