package org.test4j.module.dbfit.utility;
import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
import org.test4j.tools.commons.ResourceHelper;
import org.test4j.tools.commons.StringHelper;
/**
* fit文件运行错误汇总
*
* @author darui.wudr
*/
public class ErrorRecorder {
final static String FIT_WRONG_MESSAGE_HTML = System.getProperty("user.dir") + "/target/dbfit/fitnesse.wrong.html";
/**
* 重新创建一个新的fitnesse运行错误汇总文件
*
* @throws Exception
*/
public static void createNewErrorFile() {
try {
File file = new File(FIT_WRONG_MESSAGE_HTML);
ResourceHelper.mkFileParentDir(file);
Writer writer = new FileWriter(file, false);
writer.write("<html><style>");
writer.write(ResourceHelper.readFromFile(FitRunner.Fitnesse_Css_Resource_Path));
writer.write("</style><body>");
writer.close();
} catch (Throwable e1) {
throw new RuntimeException(e1);
}
}
private final static String NO_FAILURE = "<div class='pass'>no failure</div>";
private static boolean HAS_ADD_ERROR = false;
/**
* 记录fitnesse的运行错误
*
* @param wikiname
* @param file
* @param html
* @param e
*/
public static void addError(WikiFile wiki, String html, Exception e) {
HAS_ADD_ERROR = true;
StringBuilder buffer = new StringBuilder();
String exception = StringHelper.exceptionTrace(e, StringHelper.DEFAULT_EXCEPTION_FILTER);
buffer.append("<br/><br/><div>============" + wiki.getWikiUrl() + "==============</div></br>");
buffer.append("<table border='1' cellspacing='0'>");
buffer.append("<tr><td class='error'><div class='fit_stacktrace'>" + exception + "</div></td></tr>");
buffer.append("</table><br/>");
int start = html.indexOf("<table");
int end = html.length() - 8;
String content = html.substring(start, end).trim();
buffer.append(content);
try {
File htmlFile = new File(FIT_WRONG_MESSAGE_HTML);
if (htmlFile.exists() == false) {
createNewErrorFile();
}
Writer writer = new FileWriter(htmlFile, true);
writer.write(buffer.toString());
writer.close();
} catch (Throwable e1) {
throw new RuntimeException(e1);
}
}
public static void endAddError() {
try {
File file = new File(FIT_WRONG_MESSAGE_HTML);
String header = "";
if (file.exists() == false) {
ResourceHelper.mkFileParentDir(file);
header = String.format("<html><style>%s</style><body>", FitRunner.Fitnesse_Css_Resource_Path);
}
Writer writer = new FileWriter(file, true);
writer.write(header);
if (HAS_ADD_ERROR == false) {
writer.write(NO_FAILURE);
}
writer.write("</body></html>");
writer.close();
} catch (Throwable e1) {
throw new RuntimeException(e1);
}
}
}