package net.cattaka.util.cathandsgendroid.test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.fail; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.util.Date; import java.util.HashSet; import java.util.Set; import net.cattaka.util.cathandsgendroid.test.model.FullModel; import net.cattaka.util.cathandsgendroid.test.model.FullModel.TinyEnum; import net.cattaka.util.cathandsgendroid.test.model.FullModelCatHands; import net.cattaka.util.cathandsgendroid.test.model.TinyParcelable; import net.cattaka.util.cathandsgendroid.test.model.TinySerializable; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; import org.robolectric.shadows.ShadowParcel; import org.robolectric.shadows.ShadowSQLiteDatabase; import android.database.sqlite.SQLiteDatabase; import android.os.Parcel; @RunWith(RobolectricTestRunner.class) public class FullModelTest { @Test public void testDbFunc() { SQLiteDatabase db = ShadowSQLiteDatabase.create(null); db.execSQL(FullModelCatHands.SQL_CREATE_TABLE); FullModel model = new FullModel(); { // Insert model.setKey(567); model.setBlobValue(new byte[] { 1, 2, 3, 4 }); model.setBooleanValue(Boolean.TRUE); model.setByteValue((byte)12); model.setCharacterValue('C'); model.setDateValue(new Date()); model.setDoubleValue(12.34); model.setFloatValue(56.0f); model.setIntegerValue(234); model.setLongValue(987L); model.setParcelableValue(new TinyParcelable(333)); model.setPBooleanValue(true); model.setPByteValue((byte)13); model.setPCharValue('B'); model.setPDoubleValue(43.21); model.setPFloatValue(76.0f); model.setPIntValue(345); model.setPLongValue(876L); model.setPShortValue((short)132); model.setSerializable(new TinySerializable(444)); model.setShortValue((short)243); model.setStringValue("This is it"); model.setTinyEnum(TinyEnum.A); model.setSetSetStringValue(generateTestData(4, 3)); FullModelCatHands.insert(db, model); } {// compare FullModel t = FullModelCatHands.findByKey(db, model.getKey()); assertEqualsArray(model.getBlobValue(), t.getBlobValue()); assertEquals(model.getBooleanValue(), t.getBooleanValue()); assertEquals(model.getByteValue(), t.getByteValue()); assertEquals(model.getCharacterValue(), t.getCharacterValue()); assertEquals(model.getDateValue(), t.getDateValue()); assertEquals(model.getDoubleValue(), t.getDoubleValue()); assertEquals(model.getFloatValue(), t.getFloatValue()); assertEquals(model.getIntegerValue(), t.getIntegerValue()); assertEquals(model.getKey(), t.getKey()); assertEquals(model.getLongValue(), t.getLongValue()); // Parcelable is out of support for DB. // assertEquals(model.getParcelableValue().getData(), // t.getParcelableValue().getData()); assertEquals(model.getPBooleanValue(), t.getPBooleanValue()); assertEquals(model.getPByteValue(), t.getPByteValue()); assertEquals(model.getPCharValue(), t.getPCharValue()); assertEquals(model.getPDoubleValue(), t.getPDoubleValue(), 0); assertEquals(model.getPFloatValue(), t.getPFloatValue(), 0); assertEquals(model.getPIntValue(), t.getPIntValue()); assertEquals(model.getPLongValue(), t.getPLongValue()); assertEquals(model.getPShortValue(), t.getPShortValue()); assertEquals(model.getSerializable().getData(), t.getSerializable().getData()); assertEquals(model.getShortValue(), t.getShortValue()); assertEquals(model.getStringValue(), t.getStringValue()); assertEquals(model.getTinyEnum(), t.getTinyEnum()); assertEquals(model.getSetSetStringValue(), t.getSetSetStringValue()); } { assertEquals(1, FullModelCatHands.findByBooleanValue(db, 0, model.getBooleanValue()) .size()); assertEquals(1, FullModelCatHands.findByByteValue(db, 0, model.getByteValue()).size()); assertEquals(1, FullModelCatHands .findByCharacterValue(db, 0, model.getCharacterValue()).size()); assertEquals(1, FullModelCatHands.findByDateValue(db, 0, model.getDateValue()).size()); assertEquals(1, FullModelCatHands.findByDoubleValue(db, 0, model.getDoubleValue()) .size()); assertEquals(1,FullModelCatHands.findByFloatValue(db, 0, model.getFloatValue()).size()); assertEquals(1, FullModelCatHands.findByIntegerValue(db, 0, model.getIntegerValue()) .size()); assertNotNull(FullModelCatHands.findByKey(db, model.getKey())); assertEquals(1, FullModelCatHands.findByLongValue(db, 0, model.getLongValue()).size()); assertEquals(1, FullModelCatHands.findByPBooleanValue(db, 0, model.getPBooleanValue()) .size()); assertEquals(1, FullModelCatHands.findByPByteValue(db, 0, model.getPByteValue()).size()); assertEquals(1, FullModelCatHands.findByPCharValue(db, 0, model.getPCharValue()).size()); assertEquals(1, FullModelCatHands.findByPDoubleValue(db, 0, model.getPDoubleValue()) .size()); assertEquals(1,FullModelCatHands.findByPFloatValue(db, 0, model.getPFloatValue()).size()); assertEquals(1, FullModelCatHands.findByPIntValue(db, 0, model.getPIntValue()).size()); assertEquals(1, FullModelCatHands.findByPLongValue(db, 0, model.getPLongValue()).size()); assertEquals(1, FullModelCatHands.findByPShortValue(db, 0, model.getPShortValue()) .size()); assertEquals(1, FullModelCatHands.findByShortValue(db, 0, model.getShortValue()).size()); assertEquals(1, FullModelCatHands.findByStringValue(db, 0, model.getStringValue()) .size()); assertEquals(1, FullModelCatHands.findByTinyEnum(db, 0, model.getTinyEnum()).size()); } { // Query assertEquals(1, FullModelCatHands.query(db, 0, "stringValue=?", new String[] {model.getStringValue()}, null).size()); assertEquals(1, FullModelCatHands.query(db, 0, "tinyEnum=?", new String[] {model.getTinyEnum().name()}, null).size()); } FullModel model2 = new FullModel(); { // Update model2.setKey(model.getKey()); model2.setBlobValue(new byte[] { 5, 6, 7, 8 }); model2.setBooleanValue(Boolean.FALSE); model2.setByteValue((byte)112); model2.setCharacterValue('D'); model2.setDateValue(new Date(model.getDateValue().getTime() + 1000)); model2.setDoubleValue(23.45); model2.setFloatValue((float)67.89); model2.setIntegerValue(345); model2.setLongValue(876L); // Parcelable is out of support for DB. // model2.setParcelableValue(new TinyParcelable(222)); model2.setPBooleanValue(false); model2.setPByteValue((byte)14); model2.setPCharValue('A'); model2.setPDoubleValue(54.32); model2.setPFloatValue((float)65.43); model2.setPIntValue(456); model2.setPLongValue(765L); model2.setPShortValue((short)465); model2.setSerializable(new TinySerializable(555)); model2.setShortValue((short)867); model2.setStringValue("What's that?"); model2.setTinyEnum(TinyEnum.B); FullModelCatHands.update(db, model2); } {// compare FullModel t = FullModelCatHands.findByKey(db, model.getKey()); assertEqualsArray(model2.getBlobValue(), t.getBlobValue()); assertEquals(model2.getBooleanValue(), t.getBooleanValue()); assertEquals(model2.getByteValue(), t.getByteValue()); assertEquals(model2.getCharacterValue(), t.getCharacterValue()); assertEquals(model2.getDateValue(), t.getDateValue()); assertEquals(model2.getDoubleValue(), t.getDoubleValue()); assertEquals(model2.getFloatValue(), t.getFloatValue()); assertEquals(model2.getIntegerValue(), t.getIntegerValue()); assertEquals(model2.getKey(), t.getKey()); assertEquals(model2.getLongValue(), t.getLongValue()); // Parcelable is out of support for DB. // assertEquals(model2.getParcelableValue().getData(), // t.getParcelableValue().getData()); assertEquals(model2.getPBooleanValue(), t.getPBooleanValue()); assertEquals(model2.getPByteValue(), t.getPByteValue()); assertEquals(model2.getPCharValue(), t.getPCharValue()); assertEquals(model2.getPDoubleValue(), t.getPDoubleValue(), 0); assertEquals(model2.getPFloatValue(), t.getPFloatValue(), 0); assertEquals(model2.getPIntValue(), t.getPIntValue()); assertEquals(model2.getPLongValue(), t.getPLongValue()); assertEquals(model2.getPShortValue(), t.getPShortValue()); assertEquals(model2.getSerializable().getData(), t.getSerializable().getData()); assertEquals(model2.getShortValue(), t.getShortValue()); assertEquals(model2.getStringValue(), t.getStringValue()); assertEquals(model2.getTinyEnum(), t.getTinyEnum()); assertEquals(model2.getSetSetStringValue(), t.getSetSetStringValue()); } { // delete assertEquals(1, FullModelCatHands.delete(db, model.getKey())); FullModel t = FullModelCatHands.findByKey(db, model.getKey()); assertNull(t); } db.close(); } @Test public void testDbFunc_null() { SQLiteDatabase db = ShadowSQLiteDatabase.create(null); db.execSQL(FullModelCatHands.SQL_CREATE_TABLE); FullModel model = new FullModel(); { // Insert model.setKey(567); FullModelCatHands.insert(db, model); } {// compare FullModel t = FullModelCatHands.findByKey(db, model.getKey()); assertEquals(model.getBlobValue(), t.getBlobValue()); assertEquals(model.getBooleanValue(), t.getBooleanValue()); assertEquals(model.getByteValue(), t.getByteValue()); assertEquals(model.getCharacterValue(), t.getCharacterValue()); assertEquals(model.getDateValue(), t.getDateValue()); assertEquals(model.getDoubleValue(), t.getDoubleValue()); assertEquals(model.getFloatValue(), t.getFloatValue()); assertEquals(model.getIntegerValue(), t.getIntegerValue()); assertEquals(model.getKey(), t.getKey()); assertEquals(model.getLongValue(), t.getLongValue()); assertEquals(model.getParcelableValue(), t.getParcelableValue()); assertEquals(model.getPBooleanValue(), t.getPBooleanValue()); assertEquals(model.getPByteValue(), t.getPByteValue()); assertEquals(model.getPCharValue(), t.getPCharValue()); assertEquals(model.getPDoubleValue(), t.getPDoubleValue(), 0); assertEquals(model.getPFloatValue(), t.getPFloatValue(), 0); assertEquals(model.getPIntValue(), t.getPIntValue()); assertEquals(model.getPLongValue(), t.getPLongValue()); assertEquals(model.getPShortValue(), t.getPShortValue()); assertEquals(model.getSerializable(), t.getSerializable()); assertEquals(model.getShortValue(), t.getShortValue()); assertEquals(model.getStringValue(), t.getStringValue()); assertEquals(model.getTinyEnum(), t.getTinyEnum()); assertEquals(model.getSetSetStringValue(), t.getSetSetStringValue()); } } @Test public void testParcelFunc() { FullModel model = new FullModel(); { // create model.setKey(567); model.setBlobValue(new byte[] { 1, 2, 3, 4 }); model.setBooleanValue(Boolean.TRUE); model.setByteValue((byte)12); model.setCharacterValue('C'); model.setDateValue(new Date()); model.setDoubleValue(12.34); model.setFloatValue((float)56.78); model.setIntegerValue(234); model.setLongValue(987L); model.setParcelableValue(new TinyParcelable(333)); model.setPBooleanValue(true); model.setPByteValue((byte)13); model.setPCharValue('B'); model.setPDoubleValue(43.21); model.setPFloatValue((float)76.54); model.setPIntValue(345); model.setPLongValue(876L); model.setPShortValue((short)132); model.setSerializable(new TinySerializable(444)); model.setShortValue((short)243); model.setStringValue("This is it"); model.setTinyEnum(TinyEnum.A); model.setSetSetStringValue(generateTestData(4, 3)); } Parcel parcel; { parcel = Robolectric.newInstanceOf(Parcel.class); parcel.writeParcelable(model, 0); } { FullModel t = parcel.readParcelable(this.getClass().getClassLoader()); parcel.recycle(); assertEqualsArray(model.getBlobValue(), t.getBlobValue()); assertEquals(model.getBooleanValue(), t.getBooleanValue()); assertEquals(model.getByteValue(), t.getByteValue()); assertEquals(model.getCharacterValue(), t.getCharacterValue()); assertEquals(model.getDateValue(), t.getDateValue()); assertEquals(model.getDoubleValue(), t.getDoubleValue()); assertEquals(model.getFloatValue(), t.getFloatValue()); assertEquals(model.getIntegerValue(), t.getIntegerValue()); assertEquals(model.getKey(), t.getKey()); assertEquals(model.getLongValue(), t.getLongValue()); assertEquals(model.getParcelableValue().getData(), t.getParcelableValue().getData()); assertEquals(model.getPBooleanValue(), t.getPBooleanValue()); assertEquals(model.getPByteValue(), t.getPByteValue()); assertEquals(model.getPCharValue(), t.getPCharValue()); assertEquals(model.getPDoubleValue(), t.getPDoubleValue(), 0); assertEquals(model.getPFloatValue(), t.getPFloatValue(), 0); assertEquals(model.getPIntValue(), t.getPIntValue()); assertEquals(model.getPLongValue(), t.getPLongValue()); assertEquals(model.getPShortValue(), t.getPShortValue()); assertEquals(model.getSerializable().getData(), t.getSerializable().getData()); assertEquals(model.getShortValue(), t.getShortValue()); assertEquals(model.getStringValue(), t.getStringValue()); assertEquals(model.getTinyEnum(), t.getTinyEnum()); assertEquals(model.getSetSetStringValue(), t.getSetSetStringValue()); } } @Test public void testParcelFunc_null() { FullModel model = new FullModel(); Parcel parcel; { parcel = ShadowParcel.obtain(); parcel.writeParcelable(model, 0); } { parcel.setDataPosition(0); FullModel t = parcel.readParcelable(this.getClass().getClassLoader()); parcel.recycle(); assertEquals(model.getBlobValue(), t.getBlobValue()); assertEquals(model.getBooleanValue(), t.getBooleanValue()); assertEquals(model.getByteValue(), t.getByteValue()); assertEquals(model.getCharacterValue(), t.getCharacterValue()); assertEquals(model.getDateValue(), t.getDateValue()); assertEquals(model.getDoubleValue(), t.getDoubleValue()); assertEquals(model.getFloatValue(), t.getFloatValue()); assertEquals(model.getIntegerValue(), t.getIntegerValue()); assertEquals(model.getKey(), t.getKey()); assertEquals(model.getLongValue(), t.getLongValue()); // Parcelable is out of support for DB. // assertEquals(model.getParcelableValue(), t.getParcelableValue()); assertEquals(model.getPBooleanValue(), t.getPBooleanValue()); assertEquals(model.getPByteValue(), t.getPByteValue()); assertEquals(model.getPCharValue(), t.getPCharValue()); assertEquals(model.getPDoubleValue(), t.getPDoubleValue(), 0); assertEquals(model.getPFloatValue(), t.getPFloatValue(), 0); assertEquals(model.getPIntValue(), t.getPIntValue()); assertEquals(model.getPLongValue(), t.getPLongValue()); assertEquals(model.getPShortValue(), t.getPShortValue()); assertEquals(model.getSerializable(), t.getSerializable()); assertEquals(model.getShortValue(), t.getShortValue()); assertEquals(model.getStringValue(), t.getStringValue()); assertEquals(model.getTinyEnum(), t.getTinyEnum()); assertEquals(model.getSetSetStringValue(), t.getSetSetStringValue()); } } @Test public void testDsFunc() throws IOException { FullModel model = new FullModel(); { // create model.setKey(567); model.setBlobValue(new byte[] { 1, 2, 3, 4 }); model.setBooleanValue(Boolean.TRUE); model.setByteValue((byte)12); model.setCharacterValue('C'); model.setDateValue(new Date()); model.setDoubleValue(12.34); model.setFloatValue((float)56.78); model.setIntegerValue(234); model.setLongValue(987L); // Parcelable is out of support for DB. // model.setParcelableValue(new TinyParcelable(333)); model.setPBooleanValue(true); model.setPByteValue((byte)13); model.setPCharValue('B'); model.setPDoubleValue(43.21); model.setPFloatValue((float)76.54); model.setPIntValue(345); model.setPLongValue(876L); model.setPShortValue((short)132); model.setSerializable(new TinySerializable(444)); model.setShortValue((short)243); model.setStringValue("This is it"); model.setTinyEnum(TinyEnum.A); model.setSetSetStringValue(generateTestData(4, 3)); } byte[] data; { ByteArrayOutputStream bout = new ByteArrayOutputStream(); DataOutputStream dout = new DataOutputStream(bout); FullModelCatHands.writeToDataOutputStream(model, dout); dout.flush(); data = bout.toByteArray(); } { DataInputStream din = new DataInputStream(new ByteArrayInputStream(data)); FullModel t = new FullModel(); FullModelCatHands.readFromDataInputStream(t, din); assertEqualsArray(model.getBlobValue(), t.getBlobValue()); assertEquals(model.getBooleanValue(), t.getBooleanValue()); assertEquals(model.getByteValue(), t.getByteValue()); assertEquals(model.getCharacterValue(), t.getCharacterValue()); assertEquals(model.getDateValue(), t.getDateValue()); assertEquals(model.getDoubleValue(), t.getDoubleValue()); assertEquals(model.getFloatValue(), t.getFloatValue()); assertEquals(model.getIntegerValue(), t.getIntegerValue()); assertEquals(model.getKey(), t.getKey()); assertEquals(model.getLongValue(), t.getLongValue()); // Parcelable is out of support for DB. // assertEquals(model.getParcelableValue().getData(), // t.getParcelableValue().getData()); assertEquals(model.getPBooleanValue(), t.getPBooleanValue()); assertEquals(model.getPByteValue(), t.getPByteValue()); assertEquals(model.getPCharValue(), t.getPCharValue()); assertEquals(model.getPDoubleValue(), t.getPDoubleValue(), 0); assertEquals(model.getPFloatValue(), t.getPFloatValue(), 0); assertEquals(model.getPIntValue(), t.getPIntValue()); assertEquals(model.getPLongValue(), t.getPLongValue()); assertEquals(model.getPShortValue(), t.getPShortValue()); assertEquals(model.getSerializable().getData(), t.getSerializable().getData()); assertEquals(model.getShortValue(), t.getShortValue()); assertEquals(model.getStringValue(), t.getStringValue()); assertEquals(model.getTinyEnum(), t.getTinyEnum()); assertEquals(model.getSetSetStringValue(), t.getSetSetStringValue()); assertEquals(-1, din.read()); } } @Test public void testDsFunc_null() throws IOException { FullModel model = new FullModel(); byte[] data; { ByteArrayOutputStream bout = new ByteArrayOutputStream(); DataOutputStream dout = new DataOutputStream(bout); FullModelCatHands.writeToDataOutputStream(model, dout); dout.flush(); data = bout.toByteArray(); } { DataInputStream din = new DataInputStream(new ByteArrayInputStream(data)); FullModel t = new FullModel(); FullModelCatHands.readFromDataInputStream(model, din); assertEquals(model.getBlobValue(), t.getBlobValue()); assertEquals(model.getBooleanValue(), t.getBooleanValue()); assertEquals(model.getByteValue(), t.getByteValue()); assertEquals(model.getCharacterValue(), t.getCharacterValue()); assertEquals(model.getDateValue(), t.getDateValue()); assertEquals(model.getDoubleValue(), t.getDoubleValue()); assertEquals(model.getFloatValue(), t.getFloatValue()); assertEquals(model.getIntegerValue(), t.getIntegerValue()); assertEquals(model.getKey(), t.getKey()); assertEquals(model.getLongValue(), t.getLongValue()); // Parcelable is out of support for DB. // assertEquals(model.getParcelableValue(), t.getParcelableValue()); assertEquals(model.getPBooleanValue(), t.getPBooleanValue()); assertEquals(model.getPByteValue(), t.getPByteValue()); assertEquals(model.getPCharValue(), t.getPCharValue()); assertEquals(model.getPDoubleValue(), t.getPDoubleValue(), 0); assertEquals(model.getPFloatValue(), t.getPFloatValue(), 0); assertEquals(model.getPIntValue(), t.getPIntValue()); assertEquals(model.getPLongValue(), t.getPLongValue()); assertEquals(model.getPShortValue(), t.getPShortValue()); assertEquals(model.getSerializable(), t.getSerializable()); assertEquals(model.getShortValue(), t.getShortValue()); assertEquals(model.getStringValue(), t.getStringValue()); assertEquals(model.getTinyEnum(), t.getTinyEnum()); assertEquals(model.getSetSetStringValue(), t.getSetSetStringValue()); } } private void assertEqualsArray(byte[] b1, byte[] b2) { if (b1 == b2) { // ok } else if (b1 != null) { if (b2 != null) { if (b1.length == b2.length) { for (int i = 0; i < b1.length; i++) { if (b1[i] == b2[i]) { // ok } else { fail(); } } } else { fail(); } } else { fail(); } } else { if (b2 != null) { fail(); } else { // ok } } } private Set<Set<String>> generateTestData(int m, int n) { int c = 0; Set<Set<String>> ss = new HashSet<Set<String>>(); for (int i=0;i<m;i++) { Set<String> s = new HashSet<String>(); for (int j=0;j<n;j++) { s.add(String.valueOf(c++)); } ss.add(s); } return ss; } }