View Javadoc

1   /**
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *     http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.commons.cli2.bug;
18  
19  import org.apache.commons.cli2.Argument;
20  import org.apache.commons.cli2.Group;
21  import org.apache.commons.cli2.Option;
22  import org.apache.commons.cli2.OptionException;
23  import org.apache.commons.cli2.builder.ArgumentBuilder;
24  import org.apache.commons.cli2.builder.CommandBuilder;
25  import org.apache.commons.cli2.builder.DefaultOptionBuilder;
26  import org.apache.commons.cli2.builder.GroupBuilder;
27  import org.apache.commons.cli2.commandline.Parser;
28  import junit.framework.TestCase;
29  
30  public class Bug28005Test extends TestCase {
31      public void testInfiniteLoop() {
32          final DefaultOptionBuilder optionBuilder = new DefaultOptionBuilder();
33          final ArgumentBuilder argumentBuilder = new ArgumentBuilder();
34          final GroupBuilder groupBuilder = new GroupBuilder();
35          final CommandBuilder commandBuilder = new CommandBuilder();
36  
37          final Option inputFormatOption =
38              optionBuilder
39                  .withLongName("input-format")
40                  //.withArgument(argumentBuilder.create())
41                  .create();
42  
43          final Argument argument =
44              argumentBuilder
45                  .withName("file")
46                  .create();
47  
48          final Group children =
49              groupBuilder
50                  .withName("options")
51                  .withOption(inputFormatOption)
52                  .create();
53  
54          final Option command =
55              commandBuilder
56                  .withName("convert")
57                  .withChildren(children)
58                  .withArgument(argument)
59                  .create();
60  
61          final Group root =
62              groupBuilder
63                  .withName("commands")
64                  .withOption(command)
65                  .create();
66  
67          final Parser parser = new Parser();
68          parser.setGroup(root);
69          final String[] args = new String[]{"convert", "test.txt",
70                  "--input-format", "a"};
71  
72          try {
73              parser.parse(args);
74              fail("a isn't valid!!");
75          } catch (OptionException e) {
76              assertEquals("Unexpected a while processing commands",e.getMessage());
77          }
78      }
79  }