/**
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/
package net.sourceforge.pmd.lang.java.symboltable;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import net.sourceforge.pmd.PMD;
import net.sourceforge.pmd.lang.java.ast.ASTCompilationUnit;
import net.sourceforge.pmd.lang.symboltable.NameDeclaration;
import net.sourceforge.pmd.lang.symboltable.NameOccurrence;
public class SourceFileScopeTest extends STBBaseTst {
@Test
public void testClassDeclAppears() {
parseCode(TEST1);
Map<NameDeclaration, List<NameOccurrence>> m = acu.getScope().getDeclarations();
ClassNameDeclaration classNameDeclaration = (ClassNameDeclaration) m.keySet().iterator().next();
assertEquals(classNameDeclaration.getImage(), "Foo");
}
@Test
public void testPackageIsEmptyString() {
parseCode(TEST1);
ASTCompilationUnit decl = acu;
assertEquals(decl.getScope().getEnclosingScope(SourceFileScope.class).getPackageName(), "");
}
@Test
public void testPackageNameFound() {
parseCode(TEST2);
ASTCompilationUnit decl = acu;
assertEquals(decl.getScope().getEnclosingScope(SourceFileScope.class).getPackageName(), "foo.bar");
}
@Test
public void testNestedClasses() {
parseCode(TEST3);
Map<NameDeclaration, List<NameOccurrence>> m = acu.getScope().getDeclarations();
Iterator<NameDeclaration> iterator = m.keySet().iterator();
ClassNameDeclaration classNameDeclaration = (ClassNameDeclaration) iterator.next();
assertEquals(classNameDeclaration.getImage(), "Foo");
assertFalse(iterator.hasNext());
}
private static final String TEST1 = "public class Foo {}" + PMD.EOL;
private static final String TEST2 = "package foo.bar;" + PMD.EOL + "public class Foo {" + PMD.EOL + "}" + PMD.EOL;
private static final String TEST3 = "public class Foo {" + PMD.EOL + " public class Bar {" + PMD.EOL + " }"
+ PMD.EOL + "}" + PMD.EOL;
}