package org.apache.jdbm;
import java.io.*;
import java.util.AbstractMap;
import java.util.ArrayList;
public class SerialClassInfoTest extends TestCaseWithTestFile {
static class Bean1 implements Serializable {
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Bean1 bean1 = (Bean1) o;
if (Double.compare(bean1.doubleField, doubleField) != 0) return false;
if (Float.compare(bean1.floatField, floatField) != 0) return false;
if (intField != bean1.intField) return false;
if (longField != bean1.longField) return false;
if (field1 != null ? !field1.equals(bean1.field1) : bean1.field1 != null) return false;
if (field2 != null ? !field2.equals(bean1.field2) : bean1.field2 != null) return false;
return true;
}
protected String field1 = null;
protected String field2 = null;
protected int intField = Integer.MAX_VALUE;
protected long longField = Long.MAX_VALUE;
protected double doubleField = Double.MAX_VALUE;
protected float floatField = Float.MAX_VALUE;
transient int getCalled = 0;
transient int setCalled = 0;
public String getField2() {
getCalled++;
return field2;
}
public void setField2(String field2) {
setCalled++;
this.field2 = field2;
}
Bean1(String field1, String field2) {
this.field1 = field1;
this.field2 = field2;
}
Bean1() {
}
}
static class Bean2 extends Bean1 {
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
if (!super.equals(o)) return false;
Bean2 bean2 = (Bean2) o;
if (field3 != null ? !field3.equals(bean2.field3) : bean2.field3 != null) return false;
return true;
}
@Override
public int hashCode() {
return field3 != null ? field3.hashCode() : 0;
}
private String field3 = null;
Bean2(String field1, String field2, String field3) {
super(field1, field2);
this.field3 = field3;
}
Bean2() {
}
}
SerialClassInfo s;
public void setUp() throws IOException {
s = new Serialization();
}
Bean1 b = new Bean1("aa", "bb");
Bean2 b2 = new Bean2("aa", "bb", "cc");
public void testGetFieldValue1() throws Exception {
assertEquals("aa", s.getFieldValue("field1", b));
}
public void testGetFieldValue2() throws Exception {
assertEquals("bb", s.getFieldValue("field2", b));
assertEquals(1, b.getCalled);
}
public void testGetFieldValue3() throws Exception {
assertEquals("aa", s.getFieldValue("field1", b2));
}
public void testGetFieldValue4() throws Exception {
assertEquals("bb", s.getFieldValue("field2", b2));
assertEquals(1, b2.getCalled);
}
public void testGetFieldValue5() throws Exception {
assertEquals("cc", s.getFieldValue("field3", b2));
}
public void testSetFieldValue1() {
s.setFieldValue("field1", b, "zz");
assertEquals("zz", b.field1);
}
public void testSetFieldValue2() {
s.setFieldValue("field2", b, "zz");
assertEquals("zz", b.field2);
assertEquals(1, b.setCalled);
}
public void testSetFieldValue3() {
s.setFieldValue("field1", b2, "zz");
assertEquals("zz", b2.field1);
}
public void testSetFieldValue4() {
s.setFieldValue("field2", b2, "zz");
assertEquals("zz", b2.field2);
assertEquals(1, b2.setCalled);
}
public void testSetFieldValue5() {
s.setFieldValue("field3", b2, "zz");
assertEquals("zz", b2.field3);
}
public void testGetPrimitiveField() {
assertEquals(Integer.MAX_VALUE, s.getFieldValue("intField", b2));
assertEquals(Long.MAX_VALUE, s.getFieldValue("longField", b2));
assertEquals(Double.MAX_VALUE, s.getFieldValue("doubleField", b2));
assertEquals(Float.MAX_VALUE, s.getFieldValue("floatField", b2));
}
public void testSetPrimitiveField() {
s.setFieldValue("intField", b2, -1);
assertEquals(-1, s.getFieldValue("intField", b2));
s.setFieldValue("longField", b2, -1L);
assertEquals(-1L, s.getFieldValue("longField", b2));
s.setFieldValue("doubleField", b2, -1D);
assertEquals(-1D, s.getFieldValue("doubleField", b2));
s.setFieldValue("floatField", b2, -1F);
assertEquals(-1F, s.getFieldValue("floatField", b2));
}
<E> E serialize(E e) throws ClassNotFoundException, IOException {
Serialization s2 = new Serialization();
ByteArrayOutputStream out = new ByteArrayOutputStream();
s2.serialize(new DataOutputStream(out), e);
ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
return (E) s2.deserialize(new DataInputStream(in));
}
public void testSerializable() throws Exception {
assertEquals(serialize(b), b);
}
public void testRecursion() throws Exception {
AbstractMap.SimpleEntry b = new AbstractMap.SimpleEntry("abcd", null);
b.setValue(b.getKey());
AbstractMap.SimpleEntry bx = serialize(b);
assertEquals(bx, b);
assert (bx.getKey() == bx.getValue());
}
public void testRecursion2() throws Exception {
AbstractMap.SimpleEntry b = new AbstractMap.SimpleEntry("abcd", null);
b.setValue(b);
AbstractMap.SimpleEntry bx = serialize(b);
assertTrue(bx == bx.getValue());
assertEquals(bx.getKey(), "abcd");
}
public void testRecursion3() throws Exception {
ArrayList l = new ArrayList();
l.add("123");
l.add(l);
ArrayList l2 = serialize(l);
assertTrue(l.size() == 2);
assertEquals(l.get(0), "123");
assertTrue(l.get(1) == l);
}
public void testPersistedSimple() throws Exception {
String f = newTestFile();
DBAbstract r1 = (DBAbstract) DBMaker.openFile(f).make();
long recid = r1.insert("AA");
r1.commit();
r1.close();
DBAbstract r2 = (DBAbstract) DBMaker.openFile(f).make();
String a2 = r2.fetch(recid);
r2.close();
assertEquals("AA", a2);
}
public void testPersisted() throws Exception {
Bean1 b1 = new Bean1("abc", "dcd");
String f = newTestFile();
DBAbstract r1 = (DBAbstract) DBMaker.openFile(f).make() ;
long recid = r1.insert(b1);
r1.commit();
r1.close();
DBAbstract r2 = (DBAbstract) DBMaker.openFile(f).make();
Bean1 b2 = (Bean1) r2.fetch(recid);
r2.close();
assertEquals(b1, b2);
}
}