package com.github.sommeri.less4j.commandline;
import org.junit.Rule;
import org.junit.Test;
import com.github.sommeri.less4j.utils.DeleteFilesRule;
public class MultiModeTest extends CommandLineTest {
@Rule
public DeleteFilesRule cleaner = new DeleteFilesRule();
@Test
public void noInputFile() {
CommandLine.main(new String[] {"-m"});
assertMissingFilesError();
}
@Test
public void oneInputFile() {
String lessFile = inputDir+"one.less";
String cssFile = inputDir+"one.css";
String mapFile = inputDir+"one.css.map";
cleaner.ensureRemoval(cssFile, mapFile);
CommandLine.main(new String[] {"-m", lessFile});
fileUtils.assertFileContent(cssFile, correctCss("one"));
fileUtils.assertFileNotExists(mapFile);
assertNoErrors();
}
@Test
public void multipleInputFiles() {
String multiLessFile1 = inputDir+"multi1.less";
String multiCssFile1 = inputDir+"multi1.css";
String multiMapFile1 = inputDir+"multi1.map";
String multiLessFile2 = inputDir+"multi2.less";
String multiCssFile2 = inputDir+"multi2.css";
String multiMapFile2 = inputDir+"multi2.map";
String multiLessFile3 = inputDir+"multi3.less";
String multiCssFile3 = inputDir+"multi3.css";
String multiMapFile3 = inputDir+"multi3.map";
String wrongFile = inputDir+"doesNotExists.less";
cleaner.ensureRemoval(multiCssFile1, multiCssFile2, multiCssFile3, multiMapFile1, multiMapFile2, multiMapFile3);
CommandLine.main(new String[] {"-m", multiLessFile1, wrongFile, multiLessFile2, multiLessFile3});
fileUtils.assertFileContent(multiCssFile1, correctCss("multi1"));
fileUtils.assertFileNotExists(multiMapFile1);
fileUtils.assertFileContent(multiCssFile2, correctCss("multi2"));
fileUtils.assertFileNotExists(multiMapFile2);
fileUtils.assertFileContent(multiCssFile3, correctCss("multi3"));
fileUtils.assertFileNotExists(multiMapFile3);
assertError(FILE_DOES_NOT_EXISTS);
}
@Test
public void sourceMap() {
String multiLessFile1 = inputDir+"multi1.less";
String multiCssFile1 = inputDir+"multi1.css";
String multiMapFile1 = inputDir+"multi1.css.map";
String multiLessFile2 = inputDir+"multi2.less";
String multiCssFile2 = inputDir+"multi2.css";
String multiMapFile2 = inputDir+"multi2.css.map";
String mapdataFile1 = inputDir+"multi1.mapdata";
String mapdataFile2 = inputDir+"multi2.mapdata";
cleaner.ensureRemoval(multiCssFile1, multiCssFile2, multiMapFile1, multiMapFile2);
CommandLine.main(new String[] {"-m", "--sourceMap", multiLessFile1, multiLessFile2});
fileUtils.assertFileContent(multiCssFile1, correctCssWithSourceMap("multi1", "multi1.css.map"));
validateSourceMap(mapdataFile1, multiCssFile1, multiMapFile1);
fileUtils.assertFileContent(multiCssFile2, correctCssWithSourceMap("multi2", "multi2.css.map"));
validateSourceMap(mapdataFile2, multiCssFile2, multiMapFile2);
assertNoErrors();
}
@Test
public void customOutputDirectory() {
String multiLessFile1 = inputDir+"multi1.less";
String multiCssFile1 = customOutputDir+"/multi1.css";
String multiLessFile2 = inputDir+"multi2.less";
String multiCssFile2 = customOutputDir+"/multi2.css";
String multiLessFile3 = inputDir+"multi3.less";
String multiCssFile3 = customOutputDir+"/multi3.css";
String wrongFile = inputDir+"doesNotExists.less";
customOutputTest(customOutputDir, multiLessFile1, multiCssFile1, multiLessFile2, multiCssFile2, multiLessFile3, multiCssFile3, wrongFile);
customOutputTest(customOutputDir + "/", multiLessFile1, multiCssFile1, multiLessFile2, multiCssFile2, multiLessFile3, multiCssFile3, wrongFile);
}
private void customOutputTest(String customOutputDir, String multiLessFile1, String multiCssFile1, String multiLessFile2, String multiCssFile2, String multiLessFile3, String multiCssFile3, String wrongFile) {
cleaner.ensureRemoval(multiCssFile1, multiCssFile2, multiCssFile3);
CommandLine.main(new String[] {"-m", "-o", customOutputDir, multiLessFile1, wrongFile, multiLessFile2, multiLessFile3});
fileUtils.assertFileContent(multiCssFile1, correctCss("multi1"));
fileUtils.assertFileContent(multiCssFile2, correctCss("multi2"));
fileUtils.assertFileContent(multiCssFile3, correctCss("multi3"));
assertError(FILE_DOES_NOT_EXISTS);
cleanErrors();
}
@Test
public void needToCreateOutputDirectory() {
String newDir = inputDir + "doesNotExists/";
String lessFile = inputDir+"one.less";
String cssFile = newDir+"one.css";
String mapFile = newDir+"one.map";
cleaner.ensureRemoval(newDir);
CommandLine.main(new String[] {"--multiMode", "--outputDir", newDir, lessFile});
fileUtils.assertFileContent(cssFile, correctCss("one"));
fileUtils.assertFileNotExists(mapFile);
assertNoErrors();
}
@Test
public void errorsAndWarnings() {
String multiLessFile1 = inputDir+"errors.less";
String multiCssFile1 = inputDir+"errors.css";
String multiErrFile1 = inputDir+"errors.err";
String multiLessFile2 = inputDir+"warnings.less";
String multiCssFile2 = inputDir+"warnings.css";
String multiErrFile2 = inputDir+"warnings.err";
String multiLessFile3 = inputDir+"errorsandwarnings.less";
String multiCssFile3 = inputDir+"errorsandwarnings.css";
String multiErrFile3 = inputDir+"errorsandwarnings.err";
cleaner.ensureRemoval(multiCssFile1, multiCssFile2, multiCssFile3);
CommandLine.main(new String[] {"-m", multiLessFile1, multiLessFile2, multiLessFile3});
fileUtils.assertFileNotExists(multiCssFile1);
fileUtils.assertFileContent(multiCssFile2, warningsCss());
fileUtils.assertFileNotExists(multiCssFile3);
assertError(fileUtils.concatenateFiles(multiErrFile1, multiErrFile2, multiErrFile3));
}
@Test
public void partialOutputWithErrorsAndWarnings() {
String multiLessFile1 = inputDir+"errors.less";
String multiCssFile1 = inputDir+"errors.css";
String multiErrFile1 = inputDir+"errors.err";
String multiExpectedCssFile1 = inputDir+"errors.expcss";
String multiLessFile2 = inputDir+"warnings.less";
String multiCssFile2 = inputDir+"warnings.css";
String multiErrFile2 = inputDir+"warnings.err";
String multiLessFile3 = inputDir+"errorsandwarnings.less";
String multiCssFile3 = inputDir+"errorsandwarnings.css";
String multiErrFile3 = inputDir+"errorsandwarnings.err";
String multiExpectedCssFile3 = inputDir+"errorsandwarnings.expcss";
cleaner.ensureRemoval(multiCssFile1, multiCssFile2, multiCssFile3);
CommandLine.main(new String[] {"-m", "-pi", multiLessFile1, multiLessFile2, multiLessFile3});
fileUtils.assertSameFileContent(multiExpectedCssFile1, multiCssFile1);
fileUtils.assertFileContent(multiCssFile2, warningsCss());
fileUtils.assertSameFileContent(multiExpectedCssFile3, multiCssFile3);
assertError(fileUtils.concatenateFiles(multiErrFile1, multiErrFile2, multiErrFile3));
}
}