/
codebase/
codebase/area/
codebase/doc/
codebase/etc/
codebase/src/net/sourceforge/pain/data/trigger/
codebase/src/net/sourceforge/pain/logic/
codebase/src/net/sourceforge/pain/logic/affect/
codebase/src/net/sourceforge/pain/logic/event/
codebase/src/net/sourceforge/pain/logic/event/deploy/
codebase/src/net/sourceforge/pain/logic/event/guitool/
codebase/src/net/sourceforge/pain/logic/event/guitool/event/
codebase/src/net/sourceforge/pain/logic/fn/util/
codebase/src/net/sourceforge/pain/logic/trigger/
codebase/src/net/sourceforge/pain/logic/trigger/impl/
codebase/src/net/sourceforge/pain/network/console/
codebase/src/net/sourceforge/pain/network/console/telnet/
codebase/src/net/sourceforge/pain/network/guitool/
codebase/src/net/sourceforge/pain/plugin/
codebase/src/net/sourceforge/pain/plugin/command/
codebase/src/net/sourceforge/pain/plugin/reset/
codebase/src/net/sourceforge/pain/plugin/shutdown/
codebase/src/net/sourceforge/pain/plugin/social/
codebase/src/net/sourceforge/pain/util/
db/doc/javadoc/resources/
db/src/net/sourceforge/pain/util/
gui/
gui/lib/
gui/src/net/sourceforge/pain/tools/guitool/dbbrowse/
gui/src/net/sourceforge/pain/tools/guitool/dialog/
gui/src/net/sourceforge/pain/tools/guitool/menu/
gui/src/net/sourceforge/pain/tools/guitool/resources/
gui/src/net/sourceforge/pain/tools/guitool/resources/images/
gui/src/net/sourceforge/pain/tools/guitool/resources/images/explorer/
tests/
tests/src/
tests/src/net/sourceforge/pain/db/data/
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());

	}
}