From 7e00492c97791f0404b307ad33e831fde659544e Mon Sep 17 00:00:00 2001 From: Johannes Mey <johannes.mey@tu-dresden.de> Date: Sat, 4 Jan 2020 18:43:40 +0100 Subject: [PATCH] add trivial test from SEI CERT Oracle Coding Standard for Java --- .../src/test/java/org/extendj/DCL51JTest.java | 32 +++++++++++++++++++ .../resources/dcl51-j/FieldComplient.java | 10 ++++++ .../resources/dcl51-j/FieldNoncomplient.java | 10 ++++++ .../resources/dcl51-j/VariableCompliant.java | 9 ++++++ .../dcl51-j/VariableNoncompliant.java | 12 +++++++ 5 files changed, 73 insertions(+) create mode 100644 scope4j/src/test/java/org/extendj/DCL51JTest.java create mode 100644 scope4j/src/test/resources/dcl51-j/FieldComplient.java create mode 100644 scope4j/src/test/resources/dcl51-j/FieldNoncomplient.java create mode 100644 scope4j/src/test/resources/dcl51-j/VariableCompliant.java create mode 100644 scope4j/src/test/resources/dcl51-j/VariableNoncompliant.java diff --git a/scope4j/src/test/java/org/extendj/DCL51JTest.java b/scope4j/src/test/java/org/extendj/DCL51JTest.java new file mode 100644 index 0000000..8a56410 --- /dev/null +++ b/scope4j/src/test/java/org/extendj/DCL51JTest.java @@ -0,0 +1,32 @@ +package org.extendj; + +import org.extendj.ast.AbstractFinding; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.Set; + +public class DCL51JTest extends ScopeAnalysisTest { + + @Test + void test() { + + // see https://wiki.sei.cmu.edu/confluence/display/java/DCL51-J.+Do+not+shadow+or+obscure+identifiers+in+subscopes + + ScopeAnalysis scopeAnalysis = new ScopeAnalysis(); + Set<AbstractFinding> findings = scopeAnalysis.analyze("src/test/resources/dcl51-j", true, true); + + System.out.println(findings); + +// final String fFieldComplient = "src/test/resources/dcl51-j/FieldComplient.java"; + final String fFieldNoncomplient = "src/test/resources/dcl51-j/FieldNoncomplient.java"; +// final String fVariableCompliant = "src/test/resources/dcl51-j/VariableCompliant.java"; + final String fVariableNoncompliant = "src/test/resources/dcl51-j/VariableNoncompliant.java"; + + assertShadow(findings, "val", fFieldNoncomplient, 7, fFieldNoncomplient, 5); + assertShadow(findings, "i", fVariableNoncompliant, 8, fVariableNoncompliant, 5); + + Assertions.assertEquals(2, findings.size()); + } + +} diff --git a/scope4j/src/test/resources/dcl51-j/FieldComplient.java b/scope4j/src/test/resources/dcl51-j/FieldComplient.java new file mode 100644 index 0000000..a4d51bf --- /dev/null +++ b/scope4j/src/test/resources/dcl51-j/FieldComplient.java @@ -0,0 +1,10 @@ +/** + * Compliant Solution (Field Shadowing) + */ +public class FieldComplient { + private int val = 1; + private void doLogic() { + int newValue; + //... + } +} diff --git a/scope4j/src/test/resources/dcl51-j/FieldNoncomplient.java b/scope4j/src/test/resources/dcl51-j/FieldNoncomplient.java new file mode 100644 index 0000000..035ea80 --- /dev/null +++ b/scope4j/src/test/resources/dcl51-j/FieldNoncomplient.java @@ -0,0 +1,10 @@ +/** + * Noncompliant Code Example (Field Shadowing) + */ +public class FieldNoncomplient { + private int val = 1; + private void doLogic() { + int val; + //... + } +} diff --git a/scope4j/src/test/resources/dcl51-j/VariableCompliant.java b/scope4j/src/test/resources/dcl51-j/VariableCompliant.java new file mode 100644 index 0000000..7ffeba8 --- /dev/null +++ b/scope4j/src/test/resources/dcl51-j/VariableCompliant.java @@ -0,0 +1,9 @@ +/** + * Compliant Solution (Variable Shadowing) + */ +public class VariableCompliant { + private void doLogic() { + for (int i = 0; i < 10; i++) {/* ... */} + for (int i = 0; i < 20; i++) {/* ... */} + } +} diff --git a/scope4j/src/test/resources/dcl51-j/VariableNoncompliant.java b/scope4j/src/test/resources/dcl51-j/VariableNoncompliant.java new file mode 100644 index 0000000..f93a792 --- /dev/null +++ b/scope4j/src/test/resources/dcl51-j/VariableNoncompliant.java @@ -0,0 +1,12 @@ +/** + * Noncompliant Code Example (Variable Shadowing) + */ +public class VariableNoncompliant { + private int i = 0; + private void doLogic() { + for (i = 0; i < 10; i++) {/* ... */} + for (int i = 0; i < 20; i++) {/* ... */} + } +} + + -- GitLab