package com.mastfrog.settings; import com.google.inject.Inject; import com.google.inject.name.Named; import com.mastfrog.giulius.Dependencies; import com.mastfrog.giulius.DependenciesBuilder; import com.mastfrog.guicy.annotations.Defaults; import com.mastfrog.guicy.annotations.Namespace; import com.mastfrog.guicy.annotations.Value; import com.mastfrog.util.Streams; import java.io.InputStream; import java.util.List; import java.util.Properties; import static org.junit.Assert.*; import org.junit.Test; /** * * @author Tim Boudreau */ @Defaults(value = {"a=b", "b=a"}, location = AnnoTest.LOC) public class AnnoTest { public static final String LOC = "ms/glo/whoopie.foo"; @Test public void test() throws Throwable { InputStream[] ins = Streams.locate(LOC); assertNotNull(ins); assertEquals(1, ins.length); Properties p = new Properties(); p.load(ins[0]); assertEquals("b", p.getProperty("a")); assertEquals("a", p.getProperty("b")); Settings settings = new SettingsBuilder().add(LOC).build(); assertEquals("b", settings.getString("a")); assertEquals("a", settings.getString("b")); } @Test public void testNamespace() throws Exception { InputStream[] ins = Streams.locate(SettingsBuilder.DEFAULT_PATH + "generated-foo.properties"); assertNotNull(ins); assertEquals(1, ins.length); Properties p = new Properties(); for (InputStream i : ins) { p.load(i); i.close(); } assertEquals("you", p.getProperty("me")); ins = Streams.locate(SettingsBuilder.DEFAULT_PATH + "generated-ns1.properties"); assertNotNull(ins); assertEquals(1, ins.length); p.clear(); for (InputStream i : ins) { p.load(i); i.close(); } assertEquals("namespaced", p.getProperty("ns1prop")); Settings sb = new SettingsBuilder("foo").addDefaultsFromClasspath().addGeneratedDefaultsFromClasspath().build(); assertEquals("poodle", sb.getString("monkey")); DependenciesBuilder dp = Dependencies.builder().add(sb, "foo").addDefaultSettings(); System.out.println("BUILDER: \n" + dp); for (String ns : dp.namespaces()) { List<SettingsBuilder> l = dp.getSettings(ns); if (l == null) { System.out.println("NULL SETTINGS FOR " + ns); } else { System.out.println(" " + ns); for (SettingsBuilder s : l) { System.out.println(" " + s); } } } Dependencies deps = dp.build(); X x = deps.getInstance(X.class); assertNotNull(x); assertEquals("poodle", x.val); } @Test public void testValueBinding() throws Throwable { Y y = Dependencies.builder().addDefaultSettings().build().getInstance(Y.class); assertEquals("chicken", y.val); } @Namespace("foo") static class X { private final String val; @Inject X(@Named("monkey") String val) { this.val = val; } } static class Y { private final String val; @Inject Y(@Value(value = "robot", namespace = @Namespace("ns1")) String val) { this.val = val; } } }