package com.github.sommeri.less4j; import java.io.File; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import org.junit.Ignore; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; import com.github.sommeri.less4j.LessCompiler.Configuration; /** * The test reproduces test files found in original less.js implementation. As * less.js has only only one tag and that tag is one year old, we took testsque * from the master branch. * */ //@Ignore @RunWith(Parameterized.class) public class SimpleCssTest extends AbstractFileBasedTest { private static final String inputLess = "src/test/resources/minitests/debug1.less"; private static final String outputCss = "src/test/resources/minitests/debug1.css"; private static final String mapdata = "src/test/resources/minitests/debug1.mapdata"; private static final String config = "src/test/resources/minitests/debug1.config"; // private static final String inputLess = "src/test/resources/minitests/import-reference-lessjs-issues.less"; // private static final String outputCss = "src/test/resources/minitests/import-reference-lessjs-issues.css"; public SimpleCssTest(File inputFile, File outputFile, File errorList, File mapdataFile, File configFile, String testName) { super(inputFile, outputFile, errorList, mapdataFile, configFile, testName); } // protected CompilationResult compile(File lessFile, File cssOutput) throws Less4jException { // LessCompiler compiler = getCompiler(); // Configuration configuration = createConfiguration(cssOutput); // // CustomLessSource source = new CustomLessSource(Arrays.asList("c:/data"), lessFile, "utf-8"); // CompilationResult actual = compiler.compile(source, configuration); // //System.out.println(actual.getSourceMap()); // return actual; // } // protected LessCompiler getCompiler() { // return new TimeoutedLessCompiler(1000, TimeUnit.MILLISECONDS); // } public static class CustomLessSource extends LessSource.FileSource { private final List<String> searchPaths; public CustomLessSource(List<String> searchPaths, File inputFile) { super(inputFile); this.searchPaths = searchPaths; } public CustomLessSource(List<String> searchPaths, File inputFile, String charsetName) { super(inputFile, charsetName); this.searchPaths = searchPaths; } public CustomLessSource(List<String> searchPaths, FileSource parent, String filename, String charsetName) { super(parent, filename, charsetName); this.searchPaths = searchPaths; } public CustomLessSource(List<String> searchPaths, FileSource parent, File inputFile, String charsetName) { super(parent, inputFile, charsetName); this.searchPaths = searchPaths; } /** * * @param filename * @return */ protected File createRelativeFile(String filename) { File thisFile = getInputFile(); if (thisFile==null) return null; File thisDirectory = thisFile.getParentFile(); File inputFile = new File(thisDirectory, filename); Iterator<String> cpIterator = searchPaths.iterator(); while (!inputFile.exists() && cpIterator.hasNext()) { inputFile = new File(cpIterator.next(), filename); } return inputFile; } @Override public FileSource relativeSource(String filename) { return new CustomLessSource(searchPaths, this, createRelativeFile(filename), null); } } @Override protected Configuration createConfiguration(File cssOutput) { Configuration configuration = new Configuration(); configuration.setCssResultLocation(new LessSource.FileSource(cssOutput)); configuration.getSourceMapConfiguration().setInline(false); configuration.getSourceMapConfiguration().setLinkSourceMap(false); //configuration.addVariables(externalVariables()); return configuration; } @Parameters(name = "Less: {5}") public static Collection<Object[]> allTestsParameters() { //justWait(); Collection<Object[]> result = new ArrayList<Object[]>(); result.add(new Object[] { new File(inputLess), new File(outputCss), null, new File(mapdata), new File(config), inputLess }); return result; } @SuppressWarnings("unused") private static void justWait() { try { Thread.sleep(30000); } catch (InterruptedException e) { throw new RuntimeException(e); } } protected String canonize(String text) { return text.replaceAll("\r\n", "\n").replaceAll("#ffff00", "yellow").replaceAll("#ff0000", "red").replaceAll("#0000ff", "blue").replaceAll("! important", "!important").replaceAll("%!important", "% !important"); } }