From 38f4cf3464f510827963c59e84b8e1756c1cce43 Mon Sep 17 00:00:00 2001 From: KKlochko Date: Sat, 30 Sep 2023 21:25:37 +0300 Subject: [PATCH] Add the NameClassLoader. --- .../loaders/AbstractNameClassLoader.java | 8 ++++++ .../tests/loaders/NameClassLoader.java | 28 +++++++++++++++++++ .../loaders/IntegratedNameClassLoader.groovy | 25 +++++++++++++++++ 3 files changed, 61 insertions(+) create mode 100644 src/main/java/space/kklochko/simple_jbdd/tests/loaders/AbstractNameClassLoader.java create mode 100644 src/main/java/space/kklochko/simple_jbdd/tests/loaders/NameClassLoader.java create mode 100644 src/test/groovy/space/kklochko/simple_jbdd/tests/loaders/IntegratedNameClassLoader.groovy diff --git a/src/main/java/space/kklochko/simple_jbdd/tests/loaders/AbstractNameClassLoader.java b/src/main/java/space/kklochko/simple_jbdd/tests/loaders/AbstractNameClassLoader.java new file mode 100644 index 0000000..9103306 --- /dev/null +++ b/src/main/java/space/kklochko/simple_jbdd/tests/loaders/AbstractNameClassLoader.java @@ -0,0 +1,8 @@ +package space.kklochko.simple_jbdd.tests.loaders; + +import java.util.Set; + +public abstract class AbstractNameClassLoader { + public abstract Set> load(); +} + diff --git a/src/main/java/space/kklochko/simple_jbdd/tests/loaders/NameClassLoader.java b/src/main/java/space/kklochko/simple_jbdd/tests/loaders/NameClassLoader.java new file mode 100644 index 0000000..cba6b15 --- /dev/null +++ b/src/main/java/space/kklochko/simple_jbdd/tests/loaders/NameClassLoader.java @@ -0,0 +1,28 @@ +package space.kklochko.simple_jbdd.tests.loaders; + +import com.google.common.reflect.ClassPath; + +import java.io.IOException; +import java.util.stream.Collectors; +import java.util.Set; + +public class NameClassLoader extends AbstractNameClassLoader { + public Set> load() { + try { + return ClassPath.from(java.lang.ClassLoader.getSystemClassLoader()) + .getAllClasses() + .stream() + // exclude the Test class, which indicate a Test class + .filter(aClass -> !aClass.getName().endsWith(".Test")) + .filter(aClass -> aClass.getName().endsWith("Test")) + // include classes which extends the Test class + .filter(aClass -> space.kklochko.simple_jbdd.tests.Test.class.isAssignableFrom(aClass.load())) + .filter(aClass -> aClass.getName().startsWith("space")) + .map(aClass -> aClass.load()) + .collect(Collectors.toSet()); + } catch (IOException e) { + return null; + } + } +} + diff --git a/src/test/groovy/space/kklochko/simple_jbdd/tests/loaders/IntegratedNameClassLoader.groovy b/src/test/groovy/space/kklochko/simple_jbdd/tests/loaders/IntegratedNameClassLoader.groovy new file mode 100644 index 0000000..4f9111d --- /dev/null +++ b/src/test/groovy/space/kklochko/simple_jbdd/tests/loaders/IntegratedNameClassLoader.groovy @@ -0,0 +1,25 @@ +package space.kklochko.simple_jbdd.tests.loaders + +import spock.lang.Narrative +import spock.lang.Specification +import spock.lang.Subject +import spock.lang.Title + +@Narrative("""The loader must return a test class names or null, so +those tests check if responses are right. +""") +@Title("Integrated tests for NameClassLoader.") +class IntegratedNameClassLoader extends Specification { + def "The class has been run."() { + given: "I have a class loader" + @Subject + def loader = new NameClassLoader(); + + when: "The class names ware loaded" + def classNames = loader.load() + + then: "Checking that the test result is expected" + 3 == classNames.size() + } +} +