From f628250a13383cd88e80a4d132db95ca5e36241e Mon Sep 17 00:00:00 2001 From: Frank Mulder Date: Tue, 22 Jul 2025 10:27:03 +0200 Subject: [PATCH] Add code check for conditional/ternary expressions --- .../checks/ConditionalExpressionUsed.java | 22 ++++++++++++++ .../checks/ConditionalExpressionUsedTest.java | 23 ++++++++++++++ .../fixtures/ConditionalExpressionUsed.java | 30 +++++++++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 andy/src/main/java/nl/tudelft/cse1110/andy/codechecker/checks/ConditionalExpressionUsed.java create mode 100644 andy/src/test/java/unit/codechecker/checks/ConditionalExpressionUsedTest.java create mode 100644 andy/src/test/resources/codechecker/fixtures/ConditionalExpressionUsed.java diff --git a/andy/src/main/java/nl/tudelft/cse1110/andy/codechecker/checks/ConditionalExpressionUsed.java b/andy/src/main/java/nl/tudelft/cse1110/andy/codechecker/checks/ConditionalExpressionUsed.java new file mode 100644 index 00000000..67631a52 --- /dev/null +++ b/andy/src/main/java/nl/tudelft/cse1110/andy/codechecker/checks/ConditionalExpressionUsed.java @@ -0,0 +1,22 @@ +package nl.tudelft.cse1110.andy.codechecker.checks; + +import org.eclipse.jdt.core.dom.ConditionalExpression; + +public class ConditionalExpressionUsed extends Check { + private boolean conditionalExpressionFound = false; + + @Override + public boolean visit(ConditionalExpression node) { + conditionalExpressionFound = true; + return super.visit(node); + } + + @Override + public boolean result() { + return conditionalExpressionFound; + } + + public String toString() { + return "Conditional/ternary expression is used"; + } +} diff --git a/andy/src/test/java/unit/codechecker/checks/ConditionalExpressionUsedTest.java b/andy/src/test/java/unit/codechecker/checks/ConditionalExpressionUsedTest.java new file mode 100644 index 00000000..29228ae4 --- /dev/null +++ b/andy/src/test/java/unit/codechecker/checks/ConditionalExpressionUsedTest.java @@ -0,0 +1,23 @@ +package unit.codechecker.checks; + +import nl.tudelft.cse1110.andy.codechecker.checks.Check; +import nl.tudelft.cse1110.andy.codechecker.checks.ConditionalExpressionUsed; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class ConditionalExpressionUsedTest extends ChecksBaseTest { + @Test + void conditionalExpressionUsed() { + Check check = new ConditionalExpressionUsed(); + run("ConditionalExpressionUsed.java", check); + assertThat(check.result()).isTrue(); + } + + @Test + void conditionalExpressionNotUsed() { + Check check = new ConditionalExpressionUsed(); + run("NoTests.java", check); + assertThat(check.result()).isFalse(); + } +} diff --git a/andy/src/test/resources/codechecker/fixtures/ConditionalExpressionUsed.java b/andy/src/test/resources/codechecker/fixtures/ConditionalExpressionUsed.java new file mode 100644 index 00000000..290d6978 --- /dev/null +++ b/andy/src/test/resources/codechecker/fixtures/ConditionalExpressionUsed.java @@ -0,0 +1,30 @@ +package delft; + +import java.util.*; +import java.util.stream.*; + +import org.junit.jupiter.api.*; +import org.junit.jupiter.params.*; +import org.junit.jupiter.params.provider.*; + +import net.jqwik.api.*; +import net.jqwik.api.Tuple.*; +import net.jqwik.api.arbitraries.*; +import net.jqwik.api.constraints.*; + +import static org.assertj.core.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.*; + +class ConditionalExpressionUsed { + private final List primesUnder30 = List.of(2, 3, 5, 7, 11, 13, 17, 19, 23, 29); + + public boolean primeFactorsCorrect(List factors, int k) { + boolean foundWrongOne = false; + int total = 1; + for (int v : factors) { + foundWrongOne = (!primesUnder30.contains(v)) ? true : foundWrongOne; + total *= v; + } + return (!foundWrongOne && total == k); + } +}