1   package test.net.sourceforge.pmd.symboltable;
2   
3   import net.sourceforge.pmd.PMD;
4   import net.sourceforge.pmd.ast.ASTCompilationUnit;
5   import net.sourceforge.pmd.symboltable.ClassNameDeclaration;
6   
7   import java.util.Iterator;
8   import java.util.Map;
9   
10  public class SourceFileScopeTest extends STBBaseTst {
11  
12      public void testClassDeclAppears() {
13          parseCode(TEST1);
14          Map m = acu.getScope().getClassDeclarations();
15          ClassNameDeclaration classNameDeclaration = (ClassNameDeclaration) m.keySet().iterator().next();
16          assertEquals(classNameDeclaration.getImage(), "Foo");
17      }
18  
19      public void testPackageIsEmptyString() {
20          parseCode(TEST1);
21          ASTCompilationUnit decl = (ASTCompilationUnit) (acu.findChildrenOfType(ASTCompilationUnit.class)).get(0);
22          assertEquals(decl.getScope().getEnclosingSourceFileScope().getPackageName(), "");
23      }
24  
25      public void testPackageNameFound() {
26          parseCode(TEST2);
27          ASTCompilationUnit decl = (ASTCompilationUnit) (acu.findChildrenOfType(ASTCompilationUnit.class)).get(0);
28          assertEquals(decl.getScope().getEnclosingSourceFileScope().getPackageName(), "foo.bar");
29      }
30  
31      public void testNestedClasses() {
32          parseCode(TEST3);
33          Map m = acu.getScope().getClassDeclarations();
34          Iterator iterator = m.keySet().iterator();
35          ClassNameDeclaration classNameDeclaration = (ClassNameDeclaration) iterator.next();
36          assertEquals(classNameDeclaration.getImage(), "Foo");
37          assertFalse(iterator.hasNext());
38      }
39  
40      private static final String TEST1 =
41              "public class Foo {}" + PMD.EOL;
42  
43      private static final String TEST2 =
44              "package foo.bar;" + PMD.EOL +
45              "public class Foo {" + PMD.EOL +
46              "}" + PMD.EOL;
47  
48      private static final String TEST3 =
49              "public class Foo {" + PMD.EOL +
50              " public class Bar {" + PMD.EOL +
51              " }" + PMD.EOL +
52              "}" + PMD.EOL;
53  
54  }