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.ClasspathTemplateLoader;
import de.neuland.jade4j.template.FileTemplateLoader;
import de.neuland.jade4j.template.JadeTemplate;
import de.neuland.jade4j.template.TemplateLoader;
import org.apache.commons.io.Charsets;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import java.io.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import static org.junit.Assert.assertEquals;
@RunWith(Parameterized.class)
public class IssuesTest {
private static String[] ignoredCases = new String[]{"100","131"};
private String file;
public IssuesTest(String file) {
this.file = file;
}
@Test
public void shouldCompileJadeToHtml() throws Exception {
FileTemplateLoader templateLoader = new FileTemplateLoader(TestFileHelper.getIssuesResourcePath(""), "UTF-8");
String templateName = file;
compareJade(templateLoader, templateName);
}
@Test
public void shouldCompileJadeToHtmlWithClasspathTemplateLoader() throws Exception {
ClasspathTemplateLoader templateLoader = new ClasspathTemplateLoader();
String templateName = "issues/" + file;
compareJade(templateLoader, templateName);
}
private void compareJade(TemplateLoader templateLoader, String templateName) throws IOException {
JadeConfiguration jade = new JadeConfiguration();
jade.setTemplateLoader(templateLoader);
// 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("markdown", new MarkdownFilter());
jade.setFilter("verbatim", new VerbatimFilter());
jade.setFilter("js", new JsFilter());
jade.setFilter("css", new CssFilter());
// jade.setFilter("coffee-script", new CoffeeScriptFilter());
jade.setPrettyPrint(true);
JadeTemplate template = jade.getTemplate(templateName);
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(file.replace(".jade", ".html")).trim().replaceAll("\r", "");
assertEquals(file, expected, html.trim());
}
private String readFile(String fileName) throws IOException {
return FileUtils.readFileToString(new File(TestFileHelper.getIssuesResourcePath(fileName)));
}
@Parameterized.Parameters(name="{0}")
public static Collection<String[]> data() {
File folder = new File(TestFileHelper.getIssuesResourcePath(""));
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", "")) && !file.getName().startsWith("_")) {
data.add(new String[]{file.getName()});
}
}
return data;
}
}