/*
* $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 org.easymock.EasyMock.anyObject;
import static org.easymock.EasyMock.capture;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.expectLastCall;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.util.Collection;
import java.util.Collections;
import java.util.Set;
import javax.annotation.processing.ProcessingEnvironment;
import javax.annotation.processing.RoundEnvironment;
import javax.lang.model.SourceVersion;
import javax.lang.model.element.TypeElement;
import javax.tools.JavaCompiler.CompilationTask;
import org.easymock.Capture;
import org.easymock.CaptureType;
import org.easymock.EasyMock;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.richfaces.cdk.CdkTestRunner;
import org.richfaces.cdk.FileManager;
import org.richfaces.cdk.Mock;
import org.richfaces.cdk.Output;
import org.richfaces.cdk.Outputs;
import org.richfaces.cdk.Stub;
import com.google.common.base.Function;
import com.google.common.collect.Collections2;
import com.google.common.collect.ImmutableList;
import com.google.inject.Inject;
/**
* <p class="changed_added_4_0">
* </p>
*
* @author asmirnov@exadel.com
*
*/
@RunWith(CdkTestRunner.class)
public class TaskFactoryTest extends AnnotationProcessorTestBase {
private static final String CLASS_JAVA = "org/richfaces/cdk/apt/TestClass.java";
private static final String INTERFACE_JAVA = "org/richfaces/cdk/apt/TestInterface.java";
private static final String SUB_CLASS_JAVA = "org/richfaces/cdk/apt/TestSubClass.java";
@Mock
CdkProcessor processor;
@Inject
private TaskFactoryImpl factory;
@Stub
@Output(Outputs.JAVA_CLASSES)
private FileManager output;
/**
* Test method for {@link org.richfaces.cdk.apt.TaskFactoryImpl#get()}.
*
* @throws Exception
* @throws AptException
*/
@Test
public void testGetTask() throws Exception {
expect(output.getFolders()).andReturn(null);
replay(processor, output);
CompilationTask task = factory.get();
assertNotNull(task);
verify(processor, output);
}
@Test
public void testTask() throws Exception {
expect(output.getFolders()).andReturn(null);
processor.init((ProcessingEnvironment) anyObject());
expectLastCall();
expect(processor.getSupportedSourceVersion()).andReturn(SourceVersion.RELEASE_6);
expect(processor.getSupportedAnnotationTypes()).andReturn(Collections.singleton("*"));
expect(processor.getSupportedOptions()).andReturn(Collections.<String>emptySet());
// processor.process(null,null);
Capture<Set<? extends TypeElement>> capturedTypes = new Capture<Set<? extends TypeElement>>(CaptureType.FIRST);
expect(processor.process(capture(capturedTypes), EasyMock.<RoundEnvironment>anyObject())).andReturn(true).times(2);
replay(processor, output);
CompilationTask task = factory.get();
assertTrue(task.call());
Set<? extends TypeElement> elements = capturedTypes.getValue();
assertFalse(elements.isEmpty());
Collection<String> typeNames = Collections2.transform(elements, new Function<TypeElement, String>() {
@Override
public String apply(TypeElement e) {
return e.getSimpleName().toString();
}
});
assertTrue(typeNames.contains("TestAnnotation2"));
assertTrue(typeNames.contains("TestMethodAnnotation"));
verify(processor, output);
}
@Override
protected Iterable<String> sources() {
return ImmutableList.of(CLASS_JAVA, SUB_CLASS_JAVA);
}
}