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

	private PainDB db;

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

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

	}


	public void testBOOLEAN() {
		AllFieldTypesObject obj = new AllFieldTypesObject(db);
		assertEquals(false, obj.getBOOLEAN());

		obj.setBOOLEAN(true);
		assertEquals(true, obj.getBOOLEAN());

		obj.setBOOLEAN(false);
		assertEquals(false, obj.getBOOLEAN());
	}


	public void testBYTE() {
		AllFieldTypesObject obj = new AllFieldTypesObject(db);
		assertEquals((byte) 0, obj.getBYTE());

		obj.setBYTE((byte) 100);
		assertEquals((byte) 100, obj.getBYTE());

		obj.setBYTE((byte) -100);
		assertEquals((byte) -100, obj.getBYTE());
	}

	public void testCHAR() {
		AllFieldTypesObject obj = new AllFieldTypesObject(db);
		assertEquals((char) 0, obj.getCHAR());

		obj.setCHAR('\t');
		assertEquals('\t', obj.getCHAR());

		obj.setCHAR('x');
		assertEquals('x', obj.getCHAR());
	}


	public void testDOUBLE() {
		AllFieldTypesObject obj = new AllFieldTypesObject(db);
		assertEquals(0D, obj.getDOUBLE(), 0D);

		obj.setDOUBLE(Math.PI);
		assertEquals(Math.PI, obj.getDOUBLE(), 0D);

		obj.setDOUBLE(Math.E);
		assertEquals(Math.E, obj.getDOUBLE(), 0D);

		obj.setDOUBLE(Double.NaN);
		assertTrue(Double.isNaN(obj.getDOUBLE()));

		obj.setDOUBLE(Double.POSITIVE_INFINITY);
		assertEquals(Double.POSITIVE_INFINITY, obj.getDOUBLE(), 0D);

		obj.setDOUBLE(Double.NEGATIVE_INFINITY);
		assertEquals(Double.NEGATIVE_INFINITY, obj.getDOUBLE(), 0D);

	}


	public void testFLOAT() {
		AllFieldTypesObject obj = new AllFieldTypesObject(db);
		assertEquals(0F, obj.getFLOAT(), 0F);

		obj.setFLOAT((float) Math.E);
		assertEquals((float) Math.E, obj.getFLOAT(), 0F);

		obj.setFLOAT((float) Math.PI);
		assertEquals((float) Math.PI, obj.getFLOAT(), 0F);

		obj.setFLOAT(Float.NaN);
		assertTrue(Float.isNaN(obj.getFLOAT()));

		obj.setFLOAT(Float.POSITIVE_INFINITY);
		assertEquals(Float.POSITIVE_INFINITY, obj.getFLOAT(), 0F);

		obj.setFLOAT(Float.NEGATIVE_INFINITY);
		assertEquals(Float.NEGATIVE_INFINITY, obj.getFLOAT(), 0F);

	}


	public void testINT() {
		AllFieldTypesObject obj = new AllFieldTypesObject(db);
		assertEquals(0, obj.getINT());

		obj.setINT(Integer.MAX_VALUE);
		assertEquals(Integer.MAX_VALUE, obj.getINT());

		obj.setINT(0);
		assertEquals(0, obj.getINT());
	}


	public void testLONG() {
		AllFieldTypesObject obj = new AllFieldTypesObject(db);
		assertEquals(0L, obj.getLONG());

		obj.setLONG(Long.MIN_VALUE);
		assertEquals(Long.MIN_VALUE, obj.getLONG());

		obj.setLONG(-1L);
		assertEquals(-1L, obj.getLONG());
	}


	public void testSHORT() {
		AllFieldTypesObject obj = new AllFieldTypesObject(db);
		assertEquals((short) 0, obj.getSHORT());

		obj.setSHORT(Short.MIN_VALUE);
		assertEquals(Short.MIN_VALUE, obj.getSHORT());

		obj.setSHORT((short) 1024);
		assertEquals((short) 1024, obj.getSHORT());
	}


	public void testSTRING() {
		AllFieldTypesObject obj = new AllFieldTypesObject(db);
		assertNull(obj.getSTRING());

		final String v1 = "some test string 1";
		obj.setSTRING(v1);
		assertEquals(v1, obj.getSTRING());

		final String v2 = "some test string 2";
		obj.setSTRING(v2);
		assertEquals(v2, obj.getSTRING());

		obj.setSTRING(null);
		assertNull(obj.getSTRING());
	}


	public void testREFERENCE() {
		AllFieldTypesObject obj = new AllFieldTypesObject(db);
		assertNull(obj.getREFERENCE());

		obj.setREFERENCE(obj);
		assertEquals(obj, obj.getREFERENCE());

		obj.setREFERENCE(null);
		assertNull(obj.getREFERENCE());
	}


	public void testARRAY_OF_BYTE() {
		AllFieldTypesObject obj = new AllFieldTypesObject(db);
		assertNull(obj.getARRAY_OF_BYTE());

		byte[] v1 = new byte[]{1, 2, 3, 4};
		obj.setARRAY_OF_BYTE(v1);
		assertEquals(v1, obj.getARRAY_OF_BYTE());
		assertTrue(v1 == obj.getARRAY_OF_BYTE());

		obj.setARRAY_OF_BYTE(null);
		assertNull(obj.getARRAY_OF_BYTE());
	}


	public void testARRAY_OF_CHAR() {
		AllFieldTypesObject obj = new AllFieldTypesObject(db);
		assertNull(obj.getARRAY_OF_CHAR());

		char[] v1 = new char[]{'H', 'e', 'l', 'l', 'o', '!'};
		obj.setARRAY_OF_CHAR(v1);
		assertEquals(v1, obj.getARRAY_OF_CHAR());
		assertTrue(v1 == obj.getARRAY_OF_CHAR());

		obj.setARRAY_OF_CHAR(null);
		assertNull(obj.getARRAY_OF_CHAR());
	}


	public void testARRAY_OF_INT() {
		AllFieldTypesObject obj = new AllFieldTypesObject(db);
		assertNull(obj.getARRAY_OF_INT());

		int[] v1 = new int[]{1, 2, 3, 4};
		obj.setARRAY_OF_INT(v1);
		assertEquals(v1, obj.getARRAY_OF_INT());
		assertTrue(v1 == obj.getARRAY_OF_INT());

		obj.setARRAY_OF_INT(null);
		assertNull(obj.getARRAY_OF_INT());
	}


	public void testARRAY_OF_STRING() {
		AllFieldTypesObject obj = new AllFieldTypesObject(db);
		assertNull(obj.getARRAY_OF_STRING());

		String[] v1 = new String[]{"1", null, "3", "456789"};
		obj.setARRAY_OF_STRING(v1);
		assertEquals(v1, obj.getARRAY_OF_STRING());
		assertTrue(v1 == obj.getARRAY_OF_STRING());

		obj.setARRAY_OF_STRING(null);
		assertNull(obj.getARRAY_OF_STRING());
	}


	public void testLINKED_LIST() {
		AllFieldTypesObject obj = new AllFieldTypesObject(db);
		DbLinkedList list = obj.getLINKED_LIST();
		assertNotNull(list);
		assertEquals(0, list.size());

		list.add(obj);
		assertEquals(1, list.size());

		list.add(obj);
		assertEquals(2, list.size());
		assertTrue(list.get(1) == obj);

		assertEquals(0, list.indexOf(obj));

		list.remove(obj);
		assertEquals(1, list.size());

		list.remove(obj);
		assertEquals(0, list.size());


		list.add(obj);
		list.add(obj);
		list.addAll(list);
		assertEquals(4, list.size());

		list.retainAll(list);
		assertEquals(4, list.size());
		assertTrue(list.get(3) == obj);

		assertTrue(list.contains(obj));
		assertFalse(list.contains(list));

		list.clear();
		assertTrue(list.isEmpty());
	}


	public void testARRAY_LIST() {
		AllFieldTypesObject obj = new AllFieldTypesObject(db);
		DbArrayList list = obj.getARRAY_LIST();
		assertNotNull(list);
		assertEquals(0, list.size());

		list.add(obj);
		assertEquals(1, list.size());

		list.add(obj);
		assertEquals(2, list.size());
		assertTrue(list.get(1) == obj);

		assertEquals(0, list.indexOf(obj));

		list.remove(obj);
		assertEquals(1, list.size());

		list.remove(obj);
		assertEquals(0, list.size());

		list.add(obj);
		list.add(obj);
		list.addAll(list);
		assertEquals(4, list.size());
		assertTrue(list.get(3) == obj);

		list.retainAll(list);
		assertEquals(4, list.size());

		assertTrue(list.contains(obj));
		assertFalse(list.contains(list));

		list.clear();
		assertTrue(list.isEmpty());
	}


	public void testINT_KEY_MAP() {
		AllFieldTypesObject obj = new AllFieldTypesObject(db);
		DbIntKeyMap map = obj.getINT_KEY_MAP();
		assertNotNull(map);
		assertEquals(0, map.size());

		map.put(1, obj);
		assertEquals(1, map.size());
		assertTrue(obj == map.get(1));
		assertNull(map.get(2));

		assertTrue(map.put(1, obj) == obj);
		assertEquals(1, map.size());
		map.put(2, obj);
		assertEquals(2, map.size());

		assertTrue(map.containsValue(obj));
		assertTrue(map.containsKey(2));
		assertFalse(map.containsKey(3));
		assertTrue(obj == map.remove(1));
		assertEquals(1, map.size());
		map.clear();
		assertEquals(0, map.size());
	}


	public void testSTRING_KEY_MAP() {
		AllFieldTypesObject obj = new AllFieldTypesObject(db);
		DbStringKeyMap map = obj.getSTRING_KEY_MAP();
		assertNotNull(map);
		assertEquals(0, map.size());

		final String key1 = "111";
		final String key2 = "222";
		final String key3 = "333";

		map.put(key1, obj);
		assertEquals(1, map.size());
		assertTrue(obj == map.get(key1));
		assertNull(map.get(key2));

		assertTrue(map.put(key1, obj) == obj);
		assertEquals(1, map.size());
		map.put(key2, obj);
		assertEquals(2, map.size());

		assertTrue(map.containsValue(obj));
		assertTrue(map.containsKey(key2));
		assertFalse(map.containsKey(key3));
		assertTrue(obj == map.remove(key1));
		assertEquals(1, map.size());
		map.clear();
		assertEquals(0, map.size());
	}


	public void testREFERENCE_SET() {
		AllFieldTypesObject obj = new AllFieldTypesObject(db);
		DbReferenceSet set = obj.getREFERENCE_SET();
		assertNotNull(set);
		assertEquals(0, set.size());

		set.add(obj);
		assertEquals(1, set.size());

		set.add(obj);
		assertEquals(1, set.size());


		set.remove(obj);
		assertEquals(0, set.size());


		set.add(obj);
		set.add(obj);
//		set.addAll(set); unsupported -> todo
		assertEquals(1, set.size());

//		set.retainAll(set); unsupported -> todo
//		assertEquals(1, set.size());

		assertTrue(set.contains(obj));
		ClassCastException e = null;
		try {
			set.contains(set);
		} catch (ClassCastException ex) {
			e = ex;
		}
		assertNotNull(e);

		set.clear();
		assertTrue(set.isEmpty());
	}

	public void testSTRING_SET() {
		AllFieldTypesObject obj = new AllFieldTypesObject(db);
		DbStringSet set = obj.getSTRING_SET();
		assertNotNull(set);
		assertEquals(0, set.size());

		final String obj1 = "lalala";
		set.add(obj1);
		assertEquals(1, set.size());

		set.add(obj1);
		assertEquals(1, set.size());


		set.remove(obj1);
		assertEquals(0, set.size());


		set.add(obj1);
		set.add(obj1);
//		set.addAll(set); unsupported -> todo
		assertEquals(1, set.size());

//		set.retainAll(set); unsupported -> todo
//		assertEquals(1, set.size());

		assertTrue(set.contains(obj1));
		assertFalse(set.contains(set));

		set.clear();
		assertTrue(set.isEmpty());
	}


	public void testSTRING_MAP() {
			AllFieldTypesObject obj = new AllFieldTypesObject(db);
			DbStringMap map = obj.getSTRING_MAP();
			assertNotNull(map);
			assertEquals(0, map.size());

			final String key1 = "key1";
			final String obj1 = "lalala";
			map.put(key1, obj1);
			assertEquals(1, map.size());

			map.put(key1, obj1);
			assertEquals(1, map.size());


			map.remove(key1);
			assertEquals(0, map.size());


			map.put(key1, obj1);
			map.put(key1, obj1);
//		map.addAll(map); unsupported -> todo
			assertEquals(1, map.size());

//		map.retainAll(map); unsupported -> todo
//		assertEquals(1, map.size());

			assertTrue(map.containsKey(key1));
			assertTrue(map.containsValue(obj1));

			map.clear();
			assertTrue(map.isEmpty());
		}

}