package de.neuland.jade4j.compiler;
import de.neuland.jade4j.Jade4J;
import de.neuland.jade4j.JadeConfiguration;
import de.neuland.jade4j.TestFileHelper;
import de.neuland.jade4j.expression.JsExpressionHandler;
import de.neuland.jade4j.filter.*;
import de.neuland.jade4j.template.FileTemplateLoader;
import de.neuland.jade4j.template.JadeTemplate;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import static org.junit.Assert.assertEquals;
@RunWith(Parameterized.class)
public class OriginalJade20150515Test {
private static String[] ignoredCases = new String[]{"attrs", "attrs.js", "code.conditionals", "code.iteration",
"filters.coffeescript", "filters.less", "filters.markdown", "filters.stylus",
"mixin.merge", "styles","regression.784","mixin.attrs","include-filter-stylus",
"include-filter","filters-empty","each.else","classes","blocks-in-if","filters.cdata","block-code",
"attrs-data","attrs.interpolation"};
// "mixins.rest-args"
private String file;
public OriginalJade20150515Test(String file) {
this.file = file;
}
@Test
public void shouldCompileJadeToHtml() throws Exception {
JadeConfiguration jade = new JadeConfiguration();
String resourcePath = TestFileHelper.getOriginal20150515ResourcePath("");
jade.setTemplateLoader(new FileTemplateLoader(resourcePath,"UTF-8"));
// jade.setExpressionHandler(new JsExpressionHandler());
jade.setMode(Jade4J.Mode.XHTML); // original jade uses xhtml by default
jade.setFilter("plain", new PlainFilter());
jade.setFilter("cdata", new CDATAFilter());
jade.setFilter("custom-filter", new CustomTestFilter());
jade.setFilter("marked", new MarkdownFilter());
jade.setFilter("verbatim", new VerbatimFilter());
jade.setFilter("js", new JsFilter());
jade.setFilter("css", new CssFilter());
jade.setBasePath("cases");
// jade.setFilter("coffee-script", new CoffeeScriptFilter());
jade.setPrettyPrint(true);
JadeTemplate template = jade.getTemplate(file);
Writer writer = new StringWriter();
HashMap<String, Object> model = new HashMap<String, Object>();
model.put("title","Jade");
jade.renderTemplate(template,model, writer);
String html = writer.toString();
String expected = readFile(resourcePath+file.replace(".jade", ".html")).trim().replaceAll("\r", "");
assertEquals(file, expected, html.trim());
}
private String readFile(String fileName) throws IOException {
return FileUtils.readFileToString(new File(fileName));
}
@Parameterized.Parameters(name="{0}")
public static Collection<String[]> data() {
File folder = new File(TestFileHelper.getOriginal20150515ResourcePath("/cases"));
Collection<File> files = FileUtils.listFiles(folder, new String[]{"jade"}, false);
Collection<String[]> data = new ArrayList<String[]>();
for (File file : files) {
if (!ArrayUtils.contains(ignoredCases, file.getName().replace(".jade", ""))) {
data.add(new String[]{"cases/"+file.getName()});
}
}
return data;
}
}