package net.sourceforge.pain.db;
import junit.framework.*;
import java.io.*;
import net.sourceforge.pain.db.data.*;
/**
* User: fmike Date: Aug 26, 2003 Time: 3:30:29 AM
*/
public final class PlainWriteModeTest extends TestCase {
private PainDB db;
public PlainWriteModeTest() {
super("PlainWriteModeTest");
}
protected void setUp() throws Exception {
db = new PainDB(getName() + ".db");
db.ALLOW_PLAIN_WRITE = true; // allow work without transactions
}
protected void tearDown() throws Exception {
if (db != null) {
File file = new File(db.getDbFileName());
if (!db.isClosed()) {
db.close();
}
db = null;
file.delete();
}
}
public void testState1() throws IOException {
AllFieldTypesObject obj = new AllFieldTypesObject(db);
assertTrue(obj.isDirty()); // in plain write mode there is no NEW state
obj.setBOOLEAN(true);
assertTrue(obj.isDirty());
db.flush();
assertTrue(obj.isClean());
boolean v = obj.getBOOLEAN();
assertEquals(true, v);
assertTrue(obj.isClean());
obj.setBOOLEAN(v);
assertTrue(obj.isDirty());
db.flush();
assertTrue(obj.isClean());
obj.delete();
assertTrue(obj.isDetached());
db.flush();
assertTrue(obj.isDetached());
}
public void testStartStop1() throws Exception {
db.MANUAL_FLUSH_MODE = true; // will not flush on close
assertTrue(db.isDatabaseEmpty());
AllFieldTypesObject obj = new AllFieldTypesObject(db);
assertFalse(db.isDatabaseEmpty());
Object oid = obj.getOid();
String fileName = db.getDbFileName();
db.close();
assertTrue(db.isClosed());
assertTrue(obj.isDetached());
db = new PainDB(fileName);
obj = (AllFieldTypesObject) db.getObject(oid);
assertNull(obj);
obj = new AllFieldTypesObject();
assertTrue(obj.isDetached());
obj = new AllFieldTypesObject(db);
assertTrue(obj.isDirty());
obj.setREFERENCE(obj);
oid = obj.getOid();
assertSame(obj, db.getObject(oid));
db.flush();
assertTrue(obj.isClean());
assertSame(obj, db.getObject(oid));
assertSame(obj.getREFERENCE(), obj);
assertEquals(oid, obj.getOid());
db.close();
assertTrue(obj.isDetached());
db = new PainDB(fileName);
obj = (AllFieldTypesObject) db.getObject(oid);
assertNotNull(obj);
assertSame(obj, obj.getREFERENCE());
assertTrue(obj.isClean());
obj.delete();
assertTrue(obj.isDetached());
db.close(); // no flush where done
assertTrue(obj.isDetached());
}
}