@Override public synchronized void init(ProcessingEnvironment env) { super.init(env); this.messager = env.getMessager(); this.filer = env.getFiler(); this.elementUtils = env.getElementUtils(); this.getTestClass = new GetTestClass(env.getTypeUtils()); this.brewJavaFile = new BrewJavaFile(); }
JavaFile from(TestClass testClass) throws IOException { List<MethodSpec> methodSpecs = new ArrayList<>(); for (int i = 0; i < testClass.methods.size(); i++) { Method method = testClass.methods.get(i); methodSpecs .addAll(methods(testClass.className, method, i)); } TypeSpec typeSpec = classTest(testClass.className, methodSpecs); return JavaFile.builder(testClass.className.packageName(), typeSpec) .build(); }
private List<MethodSpec> methods(ClassName className, Method method, int orderTest) { List<MethodSpec> methodSpecs = new ArrayList<>(); for (Param param : method.params) { if (!param.isOptional) { methodSpecs .add(methodOneIllegalParam(className, method, param, orderTest)); } } methodSpecs .add(methodAllParamLegals(className, method, orderTest)); return methodSpecs; }
private MethodSpec methodAllParamLegals(ClassName className, Method method, int orderTest) { String methodName = String .format("When_Call_%s_Then_Get_Response", method.name); MethodSpec.Builder builder = MethodSpec.methodBuilder(methodName) .addAnnotation(Test.class) .addAnnotation(AnnotationSpec.builder(Order.class) .addMember("value", "$L", orderTest) .build()) .addModifiers(Modifier.PUBLIC) .returns(void.class); initializeRobot(className, method, builder); variablesForParams(method.params, null, builder); response(className, method, false, builder); return builder.build(); }
@Override public boolean process(Set<? extends TypeElement> elements, RoundEnvironment roundEnv) { for (Element element : roundEnv.getRootElements()) { try { TestClass testClass = getTestClass.from(element); if (testClass == null) continue; if (testClass.methods.isEmpty()) continue; JavaFile javaFile = brewJavaFile.from(testClass); javaFile.writeTo(filer); } catch (GetTestClass.ValidationException e) { messager.printMessage(Diagnostic.Kind.ERROR, e.getMessage(), e.getElement()); } catch (IOException e) { messager.printMessage(Diagnostic.Kind.ERROR, e.getMessage(), element); } } return false; }
private MethodSpec methodOneIllegalParam(ClassName className, Method method, Param param, int orderTest) { String methodName = String .format("When_Call_%s_With_Illegal_%s_Then_Get_Exception", method.name, param.name); MethodSpec.Builder builder = MethodSpec.methodBuilder(methodName) .addAnnotation(Test.class) .addAnnotation(AnnotationSpec.builder(Order.class) .addMember("value", "$L", orderTest) .build()) .addModifiers(Modifier.PUBLIC) .returns(void.class); initializeRobot(className, method, builder); variablesForParams(method.params, param, builder); response(className, method, true, builder); return builder.build(); }