package com.google.sitebricks.options; import com.google.inject.Guice; import org.testng.annotations.Test; import java.util.Properties; import java.util.ResourceBundle; /** * @author dhanji@gmail.com (Dhanji R. Prasanna) */ public class OptionsTest { @Test public final void testOptionsInterfaceFromCommandLine() { String[] commandLine = "--host=optimusprime --domain=http://sitebricks.info --otherSetting=twoForOne!1" .split("[ ]+"); MyOpts opts = Guice.createInjector(new OptionsModule(commandLine).options(MyOpts.class)) .getInstance(MyOpts.class); assert "optimusprime".equals(opts.host()); assert "http://sitebricks.info".equals(opts.domain()); assert "twoForOne!1".equals(opts.otherSetting()); } @Test public final void testOptionsInterfaceWithNamespaceFromCommandLine() { String[] commandLine = ("--sitebricks.host=optimusprime --sitebricks.domain=http://sitebricks.info" + " --sitebricks.otherSetting=twoForOne!1").split("[ ]+"); MyOpts2 opts = Guice.createInjector(new OptionsModule(commandLine).options(MyOpts2.class)) .getInstance(MyOpts2.class); assert "optimusprime".equals(opts.host()); assert "http://sitebricks.info".equals(opts.domain()); assert "twoForOne!1".equals(opts.otherSetting()); } @Test public final void testTypedOptionsInterfaceFromCommandLine() { String[] commandLine = ("--name=optimusprimer --score=0.8 --port=1034").split("[ ]+"); MyTypedOpts opts = Guice.createInjector(new OptionsModule(commandLine).options(MyTypedOpts.class)) .getInstance(MyTypedOpts.class); assert "optimusprimer".equals(opts.name()); assert new Double(0.8).equals(opts.score()); assert 1034 == opts.port(); } @Test public final void testTypedOptionsInterfaceWithNamespaceFromProperties() { Properties properties = new Properties(); properties.put("name", "optimusprimer"); properties.put("score", "0.7"); properties.put("port", "65535"); MyTypedOpts opts = Guice.createInjector(new OptionsModule(properties) .options(MyTypedOpts.class)) .getInstance(MyTypedOpts.class); assert "optimusprimer".equals(opts.name()); assert new Double(0.7).equals(opts.score()); assert 65535 == opts.port(); } @Test public final void testTypedOptionsInterfaceWithNamespaceFromPropertiesFile() { ResourceBundle bundle = ResourceBundle.getBundle(Options.class.getPackage().getName() + ".options"); MyTypedOpts opts = Guice.createInjector(new OptionsModule(bundle) .options(MyTypedOpts.class)) .getInstance(MyTypedOpts.class); assert "optimusprimer".equals(opts.name()); assert new Double(0.7).equals(opts.score()); assert 65534 == opts.port(); } @Test public final void testTypedOptionsAbstractClassWithNamespaceFromPropertiesFile() { ResourceBundle bundle = ResourceBundle.getBundle(Options.class.getPackage().getName() + ".options"); MyAbstractOpts opts = Guice.createInjector(new OptionsModule(bundle) .options(MyAbstractOpts.class)) .getInstance(MyAbstractOpts.class); assert "optimusprimer".equals(opts.name()); assert new Double(0.7).equals(opts.score()); assert 65534 == opts.port(); // Default overridden. assert 22 == opts.code(); // Default. } @Options public static interface MyOpts { String host(); String domain(); String otherSetting(); } @Options("sitebricks") public static interface MyOpts2 { String host(); String domain(); String otherSetting(); } @Options public static interface MyTypedOpts { String name(); Double score(); int port(); } @Options public static abstract class MyAbstractOpts { abstract String name(); abstract Double score(); int port() { return 22; } int code() { return 22; } } }