package net.varkhan.base.management.util;
import junit.framework.TestCase;
import net.varkhan.base.management.config.Configuration;
import net.varkhan.base.management.config.MapConfiguration;
import net.varkhan.base.management.config.SettableConfiguration;
import java.io.Reader;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.Iterator;
public class ConfigurationsTest extends TestCase {
public void testEnvironment() {
SettableConfiguration.Context ctx = Configurations.sysconf().context("environment");
assertTrue("PATH", ctx.has("PATH"));
assertTrue("PATH", null!=ctx.get("PATH"));
assertEquals("PATH",System.getenv("PATH"),ctx.get("PATH"));
assertEquals("var_does_not_exist", null, ctx.get("var_does_not_exist"));
assertTrue("var_does_not_exist",ctx.add("var_does_not_exist","foo_random_value"));
assertEquals("var_does_not_exist", "foo_random_value", ctx.get("var_does_not_exist"));
assertEquals("var_does_not_exist","foo_random_value",System.getenv("var_does_not_exist"));
}
public void testProperties() {
SettableConfiguration.Context ctx = Configurations.sysconf().context("properties");
assertTrue("PATH", ctx.has("java.version"));
assertTrue("PATH", null!=ctx.get("java.version"));
assertEquals("PATH",System.getProperty("java.version"),ctx.get("java.version"));
assertEquals("var_does_not_exist", null, ctx.get("var_does_not_exist"));
assertTrue("var_does_not_exist",ctx.add("var_does_not_exist","foo_random_value"));
assertEquals("var_does_not_exist", "foo_random_value", ctx.get("var_does_not_exist"));
assertEquals("var_does_not_exist","foo_random_value",System.getenv("var_does_not_exist"));
}
public void testLoadSave() throws Exception {
// Java really needs a heredoc notation
String cfgdata = ""
// empty line
+ "\n"
// no context defined, empty value
+ "foo.bar=\n"
// no context defined, leading spaces
+ "\t foo.baz=c0\n"
+ " # comment\n"
+ "foo.baz1=c0\n"
// Escaped, single line
+ "foo.\\=baz=\n"
// Not a comment
+ "\\#not.a.comment=\n"
// Escaped, double line
+ "foo.baz1=\\\n"
+ "\n"
// Escaped, triple line
+ "foo.baz2=\\\n"
+ "\\\n"
+ "doof\n"
+ "foo.baz3=c0\n"
// Context switch
+ "[dd]\n"
+ "foo.bar=c1\n"
+ "foo.baz1=c1\n"
+ "[] remaining text ignored\n"
+ "foo.baz3=c3\n"
+ "[dd]\n"
+ "foo.baz4=c4\n"
+ "[*]\n"
+ "foo.baz5=c5\n"
;
Reader r = new StringReader(cfgdata);
MapConfiguration cfg = new MapConfiguration();
Configurations.loadConfig(cfg,r);
Iterator<String> contexts=cfg.contexts().iterator();
assertTrue("has def context", contexts.hasNext());
assertEquals("def context is ''", "", contexts.next());
assertTrue("has +1 context", contexts.hasNext());
assertEquals("+1 context is 'dd'", "dd", contexts.next());
assertFalse("!has +2 context", contexts.hasNext());
assertEquals("*:foo.bar", "", cfg.get(null, "foo.bar"));
assertEquals("*:foo.baz", "c0", cfg.get(null, "foo.baz"));
assertEquals("*:foo.=baz", "", cfg.get(null, "foo.=baz"));
assertEquals("*:foo.baz1", "\n", cfg.get(null, "foo.baz1"));
assertEquals("*:foo.baz2", "\n\ndoof", cfg.get(null, "foo.baz2"));
assertEquals("*:foo.baz3", "c3", cfg.get(null, "foo.baz3"));
assertEquals("*:foo.baz5", "c5", cfg.get(null, "foo.baz5"));
assertEquals("dd:foo.bar", "c1", cfg.get("dd", "foo.bar"));
assertEquals("dd:foo.baz1", "c1", cfg.get("dd", "foo.baz1"));
assertEquals("dd:foo.baz4","c4",cfg.get("dd","foo.baz4"));
StringWriter w = new StringWriter();
Configurations.saveConfig(cfg,w);
assertEquals("cfg",""
+ "[]\n"
+ "\\#not.a.comment=\n"
+ "foo.bar=\n"
+ "foo.baz=c0\n"
+ "foo.baz2=\\\n"
+ "\\\n"
+ "doof\n"
+ "foo.baz3=c3\n"
+ "foo.baz1=\\\n"
+ "\n"
+ "foo.baz5=c5\n"
+ "foo.\\=baz=\n"
+ "\n"
+ "[dd]\n"
+ "foo.bar=c1\n"
+ "foo.baz4=c4\n"
+ "foo.baz1=c1\n"
+ "\n"
,w.toString());
}
}