/** * 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.processors; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.Set; import javax.lang.model.element.Modifier; import javax.lang.model.element.Name; import javax.lang.model.element.TypeElement; import org.easymock.EasyMock; import org.junit.Assert; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.richfaces.cdk.CdkTestRunner; import org.richfaces.cdk.annotations.JsfValidator; import org.richfaces.cdk.apt.AnnotationProcessorTestBase; import org.richfaces.cdk.model.ComponentLibrary; import org.richfaces.cdk.model.FacesId; import org.richfaces.cdk.model.ValidatorModel; import com.google.inject.Inject; /** * @author akolonitsky * @since Jan 14, 2010 */ @RunWith(CdkTestRunner.class) public class ValidatorProcessorTest extends AnnotationProcessorTestBase { private static class MyName implements Name { private final String toString; MyName(String toString) { this.toString = toString; } @Override public char charAt(int index) { return 0; } @Override public boolean contentEquals(CharSequence cs) { return false; } @Override public int length() { return 0; } @Override public CharSequence subSequence(int start, int end) { return null; } @Override public String toString() { return toString; } } private static final String VALIDATOR_CLASS_JAVA = "org/richfaces/cdk/test/component/MyValidator.java"; @Inject private ComponentLibrary library; @Test @Ignore public void testProcess() throws Exception { Collection<ValidatorModel> validators = library.getValidators(); assertEquals(2, validators.size()); for (ValidatorModel model : validators) { FacesId id = model.getId(); if (id != null) { assertEquals("my_validator", id.toString()); } } } // TODO create Test for ProcessorBase @Test public void testSetNames() { ValidatorModel model; // @JsfValidator public class BaseClass { ... model = getValidatorModelForSetNames(true, null, "BaseClass", false); check("BaseClass", null, false, model); // @JsfValidator(validatorClass = "") public class BaseClass { ... model = getValidatorModelForSetNames(true, "", "BaseClass", false); check("BaseClass", null, false, model); // @JsfValidator(validatorClass = BaseClass) public class BaseClass { ... model = getValidatorModelForSetNames(true, "BaseClass", "BaseClass", false); check("BaseClass", null, false, model); // @JsfValidator(validatorClass = GeneratedClass) public class BaseClass { ... model = getValidatorModelForSetNames(true, "GeneratedClass", "BaseClass", false); check("GeneratedClass", "BaseClass", true, model); // /////////////////////////////// ABSTRACT /////////////////////////////////////// // @JsfValidator public abstract class BaseClass { ... // checkAbstractWithException(null); // @JsfValidator(validatorClass = "") public abstract class BaseClass { ... // checkAbstractWithException(""); // @JsfValidator(validatorClass = BaseClass) public abstract class BaseClass { ... // checkAbstractWithException("BaseClass"); // @JsfValidator(validatorClass = GeneratedClass) public abstract class BaseClass { ... model = getValidatorModelForSetNames(true, "GeneratedClass", "BaseClass", true); check("GeneratedClass", "BaseClass", true, model); } @Override protected Iterable<String> sources() { return Collections.singleton(VALIDATOR_CLASS_JAVA); } private void check(String validatorClass, String baseClass, boolean generate, ValidatorModel model) { if (baseClass != null) { // assertEquals(model.getBaseClass().toString(), baseClass); } else { assertNull(model.getBaseClass()); } // assertEquals(generate, model.isGenerate()); } private void checkAbstractWithException(String validatorClass) { try { getValidatorModelForSetNames(true, validatorClass, "BaseClass", true); Assert.fail("Abstract class can't be a validator."); } catch (IllegalStateException e) { // Do nothing. } } private ValidatorModel getValidatorModelForSetNames(boolean isAnnotationDefined, String validatorClass, final String baseClass, boolean isAbstractPresent) { Name name = new MyName(baseClass); TypeElement element = EasyMock.createMock(TypeElement.class); EasyMock.expect(element.getQualifiedName()).andReturn(name); Set<Modifier> set = new HashSet<Modifier>(1); if (isAbstractPresent) { set.add(Modifier.ABSTRACT); } EasyMock.expect(element.getModifiers()).andReturn(set); EasyMock.replay(element); ValidatorModel validatorModel = new ValidatorModel(); JsfValidator validator = null; if (isAnnotationDefined) { validator = EasyMock.createMock(JsfValidator.class); EasyMock.expect(validator.generate()).andReturn(validatorClass); EasyMock.replay(validator); } EasyMock.verify(); // ValidatorProcessor.setClassNames(element, validatorModel, validator); return validatorModel; } }