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