Add the create method for the TestCommandFactory.

This commit is contained in:
2023-09-23 21:43:56 +03:00
parent 6a3d7f4f42
commit efb644e6a9
2 changed files with 114 additions and 4 deletions
@@ -2,8 +2,12 @@ package space.kklochko.simple_jbdd.tests.factories;
import space.kklochko.simple_jbdd.annotations.Given;
import space.kklochko.simple_jbdd.annotations.Then;
import space.kklochko.simple_jbdd.annotations.Title;
import space.kklochko.simple_jbdd.annotations.When;
import space.kklochko.simple_jbdd.tests.Test;
import space.kklochko.simple_jbdd.tests.commands.AbstractTestCommand;
import space.kklochko.simple_jbdd.tests.commands.SimpleTestCommand;
import space.kklochko.simple_jbdd.tests.commands.decorators.BlockDecorator;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
@@ -11,9 +15,41 @@ import java.util.Map;
import java.util.TreeMap;
public class TestCommandFactory {
public <T extends Test> void create(T input) {
Class<?> aClass = input.getClass();
Map<String, Method> test_methods = this.getTestMethods(aClass);
public AbstractTestCommand create(Test input) {
Class<?> aClass = input.getClass();
Map<String, Method> test_methods = this.getTestMethods(aClass);
AbstractTestCommand<Test> aTestCommand = createTest(aClass, input);
if(test_methods.containsKey("Then")) {
Method then = test_methods.get("Then");
String label = then.getAnnotation(Then.class).value();
aTestCommand = new BlockDecorator<Test>(label, aTestCommand, then, "Then");
}
if(test_methods.containsKey("When")) {
Method when = test_methods.get("When");
String label = when.getAnnotation(When.class).value();
aTestCommand = new BlockDecorator<Test>(label, aTestCommand, when, "When");
}
if(test_methods.containsKey("Given")) {
Method when = test_methods.get("Given");
String label = when.getAnnotation(Given.class).value();
aTestCommand = new BlockDecorator<Test>(label, aTestCommand, when, "Given");
}
return aTestCommand;
}
protected AbstractTestCommand<Test> createTest(Class<?> aClass, Test input) {
Title aTitle = aClass.getAnnotation(Title.class);
String title = aClass.getName();
if(aTitle != null)
title = aTitle.value();
return new SimpleTestCommand<Test>(title, input);
}
protected <T extends Test> Map<String, Method> getTestMethods(Class<?> aClass) {