package flow.netbeans.markdown.highlighter;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URISyntaxException;
import java.net.URL;
import org.netbeans.api.lexer.Language;
import org.netbeans.api.lexer.TokenHierarchy;
import org.netbeans.api.lexer.TokenId;
import org.netbeans.api.lexer.TokenSequence;
import org.openide.util.Utilities;
public class MarkdownLexerTestBase {
protected String getTestResult(String filename) throws Exception {
String content = getFileContent(getTestFile(filename));
Language<MarkdownTokenId> language = MarkdownTokenId.language();
TokenHierarchy<?> hierarchy = TokenHierarchy.create(content, language);
return createResult(hierarchy.tokenSequence(language));
}
private String createResult(TokenSequence<?> ts) throws Exception {
StringBuilder result = new StringBuilder();
while (ts.moveNext()) {
TokenId tokenId = ts.token().id();
CharSequence text = ts.token().text();
result.append("token #");
result.append(ts.index());
result.append(" ");
result.append(tokenId.name());
String token = replaceLinesAndTabs(text.toString());
if (!token.isEmpty()) {
result.append(" ");
result.append("[");
result.append(token);
result.append("]");
}
result.append("\n");
}
return result.toString();
}
protected File getTestDataDir() {
URL codebase = getClass().getProtectionDomain().getCodeSource().getLocation();
if (!codebase.getProtocol().equals("file")) {
throw new Error("Cannot find data directory from " + codebase);
}
File dataDir;
try {
dataDir = new File(Utilities.toFile(codebase.toURI()).getParentFile(), "data");
} catch (URISyntaxException x) {
throw new Error(x);
}
return dataDir;
}
protected File getGoldenFilesDir() {
return new File(getTestDataDir(), "goldenfiles");
}
protected File getTestFilesDir() {
return new File(getTestDataDir(), "testfiles");
}
protected File getGoldenFile(String name) {
return new File(getGoldenFilesDir(), name);
}
protected String getGoldenFileContent(String name) throws IOException {
return getFileContent(getGoldenFile(name));
}
protected String getTestFileContent(String name) throws IOException {
return getFileContent(getTestFile(name));
}
protected File getTestFile(String name) {
return new File(getTestFilesDir(), name);
}
/**
* Get content of the file.
*/
public static String getFileContent(File file) throws IOException {
StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
try {
String line = br.readLine();
while (line != null) {
sb.append(line);
sb.append("\n");
line = br.readLine();
}
} finally {
br.close();
}
return sb.toString();
}
/**
* Escape "\n", "\r" and "\t".
*/
public static String replaceLinesAndTabs(String input) {
String escapedString = input;
escapedString = escapedString.replaceAll("\n", "\\\\n"); //NOI18N
escapedString = escapedString.replaceAll("\r", "\\\\r"); //NOI18N
escapedString = escapedString.replaceAll("\t", "\\\\t"); //NOI18N
return escapedString;
}
}