use of abs.frontend.parser.ParserError in project abstools by abstools.
the class ASTBasedABSTestRunnerGeneratorTest method testGenerateTestRunner.
@Test
public final void testGenerateTestRunner() {
final Model model;
try {
model = Main.parseString(ABS_UNIT + TEST_CODE, true);
} catch (Exception e) {
throw new IllegalStateException("Cannot parse test code", e);
}
ABSTestRunnerGenerator generator = new ASTBasedABSTestRunnerGenerator(model);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
PrintStream print = new PrintStream(stream);
generator.generateTestRunner(print);
String runner = stream.toString();
try {
Model result = Main.parseString(ABS_UNIT + TEST_CODE + runner, true);
StringBuilder parseErrors = new StringBuilder();
if (result.hasParserErrors()) {
parseErrors.append("Syntactic errors: ");
List<ParserError> es = result.getParserErrors();
parseErrors.append(es.size());
parseErrors.append("\n");
for (ParserError e : es) {
parseErrors.append(e.getHelpMessage());
parseErrors.append("\n");
}
}
assertFalse("Generated code must not have parse error: " + parseErrors, result.hasParserErrors());
StringBuilder errors = new StringBuilder();
if (result.hasErrors()) {
SemanticConditionList el = result.getErrors();
errors.append("Semantic errors: ");
errors.append(el.getErrorCount());
errors.append("\n");
for (SemanticCondition error : el) {
errors.append(error.getHelpMessage());
errors.append("\n");
}
}
assertFalse("Generated code must not have semantic error: " + errors, result.hasErrors());
result.typeCheck();
assertFalse("Generated code must not have type error", result.hasTypeErrors());
assertThat("Has one module that has the name 'AbsUnit.TestRunner' and a main block", result.getModuleDecls(), hasItem(new ModuleMatcher()));
} catch (Exception e) {
fail("Cannot throw an exception ");
}
}
use of abs.frontend.parser.ParserError in project abstools by abstools.
the class ModuleDecorator method hasModuleDeclErrors.
/**
* Determines if a module declaration has any errors
*
* @param m
* the module declaration
* @param nature
* the ABS nature
* @return TRUE if the module declaration has errors, FALSE if not or m or
* nature is null
*/
public boolean hasModuleDeclErrors(ModuleDecl m, AbsNature nature) {
synchronized (nature.modelLock) {
if (m != null) {
CompilationUnit cu = m.getCompilationUnit();
EditorPosition pos = UtilityFunctions.getPosition(m);
int startLine = pos.getLinestart();
int endLine = pos.getLineend();
List<ParserError> parserErrors = cu.getParserErrors();
SemanticConditionList list = cu.getModel().getTypeErrors();
if (checkParserErrorRange(startLine, endLine, parserErrors)) {
return true;
} else {
return checkSemanticErrorRange(list, cu, startLine, endLine, nature);
}
}
return false;
}
}
use of abs.frontend.parser.ParserError in project abstools by abstools.
the class ParseException method getMessage.
private static String getMessage(List<ParserError> parseErrors) {
StringBuffer result = new StringBuffer("Project contains parse errors: ");
for (ParserError error : parseErrors) {
// TODO: newline doesn't work ):
result.append("\n");
result.append(error.getFileName());
result.append(':');
result.append(error.getLine());
result.append(':');
result.append(error.getColumn());
result.append(' ');
result.append(error.getMessage());
}
return result.toString();
}
Aggregations