Index: lutinutil/src/test/org/codelutin/util/MyPropertiesTest.java
diff -u /dev/null lutinutil/src/test/org/codelutin/util/MyPropertiesTest.java:1.1
--- /dev/null Sun Dec 9 20:04:28 2007
+++ lutinutil/src/test/org/codelutin/util/MyPropertiesTest.java Sun Dec 9 20:04:23 2007
@@ -0,0 +1,337 @@
+package org.codelutin.util;
+
+import junit.framework.TestCase;
+import org.codelutin.i18n.I18n;
+import org.codelutin.util.MyPropertiesUtil.MyPropertyDef;
+import org.codelutin.util.MyPropertiesUtil.MyPropertyKey;
+
+import java.util.Properties;
+
+/**
+ * MyProperties Tester.
+ *
+ * @author chemit
+ * @version 1.0
+ * @since
12/08/2007
+ */
+public class MyPropertiesTest extends TestCase {
+ static {
+ // init I18N
+ I18n.init(System.getProperty("user.language"),
+ System.getProperty("user.country"));
+ }
+
+ enum MyPropertiesTestDef implements MyPropertyDef {
+ BOOLEAN("key.boolean", Boolean.class),
+ INTEGER("key.integer", Integer.class),
+ LONG("key.long", Long.class),
+ STRING("key.string", String.class),
+ MYKEY("key.mykey", MyPropertiesTestDef.class);
+
+ MyPropertiesTestDef(String key, Class type) {
+ MyPropertyKeyManager.registerKey(new MyPropertyKey(this, key, type));
+ }
+ }
+
+ enum MyPropertiesTestDef2 implements MyPropertyDef {
+ BOOLEAN("key2.boolean", Boolean.class),
+ INTEGER("key2.integer", Integer.class),
+ LONG("key2.long", Long.class),
+ FILE("key2.file", java.io.File.class),
+ STRING("key2.key2", MyPropertiesTestDef2.class),
+ MYKEY("key2.key2", MyPropertiesTestDef2.class);
+
+ MyPropertiesTestDef2(String key, Class type) {
+ try {
+ MyPropertyKeyManager.registerKey(new MyPropertyKey(this, key, type));
+ if (ordinal() == 5) {
+ // the key is duplicated, so we must not reach here
+ fail();
+ } else {
+ assertTrue(true);
+ }
+ } catch (IllegalArgumentException e) {
+ if (ordinal() == 5) {
+ // duplicate key
+ assertTrue(true);
+ } else {
+ fail();
+ }
+ }
+ }
+ }
+
+ enum MyPropertiesTestDef3 implements MyPropertyDef {
+ BOOLEAN("key2.boolean", Boolean.class),
+ INTEGER("key2.integer", Integer.class),
+ LONG("key2.long", Long.class),
+ FILE("key2.file", java.io.File.class),
+ STRING("key2.string", String.class),
+ MYKEY("key2.unknown", MyPropertyDef.class);
+
+ MyPropertiesTestDef3(String key, Class type) {
+ try {
+ MyPropertyKeyManager.registerKey(new MyPropertyKey(this, key, type));
+ if (ordinal() == 5) {
+ // no convertor found , so we must not reach here
+ fail();
+ } else {
+ assertTrue(true);
+ }
+ } catch (IllegalArgumentException e) {
+ if (ordinal() == 5) {
+ // no convertor found
+ assertTrue(true);
+ } else {
+ fail();
+ }
+ }
+ }
+ }
+
+ MyProperties properties;
+
+ Class> type;
+ String key;
+ Object val;
+ Object valDef;
+ int size;
+ int miss;
+
+ public void testRegisterKey() throws Exception {
+ MyPropertiesTestDef.values();
+ MyPropertiesTestDef2.values();
+ MyPropertiesTestDef3.values();
+ }
+
+ public void testConstructor() throws Exception {
+ properties = MyProperties.newInstance(MyPropertiesTestDef.class);
+
+ size = 0;
+ miss = MyPropertiesTestDef.values().length;
+
+ assertSize();
+
+ System.out.println(properties);
+
+ properties.clear();
+
+ }
+
+ public void testSetProperty() throws Exception {
+
+ properties = MyProperties.newInstance(MyPropertiesTestDef.class);
+ MyPropertiesTestDef[] testDefs = MyPropertiesTestDef.values();
+ size = 0;
+ miss = testDefs.length;
+
+ assertSize();
+
+ Object val;
+ Object valDef;
+ val = Boolean.FALSE;
+ valDef = Boolean.TRUE;
+
+ getKeyDatas(MyPropertiesTestDef.BOOLEAN, valDef);
+ assertKeyEntry("key.boolean", Boolean.class, null, valDef);
+ properties.setProperty(MyPropertiesTestDef.BOOLEAN, val);
+ getKeyDatas(MyPropertiesTestDef.BOOLEAN, valDef);
+ size++;
+ miss--;
+ assertKeyEntry("key.boolean", Boolean.class, val, val);
+
+ val = -100;
+ valDef = 10;
+ getKeyDatas(MyPropertiesTestDef.INTEGER, valDef);
+ assertKeyEntry("key.integer", Integer.class, null, valDef);
+ properties.setProperty(MyPropertiesTestDef.INTEGER, val);
+ getKeyDatas(MyPropertiesTestDef.INTEGER, valDef);
+ size++;
+ miss--;
+ assertKeyEntry("key.integer", Integer.class, val, val);
+
+ val = MyPropertiesTestDef.BOOLEAN;
+ valDef = MyPropertiesTestDef.STRING;
+ getKeyDatas(MyPropertiesTestDef.MYKEY, valDef);
+ assertKeyEntry("key.mykey", MyPropertiesTestDef.class, null, valDef);
+ properties.setProperty(MyPropertiesTestDef.MYKEY, val);
+ getKeyDatas(MyPropertiesTestDef.MYKEY, valDef);
+ size++;
+ miss--;
+ assertKeyEntry("key.mykey", MyPropertiesTestDef.class, val, val);
+
+ val = null;
+ getKeyDatas(MyPropertiesTestDef.MYKEY, valDef);
+ assertKeyEntry("key.mykey", MyPropertiesTestDef.class, MyPropertiesTestDef.BOOLEAN, MyPropertiesTestDef.BOOLEAN);
+ properties.setProperty(MyPropertiesTestDef.MYKEY, val);
+ getKeyDatas(MyPropertiesTestDef.MYKEY, valDef);
+ size--;
+ miss++;
+ assertKeyEntry("key.mykey", MyPropertiesTestDef.class, val, valDef);
+
+ val = 10;
+ //try {
+ properties.setProperty(MyPropertiesTestDef.MYKEY, val);
+ // fail();
+ //} catch (IllegalArgumentException e) {
+ // assertTrue(true);
+ //}
+ getKeyDatas(MyPropertiesTestDef.MYKEY, valDef);
+ assertKeyEntry("key.mykey", MyPropertiesTestDef.class, null, valDef);
+ System.out.println(properties);
+ }
+
+
+ public void testLoad() throws Exception {
+ properties = MyProperties.newInstance(MyPropertiesTestDef.class);
+ MyPropertiesTestDef[] testDefs = MyPropertiesTestDef.values();
+
+ Properties props = new Properties();
+ props.put("key.boolean", false);
+ props.put("key.string", "hello");
+ props.put("key.integer", -100);
+ props.put("key.long", (long) 1000);
+ props.put("key.mykey", MyPropertiesTestDef.BOOLEAN);
+
+ properties.load(props);
+
+ Object val;
+
+ size = 5;
+ miss = testDefs.length - 5;
+ val = Boolean.FALSE;
+ getKeyDatas(MyPropertiesTestDef.BOOLEAN, Boolean.TRUE);
+ assertKeyEntry("key.boolean", Boolean.class, val, val);
+
+ val = -100;
+ getKeyDatas(MyPropertiesTestDef.INTEGER, 10);
+ assertKeyEntry("key.integer", Integer.class, val, val);
+
+ val = (long) 1000;
+ getKeyDatas(MyPropertiesTestDef.LONG, 10);
+ assertKeyEntry("key.long", Long.class, val, val);
+
+ val = "hello";
+ getKeyDatas(MyPropertiesTestDef.STRING, "yo");
+ assertKeyEntry("key.string", String.class, val, val);
+
+ val = MyPropertiesTestDef.BOOLEAN;
+ getKeyDatas(MyPropertiesTestDef.MYKEY, MyPropertiesTestDef.STRING);
+ assertKeyEntry("key.mykey", MyPropertiesTestDef.class, val, val);
+
+ System.out.println(properties);
+
+ properties.clear();
+
+ size -= 5;
+ miss += 5;
+ assertSize();
+
+ props.put("key.integer", "200");
+ props.put("key.long", "2000");
+ props.put("key.boolean", "false");
+ properties.load(props);
+ size = 5;
+ miss -= 5;
+ assertSize();
+
+ val = 200;
+ getKeyDatas(MyPropertiesTestDef.INTEGER, 10);
+ assertKeyEntry("key.integer", Integer.class, val, val);
+
+ val = (long) 2000;
+ getKeyDatas(MyPropertiesTestDef.LONG, 10);
+ assertKeyEntry("key.long", Long.class, val, val);
+
+ val = false;
+ getKeyDatas(MyPropertiesTestDef.BOOLEAN, true);
+ assertKeyEntry("key.boolean", Boolean.class, val, val);
+
+ properties.clear();
+
+ props.put("key.mykey", 10);
+ properties.load(props);
+ System.out.println(properties);
+
+ size = 4;
+ miss = testDefs.length - 4;
+
+ assertSize();
+ assertEquals(1, properties.getUnsafeData().size());
+
+ val = Boolean.FALSE;
+ getKeyDatas(MyPropertiesTestDef.BOOLEAN, Boolean.TRUE);
+ assertKeyEntry("key.boolean", Boolean.class, val, val);
+
+ val = 200;
+ getKeyDatas(MyPropertiesTestDef.INTEGER, 10);
+ assertKeyEntry("key.integer", Integer.class, val, val);
+
+ val = (long) 2000;
+ getKeyDatas(MyPropertiesTestDef.LONG, 10);
+ assertKeyEntry("key.long", Long.class, val, val);
+
+ val = false;
+ getKeyDatas(MyPropertiesTestDef.BOOLEAN, true);
+ assertKeyEntry("key.boolean", Boolean.class, val, val);
+
+ val = "hello";
+ getKeyDatas(MyPropertiesTestDef.STRING, "yo");
+ assertKeyEntry("key.string", String.class, val, val);
+
+ val = null;
+ getKeyDatas(MyPropertiesTestDef.MYKEY, MyPropertiesTestDef.STRING);
+ assertKeyEntry("key.mykey", MyPropertiesTestDef.class, val, MyPropertiesTestDef.STRING);
+
+ properties.clear();
+
+ props.put("key.mykeyAZ", 10);
+ properties.load(props);
+ System.out.println(properties);
+
+ size = 4;
+ miss = testDefs.length - 4;
+ assertSize();
+ assertEquals(2, properties.getUnsafeData().size());
+
+ properties.clear();
+
+ props.put("key.mykey", 1);
+ properties.load(props);
+ System.out.println(properties);
+
+ size = 5;
+ miss = testDefs.length - 5;
+ assertSize();
+ assertEquals(1, properties.getUnsafeData().size());
+ val = MyPropertiesTestDef.INTEGER;
+ getKeyDatas(MyPropertiesTestDef.MYKEY, MyPropertiesTestDef.STRING);
+ assertKeyEntry("key.mykey", MyPropertiesTestDef.class, val, val);
+
+ System.out.println(properties);
+
+ }
+
+ private void assertKeyEntry(String key, Class> type, Object val, Object valDef) {
+ assertEquals(key, this.key);
+ assertTrue(type.isAssignableFrom(this.type));
+ assertEquals(val, this.val);
+ assertEquals(valDef, this.valDef);
+ assertSize();
+ }
+
+ private void assertSize() {
+ assertEquals(size == 0, properties.isEmpty());
+ assertEquals(miss == 0, properties.isFull());
+ assertEquals(size, properties.size());
+ assertEquals(size, properties.getKeys().size());
+ assertEquals(miss, properties.getMissingKeys().size());
+ }
+
+ private void getKeyDatas(MyPropertiesTestDef def, Object valDef) {
+ type = properties.getType(def);
+ key = properties.getKey(def);
+ val = properties.getProperty(def);
+ this.valDef = properties.getProperty(def, valDef);
+ }
+}