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() + } +} +