/* * 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 org.seasar.extension.dxo.Hoge; import org.seasar.extension.dxo.HogeHoge; import org.seasar.extension.dxo.builder.impl.BeanToBeanDxoCommandBuilder; import org.seasar.extension.dxo.command.DxoCommand; import org.seasar.framework.exception.SIllegalArgumentException; import org.seasar.framework.unit.S2FrameworkTestCase; /** * @author koichik * */ public class BeanToBeanDxoCommandTest extends S2FrameworkTestCase { private BeanToBeanDxoCommandBuilder 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[] { Hoge.class })); Hoge src = new Hoge(100, "Hoge", new BigDecimal("1000")); HogeHoge dest = (HogeHoge) command.execute(new Object[] { src }); assertNotNull(dest); assertEquals("100", 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(1000, dest.getBaz()); assertEquals("hoge", dest.getHoge()); } /** * @throws Exception */ public void testScalar2() throws Exception { DxoCommand command = builder.createDxoCommand(ToScalarDxo.class, ToScalarDxo.class.getMethod("convert", new Class[] { Hoge.class, HogeHoge.class })); Hoge src = new Hoge(100, "Hoge", new BigDecimal("1000")); HogeHoge dest = new HogeHoge(); dest.setHoge("HogeHoge"); command.execute(new Object[] { src, dest }); assertEquals("100", 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(1000, dest.getBaz()); assertEquals("HogeHoge", dest.getHoge()); } /** * * @throws Exception */ public void testScalarNull1() throws Exception { DxoCommand command = builder.createDxoCommand(ToScalarDxo.class, ToScalarDxo.class.getMethod("convert", new Class[] { Hoge.class })); assertNull(command.execute(new Object[] { null })); } /** * * @throws Exception */ public void testScalarNull2() throws Exception { try { DxoCommand command = builder.createDxoCommand(ToScalarDxo.class, ToScalarDxo.class.getMethod("convert", new Class[] { Hoge.class, HogeHoge.class })); HogeHoge dest = new HogeHoge(); 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 { try { DxoCommand command = builder.createDxoCommand(ToScalarDxo.class, ToScalarDxo.class.getMethod("convert", new Class[] { Hoge.class, HogeHoge.class })); Hoge src = new Hoge(100, "Hoge", new BigDecimal("1000")); 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[] { Hoge.class })); Hoge src = new Hoge(100, "Hoge", 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(ToScalarDxo.class, ToArrayDxo.class.getMethod("convert", new Class[] { Hoge[].class })); Hoge[] src = new Hoge[2]; src[0] = new Hoge(100, "Hoge", new BigDecimal("1000")); src[1] = new Hoge(200, "HogeHoge", new BigDecimal("2000")); HogeHoge[] dest = (HogeHoge[]) command.execute(new Object[] { src }); assertNotNull(dest); assertEquals(2, dest.length); HogeHoge hogeHoge = dest[0]; assertNotNull(hogeHoge); assertEquals("100", hogeHoge.getFoo()); assertEquals(4, hogeHoge.getBar().length); assertEquals('H', hogeHoge.getBar()[0]); assertEquals('o', hogeHoge.getBar()[1]); assertEquals('g', hogeHoge.getBar()[2]); assertEquals('e', hogeHoge.getBar()[3]); assertEquals(1000, hogeHoge.getBaz()); hogeHoge = dest[1]; assertNotNull(hogeHoge); assertEquals("200", hogeHoge.getFoo()); assertEquals(8, hogeHoge.getBar().length); assertEquals('H', hogeHoge.getBar()[0]); assertEquals('o', hogeHoge.getBar()[1]); assertEquals('g', hogeHoge.getBar()[2]); assertEquals('e', hogeHoge.getBar()[3]); assertEquals('H', hogeHoge.getBar()[4]); assertEquals('o', hogeHoge.getBar()[5]); assertEquals('g', hogeHoge.getBar()[6]); assertEquals('e', hogeHoge.getBar()[7]); assertEquals(2000, hogeHoge.getBaz()); } /** * @throws Exception */ public void testArrayToArray2() throws Exception { DxoCommand command = builder.createDxoCommand(ToScalarDxo.class, ToArrayDxo.class.getMethod("convert", new Class[] { Hoge[].class, HogeHoge[].class })); Hoge[] src = new Hoge[2]; src[0] = new Hoge(100, "Hoge", new BigDecimal("1000")); src[1] = new Hoge(200, "HogeHoge", new BigDecimal("2000")); HogeHoge[] dest = new HogeHoge[2]; command.execute(new Object[] { src, dest }); assertNotNull(dest); assertEquals(2, dest.length); HogeHoge hogeHoge = dest[0]; assertNotNull(hogeHoge); assertEquals("100", hogeHoge.getFoo()); assertEquals(4, hogeHoge.getBar().length); assertEquals('H', hogeHoge.getBar()[0]); assertEquals('o', hogeHoge.getBar()[1]); assertEquals('g', hogeHoge.getBar()[2]); assertEquals('e', hogeHoge.getBar()[3]); assertEquals(1000, hogeHoge.getBaz()); hogeHoge = dest[1]; assertNotNull(hogeHoge); assertEquals("200", hogeHoge.getFoo()); assertEquals(8, hogeHoge.getBar().length); assertEquals('H', hogeHoge.getBar()[0]); assertEquals('o', hogeHoge.getBar()[1]); assertEquals('g', hogeHoge.getBar()[2]); assertEquals('e', hogeHoge.getBar()[3]); assertEquals('H', hogeHoge.getBar()[4]); assertEquals('o', hogeHoge.getBar()[5]); assertEquals('g', hogeHoge.getBar()[6]); assertEquals('e', hogeHoge.getBar()[7]); assertEquals(2000, hogeHoge.getBaz()); } /** * */ public interface ToScalarDxo { /** * @param src * @return */ HogeHoge convert(Hoge src); /** * @param src * @param dest */ void convert(Hoge src, HogeHoge dest); /** * */ public static final String convertWithRule_CONVERSION_RULE = "'foo' : baz, 'baz' : foo"; /** * @param src * @return */ HogeHoge convertWithRule(Hoge src); } /** * */ public interface ToArrayDxo { /** * @param src * @return */ HogeHoge[] convert(Hoge[] src); /** * @param src * @param dest */ void convert(Hoge[] src, HogeHoge[] dest); } }