From ebec224a36146770a4e8a4563abe3f5d0f01b418 Mon Sep 17 00:00:00 2001 From: azevedo Date: Thu, 30 Oct 2025 17:17:58 +0000 Subject: [PATCH 1/4] =?UTF-8?q?Testes=20unit=C3=A1rio=20e=20de=20integra?= =?UTF-8?q?=C3=A7=C3=A3o=20adicionados?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- liquidjava-verifier/pom.xml | 40 +++++++++++++++++++ .../rj_language/TestLiteralString.java | 14 +++++++ .../rj_language/opt/TestOptimization.java | 18 +++++++++ 3 files changed, 72 insertions(+) create mode 100644 liquidjava-verifier/src/test/java/liquidjava/rj_language/TestLiteralString.java create mode 100644 liquidjava-verifier/src/test/java/liquidjava/rj_language/opt/TestOptimization.java diff --git a/liquidjava-verifier/pom.xml b/liquidjava-verifier/pom.xml index 5b42f4cb..5a58a4d0 100644 --- a/liquidjava-verifier/pom.xml +++ b/liquidjava-verifier/pom.xml @@ -38,6 +38,46 @@ 20 + + + org.jacoco + jacoco-maven-plugin + 0.8.14 + + + default-prepare-agent + + prepare-agent + + + + default-report + + report + + + + default-check + + check + + + + + BUNDLE + + + COMPLEXITY +COVEREDRATIO +0.60 + + + + + + + + org.apache.maven.plugins maven-compiler-plugin 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..7e82772f --- /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()); + } +} diff --git a/liquidjava-verifier/src/test/java/liquidjava/rj_language/opt/TestOptimization.java b/liquidjava-verifier/src/test/java/liquidjava/rj_language/opt/TestOptimization.java new file mode 100644 index 00000000..cdf819a8 --- /dev/null +++ b/liquidjava-verifier/src/test/java/liquidjava/rj_language/opt/TestOptimization.java @@ -0,0 +1,18 @@ +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +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; + +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)); + } +} From f31732fc37ffe92e776736e1a1781426b7e3f8dc Mon Sep 17 00:00:00 2001 From: azevedo Date: Thu, 30 Oct 2025 17:32:17 +0000 Subject: [PATCH 2/4] =?UTF-8?q?Testes=20unit=C3=A1rio=20e=20de=20integra?= =?UTF-8?q?=C3=A7=C3=A3o=20adicionados=20(2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rj_language/TestIntegration.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 liquidjava-verifier/src/test/java/liquidjava/rj_language/TestIntegration.java diff --git a/liquidjava-verifier/src/test/java/liquidjava/rj_language/TestIntegration.java b/liquidjava-verifier/src/test/java/liquidjava/rj_language/TestIntegration.java new file mode 100644 index 00000000..9bcf7956 --- /dev/null +++ b/liquidjava-verifier/src/test/java/liquidjava/rj_language/TestIntegration.java @@ -0,0 +1,19 @@ +package liquidjava.integration; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +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; + +public class TestIntegration { + @Test + public void testConstantFoldingIntegration() { + BinaryExpression expr = new BinaryExpression(new LiteralInt(3), "*", new LiteralInt(4)); + ValDerivationNode result = ConstantFolding.fold(new ValDerivationNode(expr, null)); + assertEquals(new LiteralInt(12), result.getValue()); + } +} From f237d2a041b1beb2864dc474e34ba6b13baf4ede Mon Sep 17 00:00:00 2001 From: azevedo Date: Mon, 10 Nov 2025 16:31:51 +0000 Subject: [PATCH 3/4] =?UTF-8?q?Adicionado=20JaCoCo,=20teste=20unit=C3=A1ri?= =?UTF-8?q?o=20de=20hashCode()=20e=20teste=20de=20integra=C3=A7=C3=A3o=20e?= =?UTF-8?q?ntre=20ConstantFolding=20e=20BinaryExpression?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- liquidjava-verifier/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/liquidjava-verifier/pom.xml b/liquidjava-verifier/pom.xml index 5a58a4d0..d3aeacf0 100644 --- a/liquidjava-verifier/pom.xml +++ b/liquidjava-verifier/pom.xml @@ -69,7 +69,7 @@ COMPLEXITY COVEREDRATIO -0.60 +0.4 From b2c110e78a078b1b8c80d93d2342b8ba65e14e78 Mon Sep 17 00:00:00 2001 From: azevedo Date: Mon, 10 Nov 2025 16:44:38 +0000 Subject: [PATCH 4/4] =?UTF-8?q?Adicionado=20teste=20de=20integra=C3=A7?= =?UTF-8?q?=C3=A3o=20para=20ComandLineLauncher?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CommandLineLauncherIntegrationTest.java | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 liquidjava-verifier/src/test/java/liquidjava/rj_language/CommandLineLauncherIntegrationTest.java diff --git a/liquidjava-verifier/src/test/java/liquidjava/rj_language/CommandLineLauncherIntegrationTest.java b/liquidjava-verifier/src/test/java/liquidjava/rj_language/CommandLineLauncherIntegrationTest.java new file mode 100644 index 00000000..ba435644 --- /dev/null +++ b/liquidjava-verifier/src/test/java/liquidjava/rj_language/CommandLineLauncherIntegrationTest.java @@ -0,0 +1,73 @@ +package liquidjava.verifier.integration; + +import static org.junit.jupiter.api.Assertions.*; + +import java.io.*; +import java.nio.file.*; +import java.util.*; + +import org.junit.jupiter.api.*; + +public class CommandLineLauncherIntegrationTest { + + private static final String VERIFIER_MAIN = "liquidjava.api.CommandLineLauncher"; + + @BeforeAll + static void setup() { + // se necessário: compilar os exemplos ou garantir que os ficheiros de teste existem + } + + @Test + void testCorrectExampleShouldPassVerification() throws Exception { + // supondo que existe no projecto um ficheiro de exemplo “CorrectSimpleAssignment.java” + Path example = Paths.get("liquidjava-example/src/main/java/testSuite/CorrectSimpleAssignment.java"); + assertTrue(Files.exists(example), "Ficheiro de exemplo correcto não encontrado: " + example); + + ProcessBuilder pb = new ProcessBuilder( + "java", + "-cp", + System.getProperty("java.class.path"), + VERIFIER_MAIN, + example.toString() + ); + pb.redirectErrorStream(true); + Process process = pb.start(); + + String output; + try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) { + output = reader.lines().reduce("", (a,b) -> a + b + System.lineSeparator()); + } + int exitCode = process.waitFor(); + // verificar que passou + assertEquals(0, exitCode, "Exit code devia ser 0 para caso correcto. Output:\n" + output); + assertTrue(output.contains("Correct! Passed Verification") || output.contains("Passed Verification"), + "Output inesperado para caso correcto: " + output); + } + + @Test + void testErrorExampleShouldFailVerification() throws Exception { + // supondo que existe o ficheiro “ErrorSimpleAssignment.java” + Path example = Paths.get("liquidjava-example/src/main/java/testSuite/ErrorSimpleAssignment.java"); + assertTrue(Files.exists(example), "Ficheiro de exemplo de erro não encontrado: " + example); + + ProcessBuilder pb = new ProcessBuilder( + "java", + "-cp", + System.getProperty("java.class.path"), + VERIFIER_MAIN, + example.toString() + ); + pb.redirectErrorStream(true); + Process process = pb.start(); + + String output; + try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) { + output = reader.lines().reduce("", (a,b) -> a + b + System.lineSeparator()); + } + int exitCode = process.waitFor(); + // verificar que falhou + assertNotEquals(0, exitCode, "Exit code devia ser diferente de 0 para caso de erro. Output:\n" + output); + assertTrue(output.toLowerCase().contains("error") || output.contains("Refinement violation"), + "Output inesperado para caso de erro: " + output); + } +}