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