Home » jakarta-jmeter-2.3.4_src » org.apache.commons » cli » avalon » [javadoc | source]

    1   /* 
    2    * Copyright 2002-2005 The Apache Software Foundation
    3    * Licensed  under the  Apache License,  Version 2.0  (the "License");
    4    * you may not use  this file  except in  compliance with the License.
    5    * You may obtain a copy of the License at 
    6    * 
    7    *   http://www.apache.org/licenses/LICENSE-2.0
    8    * 
    9    * Unless required by applicable law or agreed to in writing, software
   10    * distributed  under the  License is distributed on an "AS IS" BASIS,
   11    * WITHOUT  WARRANTIES OR CONDITIONS  OF ANY KIND, either  express  or
   12    * implied.
   13    * 
   14    * See the License for the specific language governing permissions and
   15    * limitations under the License.
   16    */
   17   package org.apache.commons.cli.avalon;
   18   
   19   // Renamed from org.apache.avalon.excalibur.cli
   20   
   21   import java.util.List;
   22   
   23   import junit.framework.TestCase;
   24   
   25   /**
   26    * 
   27    */
   28   public final class ClutilTestCase extends TestCase {
   29   	private static final String[] ARGLIST1 = new String[] { "--you", "are", "--all", "-cler", "kid" };
   30   
   31   	private static final String[] ARGLIST2 = new String[] { "-Dstupid=idiot", "are", "--all", "here", "-d" };
   32   
   33   	private static final String[] ARGLIST3 = new String[] {
   34   	// duplicates
   35   			"-Dstupid=idiot", "are", "--all", "--all", "here" };
   36   
   37   	private static final String[] ARGLIST4 = new String[] {
   38   	// incompatable (blee/all)
   39   			"-Dstupid", "idiot", "are", "--all", "--blee", "here" };
   40   
   41   	private static final String[] ARGLIST5 = new String[] { "-f", "myfile.txt" };
   42   
   43   	private static final int DEFINE_OPT = 'D';
   44   
   45   	private static final int CASE_CHECK_OPT = 'd';
   46   
   47   	private static final int YOU_OPT = 'y';
   48   
   49   	private static final int ALL_OPT = 'a';
   50   
   51   	private static final int CLEAR1_OPT = 'c';
   52   
   53   	private static final int CLEAR2_OPT = 'l';
   54   
   55   	private static final int CLEAR3_OPT = 'e';
   56   
   57   	private static final int CLEAR5_OPT = 'r';
   58   
   59   	private static final int BLEE_OPT = 'b';
   60   
   61   	private static final int FILE_OPT = 'f';
   62   
   63   	private static final int TAINT_OPT = 'T';
   64   
   65   	private static final CLOptionDescriptor DEFINE = new CLOptionDescriptor("define",
   66   			CLOptionDescriptor.ARGUMENTS_REQUIRED_2, DEFINE_OPT, "define");
   67   
   68   	private static final CLOptionDescriptor DEFINE_MANY = new CLOptionDescriptor("define",
   69   			CLOptionDescriptor.ARGUMENTS_REQUIRED_2 | CLOptionDescriptor.DUPLICATES_ALLOWED, DEFINE_OPT, "define");
   70   
   71   	private static final CLOptionDescriptor CASE_CHECK = new CLOptionDescriptor("charCheck",
   72   			CLOptionDescriptor.ARGUMENT_DISALLOWED, CASE_CHECK_OPT, "check character case sensitivity");
   73   
   74   	private static final CLOptionDescriptor YOU = new CLOptionDescriptor("you", CLOptionDescriptor.ARGUMENT_DISALLOWED,
   75   			YOU_OPT, "you");
   76   
   77   	private static final CLOptionDescriptor CLEAR1 = new CLOptionDescriptor("c",
   78   			CLOptionDescriptor.ARGUMENT_DISALLOWED, CLEAR1_OPT, "c");
   79   
   80   	private static final CLOptionDescriptor CLEAR2 = new CLOptionDescriptor("l",
   81   			CLOptionDescriptor.ARGUMENT_DISALLOWED, CLEAR2_OPT, "l");
   82   
   83   	private static final CLOptionDescriptor CLEAR3 = new CLOptionDescriptor("e",
   84   			CLOptionDescriptor.ARGUMENT_DISALLOWED, CLEAR3_OPT, "e");
   85   
   86   	private static final CLOptionDescriptor CLEAR5 = new CLOptionDescriptor("r",
   87   			CLOptionDescriptor.ARGUMENT_DISALLOWED, CLEAR5_OPT, "r");
   88   
   89   	private static final CLOptionDescriptor BLEE = new CLOptionDescriptor("blee",
   90   			CLOptionDescriptor.ARGUMENT_DISALLOWED, BLEE_OPT, "blee");
   91   
   92   	private static final CLOptionDescriptor ALL = new CLOptionDescriptor("all", CLOptionDescriptor.ARGUMENT_DISALLOWED,
   93   			ALL_OPT, "all", new CLOptionDescriptor[] { BLEE });
   94   
   95   	private static final CLOptionDescriptor FILE = new CLOptionDescriptor("file", CLOptionDescriptor.ARGUMENT_REQUIRED,
   96   			FILE_OPT, "the build file.");
   97   
   98   	private static final CLOptionDescriptor TAINT = new CLOptionDescriptor("taint",
   99   			CLOptionDescriptor.ARGUMENT_OPTIONAL, TAINT_OPT, "turn on tainting checks (optional level).");
  100   
  101   	public ClutilTestCase() {
  102   		this("Command Line Interpreter Test Case");
  103   	}
  104   
  105   	public ClutilTestCase(String name) {
  106   		super(name);
  107   	}
  108   
  109   	public void testOptionalArgWithSpace() {
  110   		final CLOptionDescriptor[] options = new CLOptionDescriptor[] { ALL, TAINT };
  111   
  112   		final String[] args = new String[] { "-T", "param", "-a" };
  113   
  114   		final CLArgsParser parser = new CLArgsParser(args, options);
  115   
  116   		assertNull(parser.getErrorString(), parser.getErrorString());
  117   
  118   		final List clOptions = parser.getArguments();
  119   		final int size = clOptions.size();
  120   
  121   		assertEquals("Option count", 3, size);
  122   
  123   		final CLOption option0 = (CLOption) clOptions.get(0);
  124   		assertEquals("Option Code: " + option0.getDescriptor().getId(), TAINT_OPT, option0.getDescriptor().getId());
  125   		assertEquals("Option Arg: " + option0.getArgument(0), null, option0.getArgument(0));
  126   
  127   		final CLOption option1 = (CLOption) clOptions.get(1);
  128   		assertEquals(option1.getDescriptor().getId(), CLOption.TEXT_ARGUMENT);
  129   		assertEquals(option1.getArgument(0), "param");
  130   
  131   		final CLOption option2 = (CLOption) clOptions.get(2);
  132   		assertEquals(option2.getDescriptor().getId(), ALL_OPT);
  133   		assertEquals(option2.getArgument(0), null);
  134   	}
  135   
  136   	public void testOptionalArgLong() {
  137   		final CLOptionDescriptor[] options = new CLOptionDescriptor[] { ALL, TAINT };
  138   
  139   		// Check that optional args work woth long options
  140   		final String[] args = new String[] { "--taint", "param", "-a" };
  141   
  142   		final CLArgsParser parser = new CLArgsParser(args, options);
  143   
  144   		assertNull(parser.getErrorString(), parser.getErrorString());
  145   
  146   		final List clOptions = parser.getArguments();
  147   		final int size = clOptions.size();
  148   
  149   		assertEquals("Option count", 3, size);
  150   
  151   		final CLOption option0 = (CLOption) clOptions.get(0);
  152   		assertEquals("Option Code: " + option0.getDescriptor().getId(), TAINT_OPT, option0.getDescriptor().getId());
  153   		assertEquals("Option Arg: " + option0.getArgument(0), null, option0.getArgument(0));
  154   
  155   		final CLOption option1 = (CLOption) clOptions.get(1);
  156   		assertEquals(CLOption.TEXT_ARGUMENT, option1.getDescriptor().getId());
  157   		assertEquals("param", option1.getArgument(0));
  158   
  159   		final CLOption option2 = (CLOption) clOptions.get(2);
  160   		assertEquals(option2.getDescriptor().getId(), ALL_OPT);
  161   		assertEquals(option2.getArgument(0), null);
  162   	}
  163   
  164   	public void testShortOptArgUnenteredBeforeOtherOpt() {
  165   		final CLOptionDescriptor[] options = new CLOptionDescriptor[] { ALL, TAINT };
  166   
  167   		final String[] args = new String[] { "-T", "-a" };
  168   
  169   		final CLArgsParser parser = new CLArgsParser(args, options);
  170   
  171   		assertNull(parser.getErrorString(), parser.getErrorString());
  172   
  173   		final List clOptions = parser.getArguments();
  174   		final int size = clOptions.size();
  175   
  176   		assertEquals("Option count", 2, size);
  177   
  178   		final CLOption option0 = (CLOption) clOptions.get(0);
  179   		assertEquals("Option Code: " + option0.getDescriptor().getId(), TAINT_OPT, option0.getDescriptor().getId());
  180   		assertEquals("Option Arg: " + option0.getArgument(0), null, option0.getArgument(0));
  181   
  182   		final CLOption option1 = (CLOption) clOptions.get(1);
  183   		assertEquals(option1.getDescriptor().getId(), ALL_OPT);
  184   		assertEquals(option1.getArgument(0), null);
  185   	}
  186   
  187   	public void testOptionalArgsWithArgShortBeforeOtherOpt() {
  188   		// "-T3","-a"
  189   		final CLOptionDescriptor[] options = new CLOptionDescriptor[] { ALL, TAINT };
  190   
  191   		final String[] args = new String[] { "-T3", "-a" };
  192   
  193   		// System.out.println("[before parsing]");
  194   
  195   		final CLArgsParser parser = new CLArgsParser(args, options);
  196   
  197   		// System.out.println("[after parsing]");
  198   
  199   		assertNull(parser.getErrorString(), parser.getErrorString());
  200   
  201   		final List clOptions = parser.getArguments();
  202   		final int size = clOptions.size();
  203   
  204   		assertEquals(size, 2);
  205   		final CLOption option0 = (CLOption) clOptions.get(0);
  206   		assertEquals(option0.getDescriptor().getId(), TAINT_OPT);
  207   		assertEquals(option0.getArgument(0), "3");
  208   
  209   		final CLOption option1 = (CLOption) clOptions.get(1);
  210   		assertEquals(ALL_OPT, option1.getDescriptor().getId());
  211   		assertEquals(null, option1.getArgument(0));
  212   	}
  213   
  214   	public void testOptionalArgsNoArgShortBeforeOtherOpt() {
  215   		// "-T","-a"
  216   		final CLOptionDescriptor[] options = new CLOptionDescriptor[] { ALL, TAINT };
  217   
  218   		final String[] args = new String[] { "-T", "-a" };
  219   
  220   		// System.out.println("[before parsing]");
  221   		final CLArgsParser parser = new CLArgsParser(args, options);
  222   
  223   		// System.out.println("[after parsing]");
  224   
  225   		assertNull(parser.getErrorString(), parser.getErrorString());
  226   
  227   		final List clOptions = parser.getArguments();
  228   		final int size = clOptions.size();
  229   
  230   		assertEquals(size, 2);
  231   		final CLOption option0 = (CLOption) clOptions.get(0);
  232   		assertEquals(TAINT_OPT, option0.getDescriptor().getId());
  233   		assertEquals(null, option0.getArgument(0));
  234   
  235   		final CLOption option1 = (CLOption) clOptions.get(1);
  236   		assertEquals(ALL_OPT, option1.getDescriptor().getId());
  237   		assertEquals(null, option1.getArgument(0));
  238   	}
  239   
  240   	public void testFullParse() {
  241   		final CLOptionDescriptor[] options = new CLOptionDescriptor[] { YOU, ALL, CLEAR1, CLEAR2, CLEAR3, CLEAR5 };
  242   
  243   		final CLArgsParser parser = new CLArgsParser(ARGLIST1, options);
  244   
  245   		assertNull(parser.getErrorString(), parser.getErrorString());
  246   
  247   		final List clOptions = parser.getArguments();
  248   		final int size = clOptions.size();
  249   
  250   		assertEquals(size, 8);
  251   		assertEquals(((CLOption) clOptions.get(0)).getDescriptor().getId(), YOU_OPT);
  252   		assertEquals(((CLOption) clOptions.get(1)).getDescriptor().getId(), 0);
  253   		assertEquals(((CLOption) clOptions.get(2)).getDescriptor().getId(), ALL_OPT);
  254   		assertEquals(((CLOption) clOptions.get(3)).getDescriptor().getId(), CLEAR1_OPT);
  255   		assertEquals(((CLOption) clOptions.get(4)).getDescriptor().getId(), CLEAR2_OPT);
  256   		assertEquals(((CLOption) clOptions.get(5)).getDescriptor().getId(), CLEAR3_OPT);
  257   		assertEquals(((CLOption) clOptions.get(6)).getDescriptor().getId(), CLEAR5_OPT);
  258   		assertEquals(((CLOption) clOptions.get(7)).getDescriptor().getId(), 0);
  259   	}
  260   
  261   	public void testDuplicateOptions() {
  262   		// "-Dstupid=idiot","are","--all","--all","here"
  263   		final CLOptionDescriptor[] options = new CLOptionDescriptor[] { DEFINE, ALL, CLEAR1 };
  264   
  265   		final CLArgsParser parser = new CLArgsParser(ARGLIST3, options);
  266   
  267   		assertNull(parser.getErrorString(), parser.getErrorString());
  268   
  269   		final List clOptions = parser.getArguments();
  270   		final int size = clOptions.size();
  271   
  272   		assertEquals(size, 5);
  273   		assertEquals(((CLOption) clOptions.get(0)).getDescriptor().getId(), DEFINE_OPT);
  274   		assertEquals(((CLOption) clOptions.get(1)).getDescriptor().getId(), 0);
  275   		assertEquals(((CLOption) clOptions.get(2)).getDescriptor().getId(), ALL_OPT);
  276   		assertEquals(((CLOption) clOptions.get(3)).getDescriptor().getId(), ALL_OPT);
  277   		assertEquals(((CLOption) clOptions.get(4)).getDescriptor().getId(), 0);
  278   	}
  279   
  280   	public void testIncompatableOptions() {
  281   		final CLOptionDescriptor[] options = new CLOptionDescriptor[] { DEFINE, ALL, CLEAR1, BLEE };
  282   
  283   		final CLArgsParser parser = new CLArgsParser(ARGLIST4, options);
  284   
  285   		assertNotNull(parser.getErrorString());
  286   
  287   		final List clOptions = parser.getArguments();
  288   		final int size = clOptions.size();
  289   
  290   		assertEquals(size, 5);
  291   		assertEquals(((CLOption) clOptions.get(0)).getDescriptor().getId(), DEFINE_OPT);
  292   		assertEquals(((CLOption) clOptions.get(1)).getDescriptor().getId(), 0);
  293   		assertEquals(((CLOption) clOptions.get(2)).getDescriptor().getId(), ALL_OPT);
  294   		assertEquals(((CLOption) clOptions.get(3)).getDescriptor().getId(), BLEE_OPT);
  295   		assertEquals(((CLOption) clOptions.get(4)).getDescriptor().getId(), 0);
  296   	}
  297   
  298   	public void testSingleArg() {
  299   		final CLOptionDescriptor[] options = new CLOptionDescriptor[] { FILE };
  300   
  301   		final CLArgsParser parser = new CLArgsParser(ARGLIST5, options);
  302   
  303   		assertNull(parser.getErrorString(), parser.getErrorString());
  304   
  305   		final List clOptions = parser.getArguments();
  306   		final int size = clOptions.size();
  307   
  308   		assertEquals(size, 1);
  309   		assertEquals(((CLOption) clOptions.get(0)).getDescriptor().getId(), FILE_OPT);
  310   		assertEquals(((CLOption) clOptions.get(0)).getArgument(), "myfile.txt");
  311   	}
  312   
  313   	public void testSingleArg2() {
  314   		final CLOptionDescriptor[] options = new CLOptionDescriptor[] { FILE };
  315   
  316   		final CLArgsParser parser = new CLArgsParser(new String[] { "-f-=,=-" } // Check
  317   																				// delimiters
  318   																				// are
  319   																				// allowed
  320   				, options);
  321   
  322   		assertNull(parser.getErrorString(), parser.getErrorString());
  323   
  324   		final List clOptions = parser.getArguments();
  325   		final int size = clOptions.size();
  326   
  327   		assertEquals(1, size);
  328   		assertEquals(FILE_OPT, ((CLOption) clOptions.get(0)).getDescriptor().getId());
  329   		assertEquals("-=,=-", ((CLOption) clOptions.get(0)).getArgument());
  330   	}
  331   
  332   	public void testSingleArg3() {
  333   		final CLOptionDescriptor[] options = new CLOptionDescriptor[] { FILE };
  334   
  335   		final CLArgsParser parser = new CLArgsParser(new String[] { "--file=-=,-" } // Check
  336   																					// delimiters
  337   																					// are
  338   																					// allowed
  339   				, options);
  340   
  341   		assertNull(parser.getErrorString(), parser.getErrorString());
  342   
  343   		final List clOptions = parser.getArguments();
  344   		final int size = clOptions.size();
  345   
  346   		assertEquals(1, size);
  347   		assertEquals(FILE_OPT, ((CLOption) clOptions.get(0)).getDescriptor().getId());
  348   		assertEquals("-=,-", ((CLOption) clOptions.get(0)).getArgument());
  349   	}
  350   
  351   	public void testSingleArg4() {
  352   		final CLOptionDescriptor[] options = new CLOptionDescriptor[] { FILE };
  353   
  354   		final CLArgsParser parser = new CLArgsParser(new String[] { "--file", "myfile.txt" }, options);
  355   
  356   		assertNull(parser.getErrorString(), parser.getErrorString());
  357   
  358   		final List clOptions = parser.getArguments();
  359   		final int size = clOptions.size();
  360   
  361   		assertEquals(1, size);
  362   		assertEquals(FILE_OPT, ((CLOption) clOptions.get(0)).getDescriptor().getId());
  363   		assertEquals("myfile.txt", ((CLOption) clOptions.get(0)).getArgument());
  364   	}
  365   
  366   	public void testSingleArg5() {
  367   		final CLOptionDescriptor[] options = new CLOptionDescriptor[] { FILE };
  368   
  369   		final CLArgsParser parser = new CLArgsParser(new String[] { "-f", "myfile.txt" }, options);
  370   
  371   		assertNull(parser.getErrorString(), parser.getErrorString());
  372   
  373   		final List clOptions = parser.getArguments();
  374   		final int size = clOptions.size();
  375   
  376   		assertEquals(1, size);
  377   		assertEquals(FILE_OPT, ((CLOption) clOptions.get(0)).getDescriptor().getId());
  378   		assertEquals("myfile.txt", ((CLOption) clOptions.get(0)).getArgument());
  379   	}
  380   
  381   	public void testSingleArg6() {
  382   		final CLOptionDescriptor[] options = new CLOptionDescriptor[] { FILE };
  383   
  384   		final CLArgsParser parser = new CLArgsParser(new String[] { "-f", "-=-" }, options);
  385   
  386   		assertNull(parser.getErrorString(), parser.getErrorString());
  387   
  388   		final List clOptions = parser.getArguments();
  389   		final int size = clOptions.size();
  390   
  391   		assertEquals(1, size);
  392   		assertEquals(FILE_OPT, ((CLOption) clOptions.get(0)).getDescriptor().getId());
  393   		assertEquals("-=-", ((CLOption) clOptions.get(0)).getArgument());
  394   	}
  395   
  396   	public void testSingleArg7() {
  397   		final CLOptionDescriptor[] options = new CLOptionDescriptor[] { FILE };
  398   
  399   		final CLArgsParser parser = new CLArgsParser(new String[] { "--file=-=-" }, options);
  400   
  401   		assertNull(parser.getErrorString(), parser.getErrorString());
  402   
  403   		final List clOptions = parser.getArguments();
  404   		final int size = clOptions.size();
  405   
  406   		assertEquals(1, size);
  407   		assertEquals(FILE_OPT, ((CLOption) clOptions.get(0)).getDescriptor().getId());
  408   		assertEquals("-=-", ((CLOption) clOptions.get(0)).getArgument());
  409   	}
  410   
  411   	public void testSingleArg8() {
  412   		final CLOptionDescriptor[] options = new CLOptionDescriptor[] { FILE };
  413   
  414   		final CLArgsParser parser = new CLArgsParser(new String[] { "--file", "-=-" }, options);
  415   
  416   		assertNull(parser.getErrorString(), parser.getErrorString());
  417   
  418   		final List clOptions = parser.getArguments();
  419   		final int size = clOptions.size();
  420   
  421   		assertEquals(1, size);
  422   		assertEquals(FILE_OPT, ((CLOption) clOptions.get(0)).getDescriptor().getId());
  423   		assertEquals("-=-", ((CLOption) clOptions.get(0)).getArgument());
  424   	}
  425   
  426   	public void testSingleArg9() {
  427   		final CLOptionDescriptor[] options = new CLOptionDescriptor[] { FILE };
  428   
  429   		final CLArgsParser parser = new CLArgsParser(new String[] { "--file", "-=-" }, options);
  430   
  431   		assertNull(parser.getErrorString(), parser.getErrorString());
  432   
  433   		final List clOptions = parser.getArguments();
  434   		final int size = clOptions.size();
  435   
  436   		assertEquals(1, size);
  437   		assertEquals(FILE_OPT, ((CLOption) clOptions.get(0)).getDescriptor().getId());
  438   		assertEquals("-=-", ((CLOption) clOptions.get(0)).getArgument());
  439   	}
  440   
  441   	public void testCombinedArgs1() {
  442   		final CLOptionDescriptor[] options = new CLOptionDescriptor[] { BLEE, TAINT };
  443   
  444   		final CLArgsParser parser = new CLArgsParser(new String[] { "-bT", "rest" }, options);
  445   
  446   		assertNull(parser.getErrorString(), parser.getErrorString());
  447   
  448   		final List clOptions = parser.getArguments();
  449   		final int size = clOptions.size();
  450   		assertEquals(3, size);
  451   		assertEquals(BLEE_OPT, ((CLOption) clOptions.get(0)).getDescriptor().getId());
  452   		assertEquals(TAINT_OPT, ((CLOption) clOptions.get(1)).getDescriptor().getId());
  453   		assertEquals(0, ((CLOption) clOptions.get(2)).getDescriptor().getId());
  454   		assertEquals("rest", ((CLOption) clOptions.get(2)).getArgument());
  455   	}
  456   
  457   	public void testCombinedArgs2() {
  458   		final CLOptionDescriptor[] options = new CLOptionDescriptor[] { BLEE, TAINT, FILE };
  459   
  460   		final CLArgsParser parser = new CLArgsParser(new String[] { "-bT", "-fa" }, options);
  461   
  462   		assertNull(parser.getErrorString(), parser.getErrorString());
  463   
  464   		final List clOptions = parser.getArguments();
  465   		final int size = clOptions.size();
  466   		assertEquals(3, size);
  467   		assertEquals(BLEE_OPT, ((CLOption) clOptions.get(0)).getDescriptor().getId());
  468   		assertEquals(TAINT_OPT, ((CLOption) clOptions.get(1)).getDescriptor().getId());
  469   		assertEquals(FILE_OPT, ((CLOption) clOptions.get(2)).getDescriptor().getId());
  470   		assertEquals("a", ((CLOption) clOptions.get(2)).getArgument());
  471   	}
  472   
  473   	public void testCombinedArgs3() {
  474   		final CLOptionDescriptor[] options = new CLOptionDescriptor[] { BLEE, TAINT, FILE };
  475   
  476   		final CLArgsParser parser = new CLArgsParser(new String[] { "-bT", "--", "-fa" }// Should
  477   																						// not
  478   																						// detect
  479   																						// trailing
  480   																						// option
  481   				, options);
  482   
  483   		assertNull(parser.getErrorString(), parser.getErrorString());
  484   
  485   		final List clOptions = parser.getArguments();
  486   		final int size = clOptions.size();
  487   		assertEquals(3, size);
  488   		assertEquals(BLEE_OPT, ((CLOption) clOptions.get(0)).getDescriptor().getId());
  489   		assertEquals(TAINT_OPT, ((CLOption) clOptions.get(1)).getDescriptor().getId());
  490   		assertEquals(0, ((CLOption) clOptions.get(2)).getDescriptor().getId());
  491   		assertEquals("-fa", ((CLOption) clOptions.get(2)).getArgument());
  492   	}
  493   
  494   	public void testCombinedArgs4() {
  495   		final CLOptionDescriptor[] options = new CLOptionDescriptor[] { BLEE, TAINT, FILE };
  496   
  497   		final CLArgsParser parser = new CLArgsParser(new String[] { "-bT", "rest", "-fa" } // should
  498   																							// detect
  499   																							// trailing
  500   																							// option
  501   				, options);
  502   
  503   		assertNull(parser.getErrorString(), parser.getErrorString());
  504   
  505   		final List clOptions = parser.getArguments();
  506   		final int size = clOptions.size();
  507   		assertEquals(4, size);
  508   		assertEquals(BLEE_OPT, ((CLOption) clOptions.get(0)).getDescriptor().getId());
  509   		assertEquals(TAINT_OPT, ((CLOption) clOptions.get(1)).getDescriptor().getId());
  510   		assertEquals(0, ((CLOption) clOptions.get(2)).getDescriptor().getId());
  511   		assertEquals("rest", ((CLOption) clOptions.get(2)).getArgument());
  512   		assertEquals(FILE_OPT, ((CLOption) clOptions.get(3)).getDescriptor().getId());
  513   		assertEquals("a", ((CLOption) clOptions.get(3)).getArgument());
  514   	}
  515   
  516   	public void test2ArgsParse() {
  517   		// "-Dstupid=idiot","are","--all","here"
  518   		final CLOptionDescriptor[] options = new CLOptionDescriptor[] { DEFINE, ALL, CLEAR1, CASE_CHECK };
  519   
  520   		final CLArgsParser parser = new CLArgsParser(ARGLIST2, options);
  521   
  522   		assertNull(parser.getErrorString(), parser.getErrorString());
  523   
  524   		final List clOptions = parser.getArguments();
  525   		final int size = clOptions.size();
  526   
  527   		assertEquals(size, 5);
  528   		assertEquals(((CLOption) clOptions.get(0)).getDescriptor().getId(), DEFINE_OPT);
  529   		assertEquals(((CLOption) clOptions.get(1)).getDescriptor().getId(), 0);
  530   		assertEquals(((CLOption) clOptions.get(2)).getDescriptor().getId(), ALL_OPT);
  531   		assertEquals(((CLOption) clOptions.get(3)).getDescriptor().getId(), 0);
  532   		assertEquals(((CLOption) clOptions.get(4)).getDescriptor().getId(), CASE_CHECK_OPT);
  533   
  534   		final CLOption option = (CLOption) clOptions.get(0);
  535   		assertEquals("stupid", option.getArgument(0));
  536   		assertEquals("idiot", option.getArgument(1));
  537   	}
  538   
  539   	public void test2ArgsParse2() {
  540   		final CLOptionDescriptor[] options = new CLOptionDescriptor[] { DEFINE };
  541   
  542   		final CLArgsParser parser = new CLArgsParser(new String[] { "--define", "a-b,c=d-e,f" }, // Check
  543   																									// "-"
  544   																									// is
  545   																									// allowed
  546   																									// in
  547   																									// arg2
  548   				options);
  549   
  550   		assertNull(parser.getErrorString(), parser.getErrorString());
  551   
  552   		final List clOptions = parser.getArguments();
  553   		final int size = clOptions.size();
  554   
  555   		assertEquals(1, size);
  556   		assertEquals(DEFINE_OPT, ((CLOption) clOptions.get(0)).getDescriptor().getId());
  557   
  558   		final CLOption option = (CLOption) clOptions.get(0);
  559   		assertEquals("a-b,c", option.getArgument(0));
  560   		assertEquals("d-e,f", option.getArgument(1));
  561   	}
  562   
  563   	public void test2ArgsParse3() {
  564   		final CLOptionDescriptor[] options = new CLOptionDescriptor[] { DEFINE };
  565   
  566   		final CLArgsParser parser = new CLArgsParser(new String[] { "-D", "A-b,c", "G-e,f" }, options);
  567   
  568   		assertNull(parser.getErrorString(), parser.getErrorString());
  569   
  570   		final List clOptions = parser.getArguments();
  571   		final int size = clOptions.size();
  572   
  573   		assertEquals(1, size);
  574   		assertEquals(DEFINE_OPT, ((CLOption) clOptions.get(0)).getDescriptor().getId());
  575   
  576   		final CLOption option = (CLOption) clOptions.get(0);
  577   		assertEquals("A-b,c", option.getArgument(0));
  578   		assertEquals("G-e,f", option.getArgument(1));
  579   	}
  580   
  581   	public void test2ArgsParse4() {
  582   		final CLOptionDescriptor[] options = new CLOptionDescriptor[] { DEFINE_MANY };
  583   
  584   		final CLArgsParser parser = new CLArgsParser(new String[] { "-Dval1=-1", "-D", "val2=-2", "--define=val-3=-3",
  585   				"--define", "val4-=-4" }, options);
  586   
  587   		assertNull(parser.getErrorString(), parser.getErrorString());
  588   
  589   		final List clOptions = parser.getArguments();
  590   		final int size = clOptions.size();
  591   
  592   		assertEquals(4, size);
  593   		for (int i = 0; i < size; i++) {
  594   			assertEquals(DEFINE_OPT, ((CLOption) clOptions.get(i)).getDescriptor().getId());
  595   		}
  596   
  597   		CLOption option;
  598   		option = (CLOption) clOptions.get(0);
  599   		assertEquals("val1", option.getArgument(0));
  600   		assertEquals("-1", option.getArgument(1));
  601   
  602   		option = (CLOption) clOptions.get(1);
  603   		assertEquals("val2", option.getArgument(0));
  604   		assertEquals("-2", option.getArgument(1));
  605   
  606   		option = (CLOption) clOptions.get(2);
  607   		assertEquals("val-3", option.getArgument(0));
  608   		assertEquals("-3", option.getArgument(1));
  609   
  610   		option = (CLOption) clOptions.get(3);
  611   		assertEquals("val4-", option.getArgument(0));
  612   		assertEquals("-4", option.getArgument(1));
  613   	}
  614   
  615   	public void testPartParse() {
  616   		final CLOptionDescriptor[] options = new CLOptionDescriptor[] { YOU };
  617   
  618   		final ParserControl control = new AbstractParserControl() {
  619   			public boolean isFinished(int lastOptionCode) {
  620   				return (lastOptionCode == YOU_OPT);
  621   			}
  622   		};
  623   
  624   		final CLArgsParser parser = new CLArgsParser(ARGLIST1, options, control);
  625   
  626   		assertNull(parser.getErrorString(), parser.getErrorString());
  627   
  628   		final List clOptions = parser.getArguments();
  629   		final int size = clOptions.size();
  630   
  631   		assertEquals(size, 1);
  632   		assertEquals(((CLOption) clOptions.get(0)).getDescriptor().getId(), YOU_OPT);
  633   	}
  634   
  635   	public void test2PartParse() {
  636   		final CLOptionDescriptor[] options1 = new CLOptionDescriptor[] { YOU };
  637   
  638   		final CLOptionDescriptor[] options2 = new CLOptionDescriptor[] { ALL, CLEAR1, CLEAR2, CLEAR3, CLEAR5 };
  639   
  640   		final ParserControl control1 = new AbstractParserControl() {
  641   			public boolean isFinished(int lastOptionCode) {
  642   				return (lastOptionCode == YOU_OPT);
  643   			}
  644   		};
  645   
  646   		final CLArgsParser parser1 = new CLArgsParser(ARGLIST1, options1, control1);
  647   
  648   		assertNull(parser1.getErrorString(), parser1.getErrorString());
  649   
  650   		final List clOptions1 = parser1.getArguments();
  651   		final int size1 = clOptions1.size();
  652   
  653   		assertEquals(size1, 1);
  654   		assertEquals(((CLOption) clOptions1.get(0)).getDescriptor().getId(), YOU_OPT);
  655   
  656   		final CLArgsParser parser2 = new CLArgsParser(parser1.getUnparsedArgs(), options2);
  657   
  658   		assertNull(parser2.getErrorString(), parser2.getErrorString());
  659   
  660   		final List clOptions2 = parser2.getArguments();
  661   		final int size2 = clOptions2.size();
  662   
  663   		assertEquals(size2, 7);
  664   		assertEquals(((CLOption) clOptions2.get(0)).getDescriptor().getId(), 0);
  665   		assertEquals(((CLOption) clOptions2.get(1)).getDescriptor().getId(), ALL_OPT);
  666   		assertEquals(((CLOption) clOptions2.get(2)).getDescriptor().getId(), CLEAR1_OPT);
  667   		assertEquals(((CLOption) clOptions2.get(3)).getDescriptor().getId(), CLEAR2_OPT);
  668   		assertEquals(((CLOption) clOptions2.get(4)).getDescriptor().getId(), CLEAR3_OPT);
  669   		assertEquals(((CLOption) clOptions2.get(5)).getDescriptor().getId(), CLEAR5_OPT);
  670   		assertEquals(((CLOption) clOptions2.get(6)).getDescriptor().getId(), 0);
  671   	}
  672   
  673   	public void test2PartPartialParse() {
  674   		final CLOptionDescriptor[] options1 = new CLOptionDescriptor[] { YOU, ALL, CLEAR1 };
  675   
  676   		final CLOptionDescriptor[] options2 = new CLOptionDescriptor[] {};
  677   
  678   		final ParserControl control1 = new AbstractParserControl() {
  679   			public boolean isFinished(final int lastOptionCode) {
  680   				return (lastOptionCode == CLEAR1_OPT);
  681   			}
  682   		};
  683   
  684   		final CLArgsParser parser1 = new CLArgsParser(ARGLIST1, options1, control1);
  685   
  686   		assertNull(parser1.getErrorString(), parser1.getErrorString());
  687   
  688   		final List clOptions1 = parser1.getArguments();
  689   		final int size1 = clOptions1.size();
  690   
  691   		assertEquals(size1, 4);
  692   		assertEquals(((CLOption) clOptions1.get(0)).getDescriptor().getId(), YOU_OPT);
  693   		assertEquals(((CLOption) clOptions1.get(1)).getDescriptor().getId(), 0);
  694   		assertEquals(((CLOption) clOptions1.get(2)).getDescriptor().getId(), ALL_OPT);
  695   		assertEquals(((CLOption) clOptions1.get(3)).getDescriptor().getId(), CLEAR1_OPT);
  696   
  697   		assertTrue(parser1.getUnparsedArgs()[0].equals("ler"));
  698   
  699   		final CLArgsParser parser2 = new CLArgsParser(parser1.getUnparsedArgs(), options2);
  700   
  701   		assertNull(parser2.getErrorString(), parser2.getErrorString());
  702   
  703   		final List clOptions2 = parser2.getArguments();
  704   		final int size2 = clOptions2.size();
  705   
  706   		assertEquals(size2, 2);
  707   		assertEquals(((CLOption) clOptions2.get(0)).getDescriptor().getId(), 0);
  708   		assertEquals(((CLOption) clOptions2.get(1)).getDescriptor().getId(), 0);
  709   	}
  710   
  711   	public void testDuplicatesFail() {
  712   		final CLOptionDescriptor[] options = new CLOptionDescriptor[] { YOU, ALL, CLEAR1, CLEAR2, CLEAR3, CLEAR5 };
  713   
  714   		final CLArgsParser parser = new CLArgsParser(ARGLIST1, options);
  715   
  716   		assertNull(parser.getErrorString(), parser.getErrorString());
  717   	}
  718   
  719   	public void testIncomplete2Args() {
  720   		// "-Dstupid="
  721   		final CLOptionDescriptor[] options = new CLOptionDescriptor[] { DEFINE };
  722   
  723   		final CLArgsParser parser = new CLArgsParser(new String[] { "-Dstupid=" }, options);
  724   
  725   		assertNull(parser.getErrorString(), parser.getErrorString());
  726   
  727   		final List clOptions = parser.getArguments();
  728   		final int size = clOptions.size();
  729   
  730   		assertEquals(size, 1);
  731   		final CLOption option = (CLOption) clOptions.get(0);
  732   		assertEquals(option.getDescriptor().getId(), DEFINE_OPT);
  733   		assertEquals(option.getArgument(0), "stupid");
  734   		assertEquals(option.getArgument(1), "");
  735   	}
  736   
  737   	public void testIncomplete2ArgsMixed() {
  738   		// "-Dstupid=","-c"
  739   		final CLOptionDescriptor[] options = new CLOptionDescriptor[] { DEFINE, CLEAR1 };
  740   
  741   		final String[] args = new String[] { "-Dstupid=", "-c" };
  742   
  743   		final CLArgsParser parser = new CLArgsParser(args, options);
  744   
  745   		assertNull(parser.getErrorString(), parser.getErrorString());
  746   
  747   		final List clOptions = parser.getArguments();
  748   		final int size = clOptions.size();
  749   
  750   		assertEquals(size, 2);
  751   		assertEquals(((CLOption) clOptions.get(1)).getDescriptor().getId(), CLEAR1_OPT);
  752   		final CLOption option = (CLOption) clOptions.get(0);
  753   		assertEquals(option.getDescriptor().getId(), DEFINE_OPT);
  754   		assertEquals(option.getArgument(0), "stupid");
  755   		assertEquals(option.getArgument(1), "");
  756   	}
  757   
  758   	public void testIncomplete2ArgsMixedNoEq() {
  759   		// "-Dstupid","-c"
  760   		final CLOptionDescriptor[] options = new CLOptionDescriptor[] { DEFINE, CLEAR1 };
  761   
  762   		final String[] args = new String[] { "-DStupid", "-c" };
  763   
  764   		final CLArgsParser parser = new CLArgsParser(args, options);
  765   
  766   		assertNull(parser.getErrorString(), parser.getErrorString());
  767   
  768   		final List clOptions = parser.getArguments();
  769   		final int size = clOptions.size();
  770   
  771   		assertEquals(size, 2);
  772   		assertEquals(((CLOption) clOptions.get(1)).getDescriptor().getId(), CLEAR1_OPT);
  773   		final CLOption option = (CLOption) clOptions.get(0);
  774   		assertEquals(option.getDescriptor().getId(), DEFINE_OPT);
  775   		assertEquals(option.getArgument(0), "Stupid");
  776   		assertEquals(option.getArgument(1), "");
  777   	}
  778   
  779   	/**
  780   	 * Test the getArgumentById and getArgumentByName lookup methods.
  781   	 */
  782   	public void testArgumentLookup() {
  783   		final String[] args = { "-f", "testarg" };
  784   		final CLOptionDescriptor[] options = { FILE };
  785   		final CLArgsParser parser = new CLArgsParser(args, options);
  786   
  787   		CLOption optionById = parser.getArgumentById(FILE_OPT);
  788   		assertNotNull(optionById);
  789   		assertEquals(FILE_OPT, optionById.getDescriptor().getId());
  790   
  791   		CLOption optionByName = parser.getArgumentByName(FILE.getName());
  792   		assertNotNull(optionByName);
  793   		assertEquals(FILE_OPT, optionByName.getDescriptor().getId());
  794   	}
  795   
  796   	/**
  797   	 * Test that you can have null long forms.
  798   	 */
  799   	public void testNullLongForm() {
  800   		final CLOptionDescriptor test = new CLOptionDescriptor(null, CLOptionDescriptor.ARGUMENT_DISALLOWED, 'n',
  801   				"test null long form");
  802   
  803   		final String[] args = { "-n", "testarg" };
  804   		final CLOptionDescriptor[] options = { test };
  805   		final CLArgsParser parser = new CLArgsParser(args, options);
  806   
  807   		final CLOption optionByID = parser.getArgumentById('n');
  808   		assertNotNull(optionByID);
  809   		assertEquals('n', optionByID.getDescriptor().getId());
  810   
  811   		final CLOption optionByName = parser.getArgumentByName(FILE.getName());
  812   		assertNull("Looking for non-existent option by name", optionByName);
  813   	}
  814   
  815   	/**
  816   	 * Test that you can have null descriptions.
  817   	 */
  818   	public void testNullDescription() {
  819   		final CLOptionDescriptor test = new CLOptionDescriptor("nulltest", CLOptionDescriptor.ARGUMENT_DISALLOWED, 'n',
  820   				null);
  821   
  822   		final String[] args = { "-n", "testarg" };
  823   		final CLOptionDescriptor[] options = { test };
  824   		final CLArgsParser parser = new CLArgsParser(args, options);
  825   
  826   		final CLOption optionByID = parser.getArgumentById('n');
  827   		assertNotNull(optionByID);
  828   		assertEquals('n', optionByID.getDescriptor().getId());
  829   
  830   		final StringBuffer sb = CLUtil.describeOptions(options);
  831   		final String lineSeparator = System.getProperty("line.separator");
  832   		assertEquals("Testing display of null description", "\t-n, --nulltest" + lineSeparator, sb.toString());
  833   	}
  834   	/*
  835   	 * TODO add tests to check for: - name clash - long option abbreviations
  836   	 * (match shortest unique abbreviation)
  837   	 */
  838   
  839   }

Home » jakarta-jmeter-2.3.4_src » org.apache.commons » cli » avalon » [javadoc | source]