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 0000000000000000000000000000000000000000..8a5641077584a01f577b648c99584586f479e304 --- /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 0000000000000000000000000000000000000000..a4d51bf9e88149ecc221dee2ea1cc38678435419 --- /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 0000000000000000000000000000000000000000..035ea80dbc35c1be38965fce6d6883bfb2a6bbc5 --- /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 0000000000000000000000000000000000000000..7ffeba8539b59bd7156a4032b0f34f7264f3f457 --- /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 0000000000000000000000000000000000000000..f93a7928df5aa2d6afd5560bc127020117eed19a --- /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++) {/* ... */} + } +} + +