/* * $Id$ * * License Agreement. * * Rich Faces - Natural Ajax for Java Server Faces (JSF) * * Copyright (C) 2007 Exadel, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License version 2.1 as published by the Free Software Foundation. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ package org.richfaces.cdk.apt; import static junit.framework.Assert.assertTrue; import java.util.Set; import javax.annotation.processing.AbstractProcessor; import javax.annotation.processing.ProcessingEnvironment; import javax.annotation.processing.RoundEnvironment; import javax.annotation.processing.SupportedAnnotationTypes; import javax.annotation.processing.SupportedSourceVersion; import javax.lang.model.SourceVersion; import javax.lang.model.element.Element; import javax.lang.model.element.TypeElement; import org.junit.runner.RunWith; import org.richfaces.cdk.CdkTestRunner; import org.richfaces.cdk.FileManager; import org.richfaces.cdk.Output; import org.richfaces.cdk.Outputs; import org.richfaces.cdk.Stub; import com.google.common.base.Predicate; import com.google.common.collect.Iterables; import com.google.inject.Binder; import com.google.inject.Inject; import com.google.inject.Singleton; /** * <p class="changed_added_4_0"> * </p> * * @author asmirnov@exadel.com * */ @RunWith(CdkTestRunner.class) public abstract class SourceUtilsTestBase extends AnnotationProcessorTestBase { @Inject protected CdkProcessor processor; @Inject protected TaskFactoryImpl factory; @Stub @Output(Outputs.JAVA_CLASSES) protected FileManager output; @Override public void configure(Binder binder) { super.configure(binder); binder.bind(CdkProcessor.class).to(TestProcessor.class).in(Singleton.class); } protected void execute(SourceUtilsCallback callback) { ((TestProcessor) processor).callback = callback; assertTrue("Compilation error", factory.get().call()); } protected Element findElement(RoundEnvironment roundEnvironment, final String name) { Set<? extends Element> elements = roundEnvironment.getRootElements(); return Iterables.find(elements, new Predicate<Element>() { @Override public boolean apply(Element input) { return name.equals(input.getSimpleName().toString()); } }); } /** * <p class="changed_added_4_0"> * Interface to call back test method from APT * </p> * * @author asmirnov@exadel.com * */ public interface SourceUtilsCallback { void process(SourceUtils utils, RoundEnvironment roundEnv); } /** * <p class="changed_added_4_0"> * </p> * * @author asmirnov@exadel.com * */ @SupportedSourceVersion(SourceVersion.RELEASE_6) @SupportedAnnotationTypes("*") public static class TestProcessor extends AbstractProcessor implements CdkProcessor { @Inject protected SourceUtilsProvider sourceUtilsProvider; SourceUtilsCallback callback; @Override public synchronized void init(ProcessingEnvironment processingEnv) { super.init(processingEnv); sourceUtilsProvider.setProcessingEnv(processingEnv); } @Override public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) { if (!roundEnv.processingOver()) { callback.process(sourceUtilsProvider.get(), roundEnv); } return false; } @Override public void continueAfterJavaSourceProcessing() { // do nothing } } }