package org.springframework.binding.mapping;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import junit.framework.TestCase;
import org.springframework.binding.expression.ExpressionParser;
import org.springframework.binding.expression.spel.SpringELExpressionParser;
import org.springframework.binding.mapping.impl.DefaultMapper;
import org.springframework.binding.mapping.impl.DefaultMapping;
import org.springframework.expression.spel.standard.SpelExpressionParser;
public class DefaultMapperTests extends TestCase {
private DefaultMapper mapper = new DefaultMapper();
private ExpressionParser parser = new SpringELExpressionParser(new SpelExpressionParser());
public void testMapping() {
DefaultMapping mapping1 = new DefaultMapping(parser.parseExpression("foo", null), parser.parseExpression("bar",
null));
DefaultMapping mapping2 = new DefaultMapping(parser.parseExpression("foo", null), parser.parseExpression("baz",
null));
mapper.addMapping(mapping1);
mapper.addMapping(mapping2);
assertEquals(2, mapper.getMappings().length);
TestBean bean1 = new TestBean();
bean1.foo = "a";
TestBean2 bean2 = new TestBean2();
MappingResults results = mapper.map(bean1, bean2);
assertSame(bean1, results.getSource());
assertSame(bean2, results.getTarget());
assertEquals(2, results.getAllResults().size());
assertEquals(0, results.getErrorResults().size());
assertEquals("a", bean2.bar);
assertEquals("a", bean2.baz);
assertEquals(1, results.getResults(new MappingResultsCriteria() {
public boolean test(MappingResult result) {
if (result.getMapping().getTargetExpression().getExpressionString().equals("baz")) {
return true;
} else {
return false;
}
}
}).size());
}
public void testMappingConversion() {
DefaultMapping mapping1 = new DefaultMapping(parser.parseExpression("beep", null), parser.parseExpression(
"beep", null));
mapper.addMapping(mapping1);
Map<String, String> bean1 = new HashMap<String, String>();
bean1.put("beep", "en");
TestBean2 bean2 = new TestBean2();
MappingResults results = mapper.map(bean1, bean2);
assertFalse(results.hasErrorResults());
assertEquals(Locale.ENGLISH, bean2.beep);
}
public void testMappingConversionError() {
DefaultMapping mapping1 = new DefaultMapping(parser.parseExpression("boop", null), parser.parseExpression(
"boop", null));
mapper.addMapping(mapping1);
Map<String, String> bean1 = new HashMap<String, String>();
bean1.put("boop", "bogus");
TestBean2 bean2 = new TestBean2();
MappingResults results = mapper.map(bean1, bean2);
assertEquals("typeMismatch", results.getErrorResults().get(0).getCode());
}
public static class TestBean {
private String foo;
public String getFoo() {
return foo;
}
public void setFoo(String foo) {
this.foo = foo;
}
}
public static class TestBean2 {
private String bar;
private String baz;
private Integer boop;
private Locale beep;
public String getBar() {
return bar;
}
public String getBaz() {
return baz;
}
public void setBaz(String baz) {
this.baz = baz;
}
public void setBar(String bar) {
this.bar = bar;
}
public Integer getBoop() {
return boop;
}
public void setBoop(Integer boop) {
this.boop = boop;
}
public Locale getBeep() {
return beep;
}
public void setBeep(Locale beep) {
this.beep = beep;
}
}
}