Search in sources :

Example 6 with SemanticCondition

use of org.abs_models.frontend.analyser.SemanticCondition in project abstools by abstools.

the class CaseStudyTypeChecking method assertParseFilesOk.

protected Model assertParseFilesOk(String srcFolder, Config... config) throws IOException, WrongProgramArgumentException, InternalBackendException {
    File srcFolderF = new File(srcFolder);
    assertTrue(srcFolder, srcFolderF.exists());
    Main main = new Main();
    Model m = main.parse(findAbsFiles(srcFolderF));
    if (m != null) {
        m.evaluateAllProductDeclarations();
        if (m.hasParserErrors())
            Assert.fail(m.getParserErrors().get(0).getMessage());
        int numSemErrs = m.getErrors().getErrorCount();
        StringBuffer errs = new StringBuffer("Semantic errors: " + numSemErrs + "\n");
        if (numSemErrs > 0) {
            for (SemanticCondition error : m.getErrors()) errs = errs.append(error.getHelpMessage() + "\n");
            fail("Failed to parse: " + srcFolder + "\n" + errs.toString());
        } else if (isSet(TYPE_CHECK, config)) {
            SemanticConditionList l = m.typeCheck();
            if (l.containsErrors()) {
                for (SemanticCondition error : l) errs = errs.append(error.getHelpMessage() + "\n");
                fail("Failed to typecheck: " + srcFolder + "\n" + errs.toString());
            }
        }
    }
    return m;
}
Also used : SemanticConditionList(org.abs_models.frontend.analyser.SemanticConditionList) SemanticCondition(org.abs_models.frontend.analyser.SemanticCondition) Model(org.abs_models.frontend.ast.Model) File(java.io.File) Main(org.abs_models.frontend.parser.Main)

Example 7 with SemanticCondition

use of org.abs_models.frontend.analyser.SemanticCondition in project abstools by abstools.

the class ASTBasedABSTestRunnerGeneratorTest method testGenerateTestRunner.

@Test
public final void testGenerateTestRunner() {
    final Model model;
    try {
        model = ABSTest.parseString(ABS_UNIT + TEST_CODE);
    } 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 = ABSTest.parseString(ABS_UNIT + TEST_CODE + runner);
        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 ");
    }
}
Also used : PrintStream(java.io.PrintStream) ParserError(org.abs_models.frontend.parser.ParserError) SemanticCondition(org.abs_models.frontend.analyser.SemanticCondition) ByteArrayOutputStream(java.io.ByteArrayOutputStream) SemanticConditionList(org.abs_models.frontend.analyser.SemanticConditionList) Model(org.abs_models.frontend.ast.Model) ABSTest(org.abs_models.ABSTest) Test(org.junit.Test)

Aggregations

SemanticCondition (org.abs_models.frontend.analyser.SemanticCondition)7 SemanticConditionList (org.abs_models.frontend.analyser.SemanticConditionList)6 Model (org.abs_models.frontend.ast.Model)2 Constraint (choco.kernel.model.constraints.Constraint)1 ByteArrayOutputStream (java.io.ByteArrayOutputStream)1 File (java.io.File)1 PrintStream (java.io.PrintStream)1 ABSTest (org.abs_models.ABSTest)1 Main (org.abs_models.frontend.parser.Main)1 ParserError (org.abs_models.frontend.parser.ParserError)1 Test (org.junit.Test)1