Unit tests for all supported field types (including null versions).

This commit is contained in:
Michael Bayne
2010-06-19 17:34:21 +00:00
parent 06c36fbed2
commit 1d9a19e502
2 changed files with 270 additions and 0 deletions
@@ -0,0 +1,194 @@
//
// $Id$
//
// Depot library - a Java relational persistence library
// Copyright (C) 2006-2010 Michael Bayne and Pär Winzell
//
// This library is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License as published
// by the Free Software Foundation; either version 2.1 of the License, or
// (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
package com.samskivert.depot.tests;
import java.sql.Date;
import java.sql.Time;
import java.sql.Timestamp;
import java.util.Arrays;
import com.samskivert.depot.Key;
import com.samskivert.depot.PersistentRecord;
import com.samskivert.depot.expression.ColumnExp;
import com.samskivert.depot.annotation.Column;
import com.samskivert.depot.annotation.Id;
/**
* Tests all of the supported Depot field types.
*/
public class AllTypesRecord extends PersistentRecord
{
// AUTO-GENERATED: FIELDS START
public static final Class<AllTypesRecord> _R = AllTypesRecord.class;
public static final ColumnExp RECORD_ID = colexp(_R, "recordId");
public static final ColumnExp BOOLEAN_VALUE = colexp(_R, "booleanValue");
public static final ColumnExp BYTE_VALUE = colexp(_R, "byteValue");
public static final ColumnExp SHORT_VALUE = colexp(_R, "shortValue");
public static final ColumnExp INT_VALUE = colexp(_R, "intValue");
public static final ColumnExp LONG_VALUE = colexp(_R, "longValue");
public static final ColumnExp FLOAT_VALUE = colexp(_R, "floatValue");
public static final ColumnExp DOUBLE_VALUE = colexp(_R, "doubleValue");
public static final ColumnExp BOXED_BYTE = colexp(_R, "boxedByte");
public static final ColumnExp BOXED_SHORT = colexp(_R, "boxedShort");
public static final ColumnExp BOXED_INT = colexp(_R, "boxedInt");
public static final ColumnExp BOXED_LONG = colexp(_R, "boxedLong");
public static final ColumnExp BOXED_FLOAT = colexp(_R, "boxedFloat");
public static final ColumnExp BOXED_DOUBLE = colexp(_R, "boxedDouble");
public static final ColumnExp BYTE_ARRAY = colexp(_R, "byteArray");
public static final ColumnExp INT_ARRAY = colexp(_R, "intArray");
public static final ColumnExp STRING = colexp(_R, "string");
public static final ColumnExp DATE = colexp(_R, "date");
public static final ColumnExp TIME = colexp(_R, "time");
public static final ColumnExp TIMESTAMP = colexp(_R, "timestamp");
public static final ColumnExp NULL_BOXED_BYTE = colexp(_R, "nullBoxedByte");
public static final ColumnExp NULL_BOXED_SHORT = colexp(_R, "nullBoxedShort");
public static final ColumnExp NULL_BOXED_INT = colexp(_R, "nullBoxedInt");
public static final ColumnExp NULL_BOXED_LONG = colexp(_R, "nullBoxedLong");
public static final ColumnExp NULL_BOXED_FLOAT = colexp(_R, "nullBoxedFloat");
public static final ColumnExp NULL_BOXED_DOUBLE = colexp(_R, "nullBoxedDouble");
public static final ColumnExp NULL_BYTE_ARRAY = colexp(_R, "nullByteArray");
public static final ColumnExp NULL_INT_ARRAY = colexp(_R, "nullIntArray");
public static final ColumnExp NULL_STRING = colexp(_R, "nullString");
public static final ColumnExp NULL_DATE = colexp(_R, "nullDate");
public static final ColumnExp NULL_TIME = colexp(_R, "nullTime");
public static final ColumnExp NULL_TIMESTAMP = colexp(_R, "nullTimestamp");
// AUTO-GENERATED: FIELDS END
public static final int SCHEMA_VERSION = 1;
@Id public int recordId;
public boolean booleanValue;
public byte byteValue;
public short shortValue;
public int intValue;
public long longValue;
public float floatValue;
public double doubleValue;
public Byte boxedByte;
public Short boxedShort;
public Integer boxedInt;
public Long boxedLong;
public Float boxedFloat;
public Double boxedDouble;
public byte[] byteArray;
public int[] intArray;
public String string;
public Date date;
public Time time;
public Timestamp timestamp;
// public Blob blob; // tested by byte[]
// public Clob clob; // not clear how to test this
@Column(nullable=true) public Byte nullBoxedByte;
@Column(nullable=true) public Short nullBoxedShort;
@Column(nullable=true) public Integer nullBoxedInt;
@Column(nullable=true) public Long nullBoxedLong;
@Column(nullable=true) public Float nullBoxedFloat;
@Column(nullable=true) public Double nullBoxedDouble;
@Column(nullable=true) public byte[] nullByteArray;
@Column(nullable=true) public int[] nullIntArray;
@Column(nullable=true) public String nullString;
@Column(nullable=true) public Date nullDate;
@Column(nullable=true) public Time nullTime;
@Column(nullable=true) public Timestamp nullTimestamp;
@Override public boolean equals (Object other) {
if (!(other instanceof AllTypesRecord)) {
return false;
}
AllTypesRecord orec = (AllTypesRecord)other;
return (booleanValue == orec.booleanValue) &&
(byteValue == orec.byteValue) &&
(shortValue == orec.shortValue) &&
(intValue == orec.intValue) &&
(longValue == orec.longValue) &&
(floatValue == orec.floatValue) &&
(doubleValue == orec.doubleValue) &&
boxedByte.equals(orec.boxedByte) &&
boxedShort.equals(orec.boxedShort) &&
boxedInt.equals(orec.boxedInt) &&
boxedLong.equals(orec.boxedLong) &&
boxedFloat.equals(orec.boxedFloat) &&
boxedDouble.equals(orec.boxedDouble) &&
Arrays.equals(byteArray, orec.byteArray) &&
Arrays.equals(intArray, orec.intArray) &&
string.equals(orec.string) &&
date.equals(orec.date) &&
time.equals(orec.time) &&
timestamp.equals(orec.timestamp) &&
(nullBoxedByte == orec.nullBoxedByte) &&
(nullBoxedShort == orec.nullBoxedShort) &&
(nullBoxedInt == orec.nullBoxedInt) &&
(nullBoxedLong == orec.nullBoxedLong) &&
(nullBoxedFloat == orec.nullBoxedFloat) &&
(nullBoxedDouble == orec.nullBoxedDouble) &&
(nullByteArray == orec.nullByteArray) &&
(nullIntArray == orec.nullIntArray) &&
(nullString == orec.nullString) &&
(nullDate == orec.nullDate) &&
(nullTime == orec.nullTime) &&
(nullTimestamp == orec.nullTimestamp);
}
public static AllTypesRecord createRecord (int recordId)
{
AllTypesRecord rec = new AllTypesRecord();
rec.recordId = recordId;
rec.booleanValue = true;
rec.byteValue = 1;
rec.shortValue = 2;
rec.intValue = 3;
rec.longValue = 4;
rec.floatValue = 5.5f;
rec.doubleValue = 6.6;
rec.boxedByte = 7;
rec.boxedShort = 8;
rec.boxedInt = 9;
rec.boxedLong = 10l;
rec.boxedFloat = 11.11f;
rec.boxedDouble = 12.12;
rec.byteArray = new byte[] { 13, 14 };
rec.intArray = new int[] { 15, 16 };
rec.string = "seventeen";
rec.date = Date.valueOf("2010-01-18");
rec.time = Time.valueOf("19:19:19");
rec.timestamp = new Timestamp(System.currentTimeMillis()+20);
return rec;
}
// AUTO-GENERATED: METHODS START
/**
* Create and return a primary {@link Key} to identify a {@link AllTypesRecord}
* with the supplied key values.
*/
public static Key<AllTypesRecord> getKey (int recordId)
{
return newKey(_R, recordId);
}
/** Register the key fields in an order matching the getKey() factory. */
static { registerKeyFields(RECORD_ID); }
// AUTO-GENERATED: METHODS END
}
@@ -0,0 +1,76 @@
//
// $Id$
//
// Depot library - a Java relational persistence library
// Copyright (C) 2006-2010 Michael Bayne and Pär Winzell
//
// This library is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License as published
// by the Free Software Foundation; either version 2.1 of the License, or
// (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
package com.samskivert.depot.tests;
import java.util.Set;
import org.junit.Test;
import static org.junit.Assert.*;
import com.samskivert.depot.DepotRepository;
import com.samskivert.depot.PersistenceContext;
import com.samskivert.depot.PersistentRecord;
/**
* Tests the handling of our various supported field types.
*/
public class AllTypesTest extends TestBase
{
@Test public void testCreateReadDelete ()
{
AllTypesRecord in = AllTypesRecord.createRecord(1);
_repo.insert(in);
AllTypesRecord out = _repo.loadNoCache(in.recordId);
assertNotNull(out != null); // we got a result
assertTrue(in != out); // it didn't come from the cache
// make sure all of the fields were marshalled and unmarshalled correctly
assertEquals(in, out);
// finally clean up after ourselves
_repo.delete(AllTypesRecord.getKey(in.recordId));
assertNull(_repo.loadNoCache(in.recordId));
}
protected static class TestRepository extends DepotRepository
{
public AllTypesRecord loadNoCache (int recordId)
{
return load(AllTypesRecord.getKey(recordId), CacheStrategy.NONE);
}
public TestRepository (PersistenceContext perCtx)
{
super(perCtx);
}
@Override // from DepotRepository
protected void getManagedRecords (Set<Class<? extends PersistentRecord>> classes)
{
classes.add(AllTypesRecord.class);
}
}
// the HSQL in-memory database persists for the lifetime of the VM, which means we have to
// clean up after ourselves in every test; thus we go ahead and share a repository
protected TestRepository _repo = new TestRepository(createPersistenceContext());
}