diff --git a/src/main/java/space/kklochko/simple_jbdd/tests/loaders/SingleTestLoader.java b/src/main/java/space/kklochko/simple_jbdd/tests/loaders/SingleTestLoader.java new file mode 100644 index 0000000..c032a60 --- /dev/null +++ b/src/main/java/space/kklochko/simple_jbdd/tests/loaders/SingleTestLoader.java @@ -0,0 +1,50 @@ +package space.kklochko.simple_jbdd.tests.loaders; + +import space.kklochko.simple_jbdd.tests.Test; + +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; + +public class SingleTestLoader { + String className; + + public SingleTestLoader(String className) { + setClassName(className); + } + + public Test load() { + SingleClassLoader loader = new SingleClassLoader(getClassName()); + Class aClass = loader.load(); + + if(aClass == null) + return null; + + Constructor defaultConstructor = null; + + for(Constructor constructor : aClass.getDeclaredConstructors()) { + if(constructor.getParameterCount() == 0) { + defaultConstructor = constructor; + break; + } + } + + try { + return (Test) defaultConstructor.newInstance(); + } catch (InstantiationException e) { + throw new RuntimeException(e); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } catch (InvocationTargetException e) { + throw new RuntimeException(e); + } + } + + public String getClassName() { + return className; + } + + public void setClassName(String className) { + this.className = className; + } +} + diff --git a/src/test/groovy/space/kklochko/simple_jbdd/tests/loaders/IntegratedSingleTestLoader.groovy b/src/test/groovy/space/kklochko/simple_jbdd/tests/loaders/IntegratedSingleTestLoader.groovy new file mode 100644 index 0000000..74f7779 --- /dev/null +++ b/src/test/groovy/space/kklochko/simple_jbdd/tests/loaders/IntegratedSingleTestLoader.groovy @@ -0,0 +1,31 @@ +package space.kklochko.simple_jbdd.tests.loaders + +import space.kklochko.simple_jbdd.test_examples.tests.SimpleThenTest +import spock.lang.Narrative +import spock.lang.Specification +import spock.lang.Subject +import spock.lang.Title + +@Narrative("""The loader must return a class or null, so +those tests check if responses are right. +""") +@Title("Integrated tests for SingleTestLoader.") +class IntegratedSingleTestLoader extends Specification { + def "The class has been loaded."() { + given: "I have a class loader" + @Subject + def loader = new SingleTestLoader(className) + + when: "The class was loaded" + def aClass = loader.load() + + then: "Checking that the test result is expected" + aClass?.class == expectedClass + + where: "Possible variants of tests" + className || expectedClass + "fourHundredFour" || null + "space.kklochko.simple_jbdd.test_examples.tests.SimpleThenTest" || SimpleThenTest + } +} +