package org.springframework.webflow.mvc.view;
import java.util.HashMap;
import java.util.Map;
import junit.framework.TestCase;
import org.springframework.binding.convert.ConversionService;
import org.springframework.binding.convert.service.DefaultConversionService;
import org.springframework.binding.message.DefaultMessageContext;
import org.springframework.core.convert.converter.ConverterRegistry;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.webflow.expression.spel.WebFlowSpringELExpressionParser;
/**
* Test harness based on: https://jira.springframework.org/browse/SWF-1370
*
*/
public class BindingModelSwf1370Tests extends TestCase {
private ConversionService conversionService;
private ConverterRegistry converterRegistry;
private WebFlowSpringELExpressionParser expressionParser;
public void setUp() {
conversionService = new DefaultConversionService();
expressionParser = new WebFlowSpringELExpressionParser(new SpelExpressionParser(), conversionService);
converterRegistry = (ConverterRegistry) conversionService.getDelegateConversionService();
}
public void testGetFieldValueWithInvalidBeanWrapperExpression() throws Exception {
Question question = new Question();
converterRegistry.addConverter(new QuestionConverter(question));
BindingModel model = new BindingModel("theTestBean", new TestBeanWithQuestionResponseMap(question),
expressionParser, conversionService, new DefaultMessageContext());
assertEquals("111", model.getFieldValue("responses[1].value"));
}
public static class Question {
};
public static class Response {
private int value;
public Response(int value) {
this.value = value;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
public static class TestBeanWithQuestionResponseMap {
private Map<Question, Response> responses = new HashMap<Question, Response>();
public TestBeanWithQuestionResponseMap(Question question) {
responses.put(question, new Response(111));
}
public Map<Question, Response> getResponses() {
return responses;
}
public void setResponses(Map<Question, Response> responses) {
this.responses = responses;
}
}
public static class QuestionConverter implements
org.springframework.core.convert.converter.Converter<Integer, Question> {
private Map<Integer, Question> map = new HashMap<Integer, Question>();
public QuestionConverter(Question... questions) {
for (int i = 0; i < questions.length; i++) {
map.put(i + 1, questions[i]);
}
}
public Question convert(Integer source) {
return map.get(source);
}
}
}