1   /***
2    * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
3   */
4   package test.net.sourceforge.pmd.symboltable;
5   
6   import junit.framework.TestCase;
7   import net.sourceforge.pmd.ast.ASTBlock;
8   import net.sourceforge.pmd.ast.ASTClassBodyDeclaration;
9   import net.sourceforge.pmd.ast.ASTCompilationUnit;
10  import net.sourceforge.pmd.ast.ASTConstructorDeclaration;
11  import net.sourceforge.pmd.ast.ASTForStatement;
12  import net.sourceforge.pmd.ast.ASTIfStatement;
13  import net.sourceforge.pmd.ast.ASTMethodDeclaration;
14  import net.sourceforge.pmd.ast.ASTTryStatement;
15  import net.sourceforge.pmd.ast.ASTUnmodifiedClassDeclaration;
16  import net.sourceforge.pmd.ast.ASTUnmodifiedInterfaceDeclaration;
17  import net.sourceforge.pmd.symboltable.BasicScopeFactory;
18  import net.sourceforge.pmd.symboltable.ClassScope;
19  import net.sourceforge.pmd.symboltable.GlobalScope;
20  import net.sourceforge.pmd.symboltable.LocalScope;
21  import net.sourceforge.pmd.symboltable.MethodScope;
22  import net.sourceforge.pmd.symboltable.ScopeFactory;
23  
24  import java.util.Stack;
25  
26  public class BasicScopeFactoryTest extends TestCase {
27  
28      public void testGlobalScope() {
29          ScopeFactory sf = new BasicScopeFactory();
30          Stack s = new Stack();
31          sf.openScope(s, new ASTCompilationUnit(1));
32          assertEquals(1, s.size());
33          assertTrue(s.get(0) instanceof GlobalScope);
34      }
35  
36      public void testClassScope() {
37          ScopeFactory sf = new BasicScopeFactory();
38          Stack s = new Stack();
39          sf.openScope(s, new ASTCompilationUnit(1));
40          sf.openScope(s, new ASTUnmodifiedClassDeclaration(2));
41          assertTrue(s.get(1) instanceof ClassScope);
42          sf.openScope(s, new ASTUnmodifiedInterfaceDeclaration(1));
43          assertTrue(s.get(2) instanceof ClassScope);
44          sf.openScope(s, new ASTClassBodyDeclaration(1));
45          assertTrue(s.get(3) instanceof ClassScope);
46      }
47  
48      public void testMethodScope() {
49          ScopeFactory sf = new BasicScopeFactory();
50          Stack s = new Stack();
51          sf.openScope(s, new ASTCompilationUnit(1));
52          sf.openScope(s, new ASTMethodDeclaration(2));
53          assertTrue(s.get(1) instanceof MethodScope);
54          sf.openScope(s, new ASTConstructorDeclaration(1));
55          assertTrue(s.get(2) instanceof MethodScope);
56      }
57  
58      public void testLocalScope() {
59          ScopeFactory sf = new BasicScopeFactory();
60          Stack s = new Stack();
61          sf.openScope(s, new ASTCompilationUnit(1));
62          sf.openScope(s, new ASTBlock(2));
63          assertTrue(s.get(1) instanceof LocalScope);
64          sf.openScope(s, new ASTTryStatement(1));
65          assertTrue(s.get(2) instanceof LocalScope);
66          sf.openScope(s, new ASTForStatement(1));
67          assertTrue(s.get(3) instanceof LocalScope);
68          sf.openScope(s, new ASTIfStatement(1));
69          assertTrue(s.get(4) instanceof LocalScope);
70      }
71  }