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()); } }