/*
* Copyright 2004-2015 the Seasar Foundation and the Others.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*/
package org.seasar.extension.dxo.command.impl;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
import org.seasar.extension.dxo.Hoge;
import org.seasar.extension.dxo.HogeHoge;
import org.seasar.extension.dxo.builder.impl.MapToBeanDxoCommandBuilder;
import org.seasar.extension.dxo.command.DxoCommand;
import org.seasar.framework.exception.SIllegalArgumentException;
import org.seasar.framework.unit.S2FrameworkTestCase;
/**
* @author koichik
*
*/
public class MapToBeanDxoCommandTest extends S2FrameworkTestCase {
private MapToBeanDxoCommandBuilder builder;
protected void setUp() throws Exception {
super.setUp();
include("dxo.dicon");
}
/**
* @throws Exception
*/
public void testScalar1() throws Exception {
DxoCommand command = builder.createDxoCommand(ToScalarDxo.class,
ToScalarDxo.class.getMethod("convert",
new Class[] { Map.class }));
Map src = new HashMap();
src.put("foo", new Integer(100));
src.put("bar", "Hoge");
src.put("baz", new BigDecimal("1000"));
Hoge dest = (Hoge) command.execute(new Object[] { src });
assertNotNull(dest);
assertEquals(100, dest.getFoo());
assertEquals("Hoge", dest.getBar());
assertEquals(new BigDecimal("1000"), dest.getBaz());
}
/**
* @throws Exception
*/
public void testScalar2() throws Exception {
DxoCommand command = builder.createDxoCommand(ToScalarDxo.class,
ToScalarDxo.class.getMethod("convert", new Class[] { Map.class,
Hoge.class }));
Map src = new HashMap();
src.put("foo", new Integer(100));
src.put("bar", "Hoge");
src.put("baz", new BigDecimal("1000"));
Hoge dest = new Hoge();
command.execute(new Object[] { src, dest });
assertNotNull(dest);
assertEquals(100, dest.getFoo());
assertEquals("Hoge", dest.getBar());
assertEquals(new BigDecimal("1000"), dest.getBaz());
}
/**
* @throws Exception
*/
public void testScalarNull1() throws Exception {
DxoCommand command = builder.createDxoCommand(ToScalarDxo.class,
ToScalarDxo.class.getMethod("convert",
new Class[] { Map.class }));
assertNull(command.execute(new Object[] { null }));
}
/**
* @throws Exception
*/
public void testScalarNull2() throws Exception {
DxoCommand command = builder.createDxoCommand(ToScalarDxo.class,
ToScalarDxo.class.getMethod("convert", new Class[] { Map.class,
Hoge.class }));
Hoge dest = new Hoge();
try {
command.execute(new Object[] { null, dest });
fail();
} catch (final SIllegalArgumentException e) {
assertEquals("ESSR0601", e.getMessageCode());
System.out.println(e.getMessage());
}
}
/**
* @throws Exception
*/
public void testScalarNull3() throws Exception {
DxoCommand command = builder.createDxoCommand(ToScalarDxo.class,
ToScalarDxo.class.getMethod("convert", new Class[] { Map.class,
Hoge.class }));
Map src = new HashMap();
try {
command.execute(new Object[] { src, null });
fail();
} catch (final SIllegalArgumentException e) {
assertEquals("ESSR0602", e.getMessageCode());
System.out.println(e.getMessage());
}
}
/**
* @throws Exception
*/
public void testWithRule() throws Exception {
DxoCommand command = builder.createDxoCommand(ToScalarDxo.class,
ToScalarDxo.class.getMethod("convertWithRule",
new Class[] { Map.class }));
Map src = new HashMap();
src.put("foo", new Integer(100));
src.put("bar", "Hoge");
src.put("baz", new BigDecimal("1000"));
HogeHoge dest = (HogeHoge) command.execute(new Object[] { src });
assertNotNull(dest);
assertEquals("1000", dest.getFoo());
assertEquals(4, dest.getBar().length);
assertEquals('H', dest.getBar()[0]);
assertEquals('o', dest.getBar()[1]);
assertEquals('g', dest.getBar()[2]);
assertEquals('e', dest.getBar()[3]);
assertEquals(100, dest.getBaz());
}
/**
* @throws Exception
*/
public void testArrayToArray1() throws Exception {
DxoCommand command = builder.createDxoCommand(ToArrayDxo.class,
ToArrayDxo.class.getMethod("convert",
new Class[] { Map[].class }));
Map[] src = new Map[2];
src[0] = new HashMap();
src[0].put("foo", new Integer(100));
src[0].put("bar", "Hoge");
src[0].put("baz", new BigDecimal("1000"));
src[1] = new HashMap();
src[1].put("foo", new Integer(200));
src[1].put("bar", "HogeHoge");
src[1].put("baz", new BigDecimal("2000"));
Hoge[] dest = (Hoge[]) command.execute(new Object[] { src });
assertEquals(100, dest[0].getFoo());
assertEquals("Hoge", dest[0].getBar());
assertEquals(new BigDecimal("1000"), dest[0].getBaz());
assertEquals(200, dest[1].getFoo());
assertEquals("HogeHoge", dest[1].getBar());
assertEquals(new BigDecimal("2000"), dest[1].getBaz());
}
/**
* @throws Exception
*/
public void testArrayToArray2() throws Exception {
DxoCommand command = builder.createDxoCommand(ToArrayDxo.class,
ToArrayDxo.class.getMethod("convert", new Class[] {
Map[].class, Hoge[].class }));
Map[] src = new Map[2];
src[0] = new HashMap();
src[0].put("foo", new Integer(100));
src[0].put("bar", "Hoge");
src[0].put("baz", new BigDecimal("1000"));
src[1] = new HashMap();
src[1].put("foo", new Integer(200));
src[1].put("bar", "HogeHoge");
src[1].put("baz", new BigDecimal("2000"));
Hoge[] dest = new Hoge[2];
command.execute(new Object[] { src, dest });
assertEquals(100, dest[0].getFoo());
assertEquals("Hoge", dest[0].getBar());
assertEquals(new BigDecimal("1000"), dest[0].getBaz());
assertEquals(200, dest[1].getFoo());
assertEquals("HogeHoge", dest[1].getBar());
assertEquals(new BigDecimal("2000"), dest[1].getBaz());
}
/**
*
*/
public interface ToScalarDxo {
/**
* @param src
* @return
*/
Hoge convert(Map src);
/**
* @param src
* @param dest
*/
void convert(Map src, Hoge dest);
/**
*
*/
public static final String convertWithRule_CONVERSION_RULE = "'foo' : baz, 'baz' : foo";
/**
* @param src
* @return
*/
HogeHoge convertWithRule(Map src);
}
/**
*
*/
public interface ToArrayDxo {
/**
* @param src
* @return
*/
Hoge[] convert(Map[] src);
/**
* @param src
* @param dest
*/
void convert(Map[] src, Hoge[] dest);
}
}