From c684ccf29f4a9534c665853b7cefd8121360e0b2 Mon Sep 17 00:00:00 2001
From: ABHAY SINGH <75938293+ABHAY0O7@users.noreply.github.com>
Date: Wed, 7 Apr 2021 02:18:24 +0530
Subject: [PATCH 1/2] Added test for CollectorClassFileVisitor
---
README.md | 2 +-
.../core/analysis/ClassFileVisitorUtils.java | 4 +-
.../DefaultProjectDependencyAnalyzer.java | 1 +
.../asm/DependencyClassFileVisitor.java | 1 +
.../CollectorClassFileVisitorTest.java | 44 ++++++++++++++++++
.../ClassFileVisitorResources/test.class | Bin 0 -> 393 bytes
6 files changed, 49 insertions(+), 3 deletions(-)
create mode 100644 depclean-core/src/test/java/se/kth/depclean/core/analysis/CollectorClassFileVisitorTest.java
create mode 100644 depclean-core/src/test/resources/ClassFileVisitorResources/test.class
diff --git a/README.md b/README.md
index 09e98243..6565d69e 100644
--- a/README.md
+++ b/README.md
@@ -81,7 +81,7 @@ You can configure the `pom.xml` file of your Maven project to use DepClean as pa
```
Or you can run DepClean directly from the command line.
-Let's see it in action with the project [Apache Nommons Numbers](https://github.com/apache/commons-numbers/tree/master/commons-numbers-examples/examples-jmh)!
+Let's see it in action with the project [Apache Commons Numbers](https://github.com/apache/commons-numbers/tree/master/commons-numbers-examples/examples-jmh)!
![Demo](https://github.com/castor-software/depclean/blob/master/.img/demo.gif)
diff --git a/depclean-core/src/main/java/se/kth/depclean/core/analysis/ClassFileVisitorUtils.java b/depclean-core/src/main/java/se/kth/depclean/core/analysis/ClassFileVisitorUtils.java
index f4dad7ae..bd717d60 100644
--- a/depclean-core/src/main/java/se/kth/depclean/core/analysis/ClassFileVisitorUtils.java
+++ b/depclean-core/src/main/java/se/kth/depclean/core/analysis/ClassFileVisitorUtils.java
@@ -64,13 +64,13 @@ public static void accept(URL url, ClassFileVisitor visitor)
if (file.isDirectory()) {
acceptDirectory(file, visitor);
} else if (file.exists()) {
- throw new IllegalArgumentException(message + url);
+ throw new IllegalArgumentException(message + url + " because file is not a directory.");
}
} catch (URISyntaxException exception) {
throw new IllegalArgumentException(message + url, exception);
}
} else {
- throw new IllegalArgumentException(message + url);
+ throw new IllegalArgumentException(message + url + " because url isn't pointing a file.");
}
}
}
diff --git a/depclean-core/src/main/java/se/kth/depclean/core/analysis/DefaultProjectDependencyAnalyzer.java b/depclean-core/src/main/java/se/kth/depclean/core/analysis/DefaultProjectDependencyAnalyzer.java
index a562cde5..9d3ef78b 100644
--- a/depclean-core/src/main/java/se/kth/depclean/core/analysis/DefaultProjectDependencyAnalyzer.java
+++ b/depclean-core/src/main/java/se/kth/depclean/core/analysis/DefaultProjectDependencyAnalyzer.java
@@ -75,6 +75,7 @@ public DefaultProjectDependencyAnalyzer(boolean isIgnoredTest) {
* @throws ProjectDependencyAnalyzerException if the analysis fails.
* @see ProjectDependencyAnalyzer#analyze(org.apache.invoke.project.MavenProject)
*/
+ @Override
public ProjectDependencyAnalysis analyze(MavenProject project) throws ProjectDependencyAnalyzerException {
try {
// a map of [dependency] -> [classes]
diff --git a/depclean-core/src/main/java/se/kth/depclean/core/analysis/asm/DependencyClassFileVisitor.java b/depclean-core/src/main/java/se/kth/depclean/core/analysis/asm/DependencyClassFileVisitor.java
index 9a50e50f..c61ca234 100644
--- a/depclean-core/src/main/java/se/kth/depclean/core/analysis/asm/DependencyClassFileVisitor.java
+++ b/depclean-core/src/main/java/se/kth/depclean/core/analysis/asm/DependencyClassFileVisitor.java
@@ -47,6 +47,7 @@ public class DependencyClassFileVisitor implements ClassFileVisitor {
*
* @see org.apache.invoke.shared.dependency.analyzer.ClassFileVisitor#visitClass(java.lang.String.java.io.InputStream)
*/
+ @Override
public void visitClass(String className, InputStream in) {
try {
ClassReader reader = new ClassReader(in);
diff --git a/depclean-core/src/test/java/se/kth/depclean/core/analysis/CollectorClassFileVisitorTest.java b/depclean-core/src/test/java/se/kth/depclean/core/analysis/CollectorClassFileVisitorTest.java
new file mode 100644
index 00000000..126edc9e
--- /dev/null
+++ b/depclean-core/src/test/java/se/kth/depclean/core/analysis/CollectorClassFileVisitorTest.java
@@ -0,0 +1,44 @@
+package se.kth.depclean.core.analysis;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.util.HashSet;
+import java.util.Set;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+
+@Slf4j
+class CollectorClassFileVisitorTest {
+
+ private CollectorClassFileVisitorTest() throws FileNotFoundException {
+ // constructor to throw exception;
+ }
+ private static final String path = "src/test/resources/ClassFileVisitorResources/test.class";
+ private static final File file = new File(path);
+ private static final String name = "test";
+ private static final CollectorClassFileVisitor visit = new CollectorClassFileVisitor();
+ final FileInputStream in = new FileInputStream(file);
+
+ @BeforeEach
+ void setUp() {
+ try {
+ visit.visitClass(name , in);
+ } catch (IllegalArgumentException e) {
+ log.error("Failed to visit the class at path : " + path);
+ }
+ }
+
+ @Test
+ @DisplayName("Test that the class is visited and added to the set")
+ void dummy() {
+ Set classes = new HashSet<>(visit.getClasses());
+ if (classes.isEmpty()) {
+ visit.visitClass(name, in);
+ }
+ Assertions.assertFalse(classes.isEmpty());
+ }
+}
diff --git a/depclean-core/src/test/resources/ClassFileVisitorResources/test.class b/depclean-core/src/test/resources/ClassFileVisitorResources/test.class
new file mode 100644
index 0000000000000000000000000000000000000000..18c6de868ef13acb03020539cca49059e5010fc9
GIT binary patch
literal 393
zcmZ8dO-sW-5PjRmrb(l%_2V3G+Cy`eikE<=qKB5;H^~yWY_gKw2>n?eMDXAb@JETW
zZ9$M_mU%O8<~`>7=kp7|0+%6r==<;@9AUsP+3;7MDBe`bQ@#;}WfCfKT8uAiW?JC!sD{5>+PY?8BxYo$5t2{r&=jmqTAGwAEXkQG?MT
Date: Thu, 8 Apr 2021 23:15:32 +0200
Subject: [PATCH 2/2] Refactor CollectorClassFileVisitorTest
---
.../CollectorClassFileVisitorTest.java | 34 ++++++-------------
1 file changed, 11 insertions(+), 23 deletions(-)
diff --git a/depclean-core/src/test/java/se/kth/depclean/core/analysis/CollectorClassFileVisitorTest.java b/depclean-core/src/test/java/se/kth/depclean/core/analysis/CollectorClassFileVisitorTest.java
index 126edc9e..4214211c 100644
--- a/depclean-core/src/test/java/se/kth/depclean/core/analysis/CollectorClassFileVisitorTest.java
+++ b/depclean-core/src/test/java/se/kth/depclean/core/analysis/CollectorClassFileVisitorTest.java
@@ -7,38 +7,26 @@
import java.util.Set;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
@Slf4j
class CollectorClassFileVisitorTest {
- private CollectorClassFileVisitorTest() throws FileNotFoundException {
- // constructor to throw exception;
- }
- private static final String path = "src/test/resources/ClassFileVisitorResources/test.class";
- private static final File file = new File(path);
- private static final String name = "test";
- private static final CollectorClassFileVisitor visit = new CollectorClassFileVisitor();
- final FileInputStream in = new FileInputStream(file);
+ private static final File classFile = new File("src/test/resources/ClassFileVisitorResources/test.class");
+ private static final String className = "test";
+ private static final CollectorClassFileVisitor collector = new CollectorClassFileVisitor();
- @BeforeEach
- void setUp() {
+ @Test
+ @DisplayName("Test that the class is visited and added to the set of visited classes")
+ void whenClassIsVisited_thenItIsAddedToTheSetOfVisitedClasses() throws FileNotFoundException {
+ FileInputStream fileInputStream = new FileInputStream(classFile);
try {
- visit.visitClass(name , in);
+ collector.visitClass(className, fileInputStream);
} catch (IllegalArgumentException e) {
- log.error("Failed to visit the class at path : " + path);
- }
- }
-
- @Test
- @DisplayName("Test that the class is visited and added to the set")
- void dummy() {
- Set classes = new HashSet<>(visit.getClasses());
- if (classes.isEmpty()) {
- visit.visitClass(name, in);
+ log.error("Failed to visit the class at: " + classFile.getAbsolutePath());
}
- Assertions.assertFalse(classes.isEmpty());
+ Set visitedClasses = new HashSet<>(collector.getClasses());
+ Assertions.assertFalse(visitedClasses.isEmpty());
}
}