/
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 24, 2003  * Time: 11:15:30 PM
 */
public final class GlobalFeaturesTest extends TestCase {

    private PainDB db;

    public GlobalFeaturesTest() {
        super("GlobalFeaturesTest");
    }

    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.forceClose();
            }
            db = null;
            file.delete();
        }

    }

    public void testBackup1() throws Exception {
        db.beginTransaction();
        final int N = 100;
        for (int i = 0; i < N; i++) {
            new AllFieldTypesObject(db);
        }
        db.commitTransaction();
        DbClass dbClass = db.getDbClass(AllFieldTypesObject.class);
        assertEquals(N, dbClass.getNumberOfObjects());

        final String fileName = db.getDbFileName();
        String backupName = fileName + ".backup";
        db.backupTo(backupName, true);
        db.close();

        db = new PainDB(backupName);
        new File(fileName).delete(); // old db file

        dbClass = db.getDbClass(AllFieldTypesObject.class);
        assertEquals(N, dbClass.getNumberOfObjects());
    }


    public void testExportImport1() throws Exception {
        String xmlFileName = "testExportImport1.xml";
        String newDbFileName = "testExportImport1.pdb";
        new File(xmlFileName).delete();
        new File(newDbFileName).delete();

        db.beginTransaction();
        final int N = 100;
        Object oids[] = new Object[N];
        for (int i = 0; i < N; i++) {
            AllFieldTypesObject obj = new AllFieldTypesObject(db);
            fillObject(obj, i);
            oids[i] = obj.getOid();
        }
        db.setRoot(db.getObject(oids[10]));
        assertSame(db.getRoot(), db.getObject(oids[10]));
        db.commitTransaction();
        assertSame(db.getRoot(), db.getObject(oids[10]));
        db.exportToXml(xmlFileName);
        db.close();

        db = PainDB.importFromXml(xmlFileName, newDbFileName);
        db.beginTransaction();
        for (int i = 0; i < N; i++) {
            AllFieldTypesObject obj = (AllFieldTypesObject) db.getObject(oids[i]);
            checkObject(obj, i);
        }
        assertSame(db.getRoot(), db.getObject(oids[10]));
        db.commitTransaction();
        db.close();

        new File(xmlFileName).delete();
        new File(newDbFileName).delete();
    }

    private void fillObject(AllFieldTypesObject obj, int i) {
        obj.setSTRING("some string " + i);
        obj.setINT(i);
        obj.setLONG(i * (long) i);
        obj.setBOOLEAN((i & 0x1) == 0);
        obj.setREFERENCE(obj);
        obj.getINT_KEY_MAP().put(i, obj);
        obj.getSTRING_MAP().put("key" + i, "value" + i);
        obj.getSTRING_SET().add("" + i);
        obj.setARRAY_OF_STRING(new String[]{"" + i});
        obj.setARRAY_OF_INT(new int[]{i});
    }

    private void checkObject(AllFieldTypesObject obj, int i) {
        assertEquals(obj.getSTRING(), "some string " + i);
        assertEquals(obj.getINT(), i);
        assertEquals(obj.getLONG(), i * (long) i);
        assertEquals(obj.getBOOLEAN(), (i & 0x1) == 0);
        assertSame(obj.getREFERENCE(), obj);
        assertSame(obj.getINT_KEY_MAP().get(i), obj);
        assertEquals(obj.getSTRING_MAP().get("key" + i), "value" + i);
        assertTrue(obj.getSTRING_SET().contains("" + i));
        assertEquals(obj.getARRAY_OF_STRING().length, 1);
        assertEquals(obj.getARRAY_OF_STRING()[0], "" + i);
        assertEquals(obj.getARRAY_OF_INT().length, 1);
        assertEquals(obj.getARRAY_OF_INT()[0], i);
    }

}