/*
* 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.jdbc.mapper;
import java.lang.reflect.Field;
import junit.framework.TestCase;
import org.seasar.extension.jdbc.MappingContext;
import org.seasar.extension.jdbc.PropertyMapper;
import org.seasar.extension.jdbc.RelationshipEntityMapper;
import org.seasar.extension.jdbc.entity.Aaa;
/**
* @author higa
*
*/
public class AbstEntityMapperTest extends TestCase {
private boolean called = false;
@Override
protected void setUp() throws Exception {
called = false;
}
/**
*
*/
public void testGetKey() {
MyMapper mapper = new MyMapper(null, null, new int[] { 0 });
assertEquals(1, mapper.getKey(new Object[] { 1, "abc" }));
}
/**
*
*/
public void testGetKey_multikey() {
MyMapper mapper = new MyMapper(null, null, new int[] { 0, 1 });
Object key = mapper.getKey(new Object[] { 1, 2 });
assertNotNull(key);
assertEquals(KeyItems.class, key.getClass());
KeyItems items = (KeyItems) key;
Object[] values = items.getValues();
assertEquals(2, values.length);
assertEquals(1, values[0]);
assertEquals(2, values[1]);
}
/**
*
*/
public void testGetKey_nokey() {
MyMapper mapper = new MyMapper(null, null, new int[0]);
assertNull(mapper.getKey(new Object[] { 1, "abc" }));
}
/**
* @throws Exception
*
*/
public void testGetEntity() throws Exception {
Field field1 = Aaa.class.getDeclaredField("id");
PropertyMapperImpl propertyMapper = new PropertyMapperImpl(field1, 0);
Field field2 = Aaa.class.getDeclaredField("name");
PropertyMapperImpl propertyMapper2 = new PropertyMapperImpl(field2, 1);
MyMapper mapper = new MyMapper(Aaa.class, new PropertyMapper[] {
propertyMapper, propertyMapper2 }, new int[] { 0 });
Object[] values = new Object[] { 11, "SCOTT" };
MappingContext ctx = new MappingContext();
Object key = mapper.getKey(values);
Aaa aaa = (Aaa) mapper.getEntity(values, ctx, key);
assertNotNull(aaa);
assertEquals(new Integer(11), aaa.id);
assertEquals("SCOTT", aaa.name);
assertSame(aaa, mapper.getEntity(values, ctx, key));
}
/**
* @throws Exception
*
*/
public void testGetEntity_idIndicesGtZero_nullkey() throws Exception {
Field field1 = Aaa.class.getDeclaredField("id");
PropertyMapperImpl propertyMapper = new PropertyMapperImpl(field1, 0);
Field field2 = Aaa.class.getDeclaredField("name");
PropertyMapperImpl propertyMapper2 = new PropertyMapperImpl(field2, 1);
MyMapper mapper = new MyMapper(Aaa.class, new PropertyMapper[] {
propertyMapper, propertyMapper2 }, new int[] { 0 });
Object[] values = new Object[] { null, null };
MappingContext ctx = new MappingContext();
Object key = mapper.getKey(values);
Aaa aaa = (Aaa) mapper.getEntity(values, ctx, key);
assertNull(aaa);
}
/**
* @throws Exception
*
*/
public void testGetEntity_idIndicesZero() throws Exception {
Field field1 = Aaa.class.getDeclaredField("id");
PropertyMapperImpl propertyMapper = new PropertyMapperImpl(field1, 0);
Field field2 = Aaa.class.getDeclaredField("name");
PropertyMapperImpl propertyMapper2 = new PropertyMapperImpl(field2, 1);
MyMapper mapper = new MyMapper(Aaa.class, new PropertyMapper[] {
propertyMapper, propertyMapper2 }, new int[0]);
Object[] values = new Object[] { 11, "SCOTT" };
MappingContext ctx = new MappingContext();
Object key = mapper.getKey(values);
Aaa aaa = (Aaa) mapper.getEntity(values, ctx, key);
assertNotNull(aaa);
assertEquals(new Integer(11), aaa.id);
assertEquals("SCOTT", aaa.name);
assertNotSame(aaa, mapper.getEntity(values, ctx, key));
}
/**
* @throws Exception
*
*/
public void testCreateEntity() throws Exception {
Field field1 = Aaa.class.getDeclaredField("id");
PropertyMapperImpl propertyMapper = new PropertyMapperImpl(field1, 0);
Field field2 = Aaa.class.getDeclaredField("name");
PropertyMapperImpl propertyMapper2 = new PropertyMapperImpl(field2, 1);
MyMapper mapper = new MyMapper(Aaa.class, new PropertyMapper[] {
propertyMapper, propertyMapper2 }, new int[] { 0 });
Object[] values = new Object[] { 11, "SCOTT" };
Aaa aaa = (Aaa) mapper.createEntity(values, new MappingContext(), 11);
assertNotNull(aaa);
assertEquals(new Integer(11), aaa.id);
assertEquals("SCOTT", aaa.name);
}
/**
*
*/
public void testMapRelationships() {
MyMapper mapper = new MyMapper(null, null, new int[] { 0 });
mapper.addRelationshipEntityMapper(new MyRelationshipMapper());
mapper.mapRelationships(new Aaa(), null, null);
assertTrue(called);
}
/**
*
*/
public void testMapRelationships_entityNull() {
MyMapper mapper = new MyMapper(null, null, new int[] { 0 });
mapper.addRelationshipEntityMapper(new MyRelationshipMapper());
mapper.mapRelationships(null, null, null);
assertFalse(called);
}
private static class MyMapper extends AbstractEntityMapper {
/**
* @param entityClass
* @param propertyMappers
* @param idIndices
*/
public MyMapper(Class<?> entityClass, PropertyMapper[] propertyMappers,
int[] idIndices) {
super(entityClass, propertyMappers, idIndices);
}
}
private class MyRelationshipMapper implements RelationshipEntityMapper {
public void map(Object target, Object[] values,
MappingContext mappingContext) {
called = true;
}
}
}