1   package test.net.sourceforge.pmd.ast;
2   
3   import static org.junit.Assert.assertEquals;
4   import static org.junit.Assert.assertFalse;
5   import static org.junit.Assert.assertTrue;
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  
11  import org.junit.Test;
12  
13  import test.net.sourceforge.pmd.testframework.ParserTst;
14  
15  import java.util.Iterator;
16  import java.util.Set;
17  
18  public class ASTFormalParameterTest extends ParserTst {
19  
20      @Test
21      public void testVarargs() throws Throwable {
22          int nrOfVarArgs   = 0;
23          int nrOfNoVarArgs = 0;
24          
25          Set ops = getNodes(new TargetJDK1_5(), ASTFormalParameter.class, TEST1);
26          for (Iterator iter = ops.iterator(); iter.hasNext();) {
27              ASTFormalParameter b = (ASTFormalParameter) iter.next();
28              ASTVariableDeclaratorId variableDeclId = b.getFirstChildOfType(ASTVariableDeclaratorId.class);
29              if (!"x".equals(variableDeclId.getImage())) {
30                  assertTrue(b.isVarargs());
31                  nrOfVarArgs++;
32              } else {
33                  assertFalse(b.isVarargs());
34                  nrOfNoVarArgs++;
35              }
36          }
37          
38          //Ensure that both possibilities are tested
39          assertEquals(1, nrOfVarArgs);
40          assertEquals(1, nrOfNoVarArgs);
41      }
42  
43      private static final String TEST1 =
44              "class Foo {" + PMD.EOL +
45              " void bar(int x, int... others) {}" + PMD.EOL +
46              "}";
47  
48      public static junit.framework.Test suite() {
49          return new junit.framework.JUnit4TestAdapter(ASTFormalParameterTest.class);
50      }
51  }