package mil.nga.giat.geowave.core.cli.prefix; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.junit.Test; import com.beust.jcommander.JCommander; import com.beust.jcommander.Parameter; import com.beust.jcommander.ParametersDelegate; import junit.framework.Assert; import mil.nga.giat.geowave.core.cli.annotations.PrefixParameter; public class JCommanderPrefixTranslatorTest { private JCommander prepareCommander( JCommanderTranslationMap map ) { JCommander commander = new JCommander(); map.createFacadeObjects(); for (Object obj : map.getObjects()) { commander.addObject(obj); } return commander; } @Test public void testNullDelegate() { JCommanderPrefixTranslator translator = new JCommanderPrefixTranslator(); translator.addObject(new NullDelegate()); JCommander commander = prepareCommander(translator.translate()); commander.parse(); } @Test public void testMapDelegatesPrefix() { JCommanderPrefixTranslator translator = new JCommanderPrefixTranslator(); Arguments args = new Arguments(); args.argChildren.put( "abc", new ArgumentChildren()); args.argChildren.put( "def", new ArgumentChildren()); translator.addObject(args); JCommanderTranslationMap map = translator.translate(); JCommander commander = prepareCommander(map); commander.parse( "--abc.arg", "5", "--def.arg", "blah"); map.transformToOriginal(); Assert.assertEquals( "5", args.argChildren.get("abc").arg); Assert.assertEquals( "blah", args.argChildren.get("def").arg); } @Test public void testCollectionDelegatesPrefix() { JCommanderPrefixTranslator translator = new JCommanderPrefixTranslator(); ArgumentsCollection args = new ArgumentsCollection(); args.argChildren.add(new ArgumentChildren()); args.argChildren.add(new ArgumentChildrenOther()); translator.addObject(args); JCommanderTranslationMap map = translator.translate(); JCommander commander = prepareCommander(map); commander.parse( "--arg", "5", "--arg2", "blah"); map.transformToOriginal(); Assert.assertEquals( "5", ((ArgumentChildren) args.argChildren.get(0)).arg); Assert.assertEquals( "blah", ((ArgumentChildrenOther) args.argChildren.get(1)).arg2); } @Test public void testPrefixParameter() { JCommanderPrefixTranslator translator = new JCommanderPrefixTranslator(); PrefixedArguments args = new PrefixedArguments(); translator.addObject(args); JCommanderTranslationMap map = translator.translate(); JCommander commander = prepareCommander(map); commander.parse( "--abc.arg", "5", "--arg", "blah"); map.transformToOriginal(); Assert.assertEquals( "5", args.child.arg); Assert.assertEquals( "blah", args.blah); } public static class PrefixedArguments { @ParametersDelegate @PrefixParameter(prefix = "abc") private ArgumentChildren child = new ArgumentChildren(); @Parameter(names = "--arg") private String blah; } public static class NullDelegate { @ParametersDelegate private ArgumentChildren value = null; } public static class ArgumentsCollection { @ParametersDelegate private List<Object> argChildren = new ArrayList<Object>(); } public static class Arguments { @ParametersDelegate private Map<String, ArgumentChildren> argChildren = new HashMap<String, ArgumentChildren>(); } public static class ArgumentChildren { @Parameter(names = "--arg") private String arg; } public static class ArgumentChildrenOther { @Parameter(names = "--arg2") private String arg2; } }