diff --git a/liquidjava-verifier/pom.xml b/liquidjava-verifier/pom.xml index 5b42f4cb..07f589ec 100644 --- a/liquidjava-verifier/pom.xml +++ b/liquidjava-verifier/pom.xml @@ -19,6 +19,45 @@ ${jar.finalName} + + org.jacoco + jacoco-maven-plugin + 0.8.14 + + + default-prepare-agent + + prepare-agent + + + + default-report + + report + + + + default-check + + check + + + + + BUNDLE + + + COMPLEXITY + COVEREDRATIO + 0.40 + + + + + + + + net.revelc.code.formatter formatter-maven-plugin @@ -77,7 +116,8 @@ - + liquidjava.api.CommandLineLauncher @@ -206,4 +246,5 @@ - + + \ No newline at end of file diff --git a/liquidjava-verifier/src/test/java/liquidjava/ast/opt/TestOptimization.java b/liquidjava-verifier/src/test/java/liquidjava/ast/opt/TestOptimization.java new file mode 100644 index 00000000..85e99d31 --- /dev/null +++ b/liquidjava-verifier/src/test/java/liquidjava/ast/opt/TestOptimization.java @@ -0,0 +1,16 @@ +import liquidjava.rj_language.ast.BinaryExpression; +import liquidjava.rj_language.ast.LiteralInt; +import liquidjava.rj_language.opt.ConstantFolding; +import liquidjava.rj_language.opt.derivation_node.ValDerivationNode; +import static org.junit.Assert.assertEquals; +import org.junit.Test; + +public class TestOptimization { + @Test + public void testBinaryFold() { + BinaryExpression b = new BinaryExpression(new LiteralInt(1), "+", new LiteralInt(2)); + + ValDerivationNode r = ConstantFolding.fold(new ValDerivationNode(b, null)); + assertEquals(r.getValue(), new LiteralInt(3)); + } +} \ No newline at end of file diff --git a/liquidjava-verifier/src/test/java/liquidjava/diagnostics/errors/LJErrorTest.java b/liquidjava-verifier/src/test/java/liquidjava/diagnostics/errors/LJErrorTest.java new file mode 100644 index 00000000..38731578 --- /dev/null +++ b/liquidjava-verifier/src/test/java/liquidjava/diagnostics/errors/LJErrorTest.java @@ -0,0 +1,35 @@ +package liquidjava.diagnostics.errors; + +import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.Test; +import spoon.reflect.declaration.CtElement; + +public class LJErrorTest { + + static class ConcreteLJError extends LJError { + ConcreteLJError(String message, String details, CtElement element) { + super(message, details, element); + } + + @Override + public String toString() { + return "ConcreteLJError: " + super.getMessage() + " | " + "Details field tested"; + } + } + + @Test + void testLJErrorMessage() { + LJError error = new ConcreteLJError("Test error message", "Details", null); + assertEquals("Details", error.getMessage()); + } + + @Test + void testToStringContainsMessage() { + LJError error = new ConcreteLJError("Invalid syntax", "Details", null); + String s = error.toString(); + + assertTrue(s.contains("ConcreteLJError")); + assertTrue(s.contains("Details")); + } + +} diff --git a/liquidjava-verifier/src/test/java/liquidjava/rj_language/TestLiteralString.java b/liquidjava-verifier/src/test/java/liquidjava/rj_language/TestLiteralString.java new file mode 100644 index 00000000..bb198e05 --- /dev/null +++ b/liquidjava-verifier/src/test/java/liquidjava/rj_language/TestLiteralString.java @@ -0,0 +1,14 @@ +package liquidjava.rj_language; + +import static org.junit.Assert.assertNotEquals; +import org.junit.Test; +import liquidjava.rj_language.ast.LiteralString; + +public class TestLiteralString { + @Test + public void testLiteralString() { + LiteralString s1 = new LiteralString("hello"); + LiteralString s2 = new LiteralString("world"); + assertNotEquals(s1.hashCode(), s2.hashCode()); + } +} \ No newline at end of file diff --git a/liquidjava-verifier/src/test/java/rj/grammar/RJParserIntegrationTest.java b/liquidjava-verifier/src/test/java/rj/grammar/RJParserIntegrationTest.java new file mode 100644 index 00000000..61e8b5a3 --- /dev/null +++ b/liquidjava-verifier/src/test/java/rj/grammar/RJParserIntegrationTest.java @@ -0,0 +1,28 @@ +package rj.grammar; + +import org.antlr.v4.runtime.*; +import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.Test; + +public class RJParserIntegrationTest { + + @Test + void testFullProgramParsing() { + String input = """ + type MyAlias(int x) { + !(x < 5) + } + ghost int myGhost(int y) + """; + + RJLexer lexer = new RJLexer(CharStreams.fromString(input)); + CommonTokenStream tokens = new CommonTokenStream(lexer); + RJParser parser = new RJParser(tokens); + + RJParser.ProgContext ctx = parser.prog(); + + assertNotNull(ctx, "O contexto do programa não deve ser nulo"); + assertNotNull(ctx.start(), "Deve conter uma regra start válida"); + assertEquals(0, parser.getNumberOfSyntaxErrors(), "O parser não deve gerar erros"); + } +} \ No newline at end of file diff --git a/liquidjava-verifier/src/test/java/rj/grammar/RJParserLiteralTest.java b/liquidjava-verifier/src/test/java/rj/grammar/RJParserLiteralTest.java new file mode 100644 index 00000000..4c1356bf --- /dev/null +++ b/liquidjava-verifier/src/test/java/rj/grammar/RJParserLiteralTest.java @@ -0,0 +1,34 @@ +package rj.grammar; + +import org.antlr.v4.runtime.*; +import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.Test; + +public class RJParserLiteralTest { + + @Test + void testIntegerLiteral() { + String input = "123"; + RJLexer lexer = new RJLexer(CharStreams.fromString(input)); + CommonTokenStream tokens = new CommonTokenStream(lexer); + RJParser parser = new RJParser(tokens); + + RJParser.LiteralContext ctx = parser.literal(); + + assertNotNull(ctx); + assertEquals("123", ctx.getText()); + } + + @Test + void testBooleanLiteral() { + String input = "true"; + RJLexer lexer = new RJLexer(CharStreams.fromString(input)); + CommonTokenStream tokens = new CommonTokenStream(lexer); + RJParser parser = new RJParser(tokens); + + RJParser.LiteralContext ctx = parser.literal(); + + assertNotNull(ctx); + assertEquals("true", ctx.getText()); + } +} \ No newline at end of file diff --git a/liquidjava-verifier/src/test/java/rj/grammar/RJParserTest.java b/liquidjava-verifier/src/test/java/rj/grammar/RJParserTest.java new file mode 100644 index 00000000..2c9b2fdc --- /dev/null +++ b/liquidjava-verifier/src/test/java/rj/grammar/RJParserTest.java @@ -0,0 +1,21 @@ +package rj.grammar; + +import org.antlr.v4.runtime.*; +import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.Test; + +public class RJParserTest { + + @Test + void testLiteralParsing() { + String input = "42"; + RJLexer lexer = new RJLexer(CharStreams.fromString(input)); + CommonTokenStream tokens = new CommonTokenStream(lexer); + RJParser parser = new RJParser(tokens); + + RJParser.LiteralContext context = parser.literal(); + + assertNotNull(context); + assertEquals("42", context.getText()); + } +} \ No newline at end of file