package com.github.sommeri.less4j.compiler; import java.io.File; import java.util.Collection; import org.junit.runners.Parameterized.Parameters; import com.github.sommeri.less4j.AbstractFileBasedTest; /** * Testing whether less4j correctly compiles css3 selectors conforming to * <a href="http://www.w3.org/TR/css3-selectors/">w3c specification</a>. The test case * goes through official w3c test cases downloaded from <a href="http://www.w3.org/Style/CSS/Test/CSS3/Selectors/current/">w3.org</a>. * * All tests have been run through less.js compiler. As less.js and less4j are not strictly identical, * we modified less.js output from raw version into less4j compatible version. All this work is done * in {@link RhinoCompiler} utility class. * * Special cases: * 1.) Less.js crashed on some tests, even as those tests contained valid css. Those are stored in * less.js-incompatible directory. Expected outputs have been created manually. In general, less.js * crashed on anything that contains :not(:nth-xxx-xxxx(an+b)) and :not(:lang(xxx)). * * Ignored cases: * 1.) Our compiler does not support namespaces yet, so those tests are not run yet. Tests on * namespaces are in todo-namespaces and less.js-incompatible\namespaces directories. * * 2.) Some w3c tests test interpreter behavior on malformed css, those are irrelevant and * stored in incorrect-css and less.js-incompatible\incorrect-css directories. * */ public class W3CSelectorsTest extends AbstractFileBasedTest { private static final String standardCases = "src/test/resources/w3c-official-test-cases/CSS3-Selectors/"; private static final String lessjsIncompatibleNegatedNth = "src/test/resources/w3c-official-test-cases/CSS3-Selectors/less.js-incompatible/correct-css/negated-nth"; private static final String lessjsIncompatibleNegatedVarious = "src/test/resources/w3c-official-test-cases/CSS3-Selectors/less.js-incompatible/correct-css/negated-various"; public W3CSelectorsTest(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() { return createTestFileUtils().loadTestFiles(standardCases, lessjsIncompatibleNegatedNth, lessjsIncompatibleNegatedVarious); } }