/
codebase/src/net/sourceforge/pain/admin/console/command/
codebase/src/net/sourceforge/pain/data/role/
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/util/
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/
mudlibs/tinylib/
mudlibs/tinylib/area/
mudlibs/tinylib/etc/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/data/affect/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/data/prototype/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/data/trigger/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/affect/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/event/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/event/deploy/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/event/guitool/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/event/guitool/event/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/fn/util/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/trigger/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/trigger/impl/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/plugin/command/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/plugin/reset/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/plugin/shutdown/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/plugin/social/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/util/
tests/
tests/src/
tests/src/net/sourceforge/pain/db/data/
package net.sourceforge.pain.db;

import junit.framework.*;
import net.sourceforge.pain.db.data.*;

import java.io.*;

/**
 * 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());

    }
}