1   package test.net.sourceforge.pmd.ast;
2   
3   import java.util.Iterator;
4   import java.util.Set;
5   
6   import net.sourceforge.pmd.PMD;
7   import net.sourceforge.pmd.TargetJDK1_5;
8   import net.sourceforge.pmd.ast.ASTFormalParameter;
9   import net.sourceforge.pmd.ast.ASTVariableDeclaratorId;
10  import test.net.sourceforge.pmd.testframework.ParserTst;
11  
12  public class ASTFormalParameterTest extends ParserTst {
13  
14      public void testVarargs() throws Throwable {
15          int nrOfVarArgs   = 0;
16          int nrOfNoVarArgs = 0;
17          
18          Set ops = getNodes(new TargetJDK1_5(), ASTFormalParameter.class, TEST1);
19          for (Iterator iter = ops.iterator(); iter.hasNext();) {
20              ASTFormalParameter b = (ASTFormalParameter) iter.next();
21              ASTVariableDeclaratorId variableDeclId = (ASTVariableDeclaratorId)b.getFirstChildOfType(ASTVariableDeclaratorId.class);
22              if (!"x".equals(variableDeclId.getImage())) {
23                  assertTrue(b.isVarargs());
24                  nrOfVarArgs++;
25              } else {
26                  assertFalse(b.isVarargs());
27                  nrOfNoVarArgs++;
28              }
29          }
30          
31          //Ensure that both possibilities are tested
32          assertEquals(1, nrOfVarArgs);
33          assertEquals(1, nrOfNoVarArgs);
34      }
35  
36      private static final String TEST1 =
37              "class Foo {" + PMD.EOL +
38              " void bar(int x, int... others) {}" + PMD.EOL +
39              "}";
40  
41  }