/
area/
classes/net/sourceforge/pain/logic/
classes/net/sourceforge/pain/logic/event/
classes/net/sourceforge/pain/logic/fn/util/
classes/net/sourceforge/pain/network/console/
classes/net/sourceforge/pain/plugin/
classes/net/sourceforge/pain/plugin/reset/
classes/net/sourceforge/pain/plugin/shutdown/
classes/net/sourceforge/pain/plugin/social/
classest/net/sourceforge/pain/db/data/
doc/
doc/paindb/resources/
src/net/sourceforge/pain/logic/
src/net/sourceforge/pain/logic/event/
src/net/sourceforge/pain/logic/fn/util/
src/net/sourceforge/pain/network/console/
src/net/sourceforge/pain/network/console/telnet/
src/net/sourceforge/pain/plugin/
src/net/sourceforge/pain/plugin/command/
src/net/sourceforge/pain/plugin/reset/
src/net/sourceforge/pain/plugin/shutdown/
src/net/sourceforge/pain/plugin/social/
src/net/sourceforge/pain/util/
tests/
tests/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());

	}
}