001// Generated by delombok at Sun Jul 30 17:21:56 UTC 2023 002package de.cuioss.test.jsf.component; 003 004import java.util.List; 005import java.util.stream.Collectors; 006import javax.faces.component.UIComponent; 007import javax.faces.context.FacesContext; 008import org.apache.myfaces.test.el.MockValueExpression; 009import de.cuioss.test.jsf.config.decorator.BeanConfigDecorator; 010import de.cuioss.test.valueobjects.api.TestContract; 011import de.cuioss.test.valueobjects.objects.ParameterizedInstantiator; 012import de.cuioss.test.valueobjects.property.PropertySupport; 013import de.cuioss.tools.logging.CuiLogger; 014 015/** 016 * Tests all given properties according to the given List of 017 * {@link ComponentPropertyMetadata} 018 * 019 * @author Oliver Wolff 020 * @param <T> Rule does not apply to annotations: There is no inheritance 021 */ 022public class ValueExpressionPropertyContract<T extends UIComponent> implements TestContract<T> { 023 private static final CuiLogger log = new CuiLogger(ValueExpressionPropertyContract.class); 024 private final ParameterizedInstantiator<T> instantiator; 025 private final List<ComponentPropertyMetadata> filteredMetadata; 026 private final FacesContext facesContext; 027 028 /** 029 * @param instantiator 030 * @param metadatas 031 * @param facesContext 032 */ 033 public ValueExpressionPropertyContract(final ParameterizedInstantiator<T> instantiator, final List<ComponentPropertyMetadata> metadatas, final FacesContext facesContext) { 034 this.instantiator = instantiator; 035 filteredMetadata = metadatas.stream().filter(m -> !m.isIgnoreOnValueExpresssion()).collect(Collectors.toList()); 036 this.facesContext = facesContext; 037 } 038 039 @Override 040 public void assertContract() { 041 List<String> names = filteredMetadata.stream().map(ComponentPropertyMetadata::getName).collect(Collectors.toList()); 042 final var builder = new StringBuilder("Verifying "); 043 builder.append(getClass().getName()).append("\nWith properties: ").append(String.join(" ", names)); 044 log.info(builder.toString()); 045 checkGetterAndSetterContract(); 046 } 047 048 private void checkGetterAndSetterContract() { 049 final List<PropertySupport> supportList = filteredMetadata.stream().map(PropertySupport::new).collect(Collectors.toList()); 050 final UIComponent target = getInstantiator().newInstanceMinimal(); 051 for (final PropertySupport support : supportList) { 052 var expression = new MockValueExpression(BeanConfigDecorator.checkManagedBeanKey(support.getName()), support.getPropertyMetadata().resolveActualClass()); 053 target.setValueExpression(support.getName(), expression); 054 expression.setValue(facesContext.getELContext(), support.generateTestValue()); 055 support.assertValueSet(target); 056 } 057 } 058 059 @java.lang.SuppressWarnings("all") 060 @lombok.Generated 061 public ParameterizedInstantiator<T> getInstantiator() { 062 return this.instantiator; 063 } 064}