package bluej.parser;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
import bluej.JavaFXThreadingRule;
import bluej.editor.moe.MoeSyntaxDocument;
import bluej.editor.moe.ScopeColors;
import bluej.parser.entity.ClassLoaderResolver;
import bluej.parser.entity.EntityResolver;
import bluej.parser.entity.PackageResolver;
import bluej.parser.nodes.ParsedCUNode;
import bluej.parser.symtab.ClassInfo;
import bluej.parser.symtab.Selection;
import org.junit.Rule;
import org.junit.Test;
import static org.junit.Assert.*;
| Run a whole directory of sample source files through our parser.
|
| @author Andrew Patterson
|
public class BasicParseTest
{
@Rule
public JavaFXThreadingRule javafxRule = new JavaFXThreadingRule();
| Get a data or result file from our hidden stash..
| NOTE: the stash of data files is in the ast/data directory.
|
private File getFile(String name)
{
URL url = getClass().getResource("/bluej/parser/ast/data/" + name);
if (url == null || url.getFile().equals(""))
return null;
else{ return new File(url.getFile());
}
}
| Find a target method/class in the comments and return its index (or -1 if not found).
|
private int findTarget(Properties comments, String target)
{
for (int commentNum = 0; ; commentNum++) {
String comment = comments.getProperty("comment" + commentNum + ".target");
if (comment == null) {
return -1;
}
if (comment.equals(target)) {
return commentNum;
}
}
}
| Lots of sample files, none of which should cause exceptions
| in our parser.
|
| @throws Exception
|
@Test
public void testNoParseExceptionsOnStandardCode()
throws Exception
{
assertNotNull(InfoParser.parse(getFile("java_basic.dat")));
assertNotNull(InfoParser.parse(getFile("A.dat")));
assertNotNull(InfoParser.parse(getFile("B.dat")));
assertNotNull(InfoParser.parse(getFile("C.dat")));
assertNotNull(InfoParser.parse(getFile("D.dat")));
assertNotNull(InfoParser.parse(getFile("E.dat")));
assertNotNull(InfoParser.parse(getFile("F.dat")));
assertNotNull(InfoParser.parse(getFile("G.dat")));
}
@Test
public void testNoParseExceptionsOnGenerics()
throws Exception
{
assertNotNull(InfoParser.parse(getFile("15_generic.dat")));
}
@Test
public void testCode()
{
InitConfig.init();
TestEntityResolver ter = new TestEntityResolver(
new ClassLoaderResolver(this.getClass().getClassLoader())
);
StringReader sr = new StringReader(
"class A {\n" +
" Class<int[]> cc = int[].class;" +
"}\n"
);
ClassInfo info = InfoParser.parse(sr, ter, "testpkg");
assertNotNull(info);
}
@Test
public void testValidClassInfo()
throws Exception
{
List<String> references = new ArrayList<String>();
references.add("Insets");
references.add("Color");
references.add("Rectangle");
references.add("Graphics");
references.add("Graphics2D");
references.add("Runnable");
references.add("Exception");
references.add("Dummy1");
references.add("Dummy2");
File file = getFile("AffinedTransformer.dat");
ClassInfo info = InfoParser.parse(file, new ClassLoaderResolver(this.getClass().getClassLoader()));
assertEquals("AffinedTransformer",info.getName());
assertEquals("javax.swing.JFrame",info.getSuperclass());
assertEquals("bluej.parser.ast.data",info.getPackage());
Selection testSel = info.getPackageNameSelection();
assertEquals(1, testSel.getLine());
assertEquals(9, testSel.getColumn());
assertEquals(1, testSel.getEndLine());
assertEquals(30, testSel.getEndColumn());
testSel = info.getPackageSemiSelection();
assertEquals(1, testSel.getLine());
assertEquals(30, testSel.getColumn());
assertEquals(1, testSel.getEndLine());
assertEquals(31, testSel.getEndColumn());
testSel = info.getPackageStatementSelection();
assertEquals(1, testSel.getLine());
assertEquals(1, testSel.getColumn());
assertEquals(1, testSel.getEndLine());
assertEquals(8, testSel.getEndColumn());
Selection extendsInsert = info.getExtendsInsertSelection();
assertNull(extendsInsert);
List<String> l = info.getTypeParameterTexts();
if (l != null)
assertEquals(0, l.size());
Selection implementsInsert = info.getImplementsInsertSelection();
assertEquals(47, implementsInsert.getEndColumn());
assertEquals(47, implementsInsert.getColumn());
assertEquals(6, implementsInsert.getEndLine());
assertEquals(6, implementsInsert.getLine());
Selection superReplace = info.getSuperReplaceSelection();
assertEquals(6, superReplace.getLine());
assertEquals(41, superReplace.getColumn());
assertEquals(6, superReplace.getEndLine());
assertEquals(47, superReplace.getEndColumn());
Properties comments = info.getComments();
String wantedComment = "void resizeToInternalSize(int, int)";
int wci = findTarget(comments, wantedComment);
assertTrue(wci != -1);
String paramNames = comments.getProperty("comment" + wci + ".params");
assertEquals("internalWidth internalHeight", paramNames);
|
| Second file - no superclass, multiple interfaces
|
file = getFile("multi_interface.dat");
info = InfoParser.parse(file);
extendsInsert = info.getExtendsInsertSelection();
assertEquals(10, extendsInsert.getEndColumn());
assertEquals(10, extendsInsert.getColumn());
assertEquals(1, extendsInsert.getEndLine());
assertEquals(1, extendsInsert.getLine());
implementsInsert = info.getImplementsInsertSelection();
assertEquals(32, implementsInsert.getEndColumn());
assertEquals(32, implementsInsert.getColumn());
assertEquals(1, implementsInsert.getEndLine());
assertEquals(1, implementsInsert.getLine());
List<Selection> interfaceSels = info.getInterfaceSelections();
assertEquals(6, interfaceSels.size());
Iterator<Selection> i = interfaceSels.iterator();
Selection interfaceSel = (Selection) i.next();
assertEquals(1, interfaceSel.getLine());
assertEquals(11, interfaceSel.getColumn());
assertEquals(1, interfaceSel.getEndLine());
assertEquals(21, interfaceSel.getEndColumn());
interfaceSel = (Selection) i.next();
assertEquals(1, interfaceSel.getLine());
assertEquals(22, interfaceSel.getColumn());
assertEquals(1, interfaceSel.getEndLine());
assertEquals(24, interfaceSel.getEndColumn());
interfaceSel = (Selection) i.next();
assertEquals(1, interfaceSel.getLine());
assertEquals(24, interfaceSel.getColumn());
assertEquals(1, interfaceSel.getEndLine());
assertEquals(26, interfaceSel.getEndColumn());
interfaceSel = (Selection) i.next();
assertEquals(1, interfaceSel.getLine());
assertEquals(26, interfaceSel.getColumn());
assertEquals(1, interfaceSel.getEndLine());
assertEquals(28, interfaceSel.getEndColumn());
interfaceSel = (Selection) i.next();
assertEquals(1, interfaceSel.getLine());
assertEquals(28, interfaceSel.getColumn());
assertEquals(1, interfaceSel.getEndLine());
assertEquals(30, interfaceSel.getEndColumn());
interfaceSel = (Selection) i.next();
assertEquals(1, interfaceSel.getLine());
assertEquals(30, interfaceSel.getColumn());
assertEquals(1, interfaceSel.getEndLine());
assertEquals(32, interfaceSel.getEndColumn());
}
@Test
public void testValidClassInfo2() throws Exception
{
StringReader sr = new StringReader(
"class A implements Runnable, Iterable {\n" +
" void someMethod() {\n" +
" I i = new I();\n" +
" }\n" +
"}\n"
);
ClassInfo info = InfoParser.parse(sr,
new ClassLoaderResolver(this.getClass().getClassLoader()), null);
List<String> implemented = info.getImplements();
assertNotNull(implemented);
assertEquals(2, implemented.size());
assertTrue(implemented.contains("java.lang.Runnable"));
assertTrue(implemented.contains("java.lang.Iterable"));
}
@Test
public void testValidClassInfo3() throws Exception
{
StringReader sr = new StringReader(
"interface A extends Runnable, Iterable {\n" +
"}\n");
ClassInfo info = InfoParser.parse(sr,
new ClassLoaderResolver(this.getClass().getClassLoader()), null);
List<String> implemented = info.getImplements();
assertNotNull(implemented);
assertEquals(2, implemented.size());
assertTrue(implemented.contains("java.lang.Runnable"));
assertTrue(implemented.contains("java.lang.Iterable"));
Selection extendsSel = info.getExtendsInsertSelection();
assertNotNull(extendsSel);
assertEquals(1, extendsSel.getLine());
assertEquals(39, extendsSel.getColumn());
}
| Test recognition of interfaces
|
@Test
public void testValidClassInfo4() throws Exception
{
StringReader sr = new StringReader(
"interface A {}"
);
ClassInfo info = InfoParser.parse(sr, null, null);
assertTrue(info.isInterface());
}
| Test recognition of enumerations
|
@Test
public void testValidClassInfo5() throws Exception
{
StringReader sr = new StringReader(
"enum A { monday { public int getAnInt() { return 3;} }, tuesday() {}, wednesday }"
);
ClassInfo info = InfoParser.parse(sr, null, null);
assertNotNull(info);
assertTrue(info.isEnum());
}
@Test
public void testMultiDimensionalArrayParam() throws Exception
{
File file = getFile("I.dat");
ClassInfo info = InfoParser.parse(file);
Properties comments = info.getComments();
String wantedComment = "void method(int[][])";
int commentNum = findTarget(comments, wantedComment);
assertTrue(commentNum != -1);
String paramNames = comments.getProperty("comment" + commentNum + ".params");
assertEquals(paramNames, "args");
}
@Test
public void testCommentExtraction() throws Exception
{
String aSrc = "class A {\n"
+ " void method1(int [] a) { }\n"
+ " void method2(int a[]) { }\n"
+ " void method3(String [] a) { }\n"
+ "}\n";
ClassInfo info = InfoParser.parse(new StringReader(aSrc), new ClassLoaderResolver(getClass().getClassLoader()), null);
Properties comments = info.getComments();
assertTrue(findTarget(comments, "void method1(int[])") != -1);
assertTrue(findTarget(comments, "void method2(int[])") != -1);
assertTrue(findTarget(comments, "void method3(java.lang.String[])") != -1);
}
@Test
public void testCommentExtraction2() throws Exception
{
String aSrc = "class A<T> {\n"
+ " void method1(T [] a) { }\n"
+ " <U> void method2(U a[]) { }\n"
+ "}\n";
ClassInfo info = InfoParser.parse(new StringReader(aSrc), new ClassLoaderResolver(getClass().getClassLoader()), null);
Properties comments = info.getComments();
assertTrue(findTarget(comments, "void method1(java.lang.Object[])") != -1);
assertTrue(findTarget(comments, "void method2(java.lang.Object[])") != -1);
}
@Test
public void testCommentExtraction3() throws Exception
{
String aSrc = "import java.util.*;\n"
+ "class A {\n"
+ " void method1(List<List<Integer>> a) { }\n"
+ "}\n";
ClassInfo info = InfoParser.parse(new StringReader(aSrc), new ClassLoaderResolver(getClass().getClassLoader()), null);
Properties comments = info.getComments();
assertTrue(findTarget(comments, "void method1(java.util.List)") != -1);
}
@Test
public void testCommentExtraction4() throws Exception
{
String aSrc = "class A<T> {\n"
+ " void method1(A<? extends T> a) { }\n"
+ " void method2(A<? super T> a) { }\n"
+ "}\n";
ClassInfo info = InfoParser.parse(new StringReader(aSrc), new ClassLoaderResolver(getClass().getClassLoader()), null);
Properties comments = info.getComments();
assertTrue(findTarget(comments, "void method1(A)") != -1);
assertTrue(findTarget(comments, "void method2(A)") != -1);
}
@Test
public void testMultipleInterfaceExtends() throws Exception
{
String aSrc = "interface A extends B, C { }";
ClassInfo info = InfoParser.parse(new StringReader(aSrc), null, null);
assertNotNull(info);
}
@Test
public void testClassTpars() throws Exception
{
String aSrc = "class B {\n"
+ " <T> void method1(A<? extends T> a) { }\n"
+ "}\n";
ClassInfo info = InfoParser.parse(new StringReader(aSrc), new ClassLoaderResolver(getClass().getClassLoader()), null);
assertTrue(info.getTypeParameterTexts().isEmpty());
aSrc = "class B<U extends Runnable> { }";
info = InfoParser.parse(new StringReader(aSrc), new ClassLoaderResolver(getClass().getClassLoader()), null);
assertTrue(info.getTypeParameterTexts().size() == 1);
assertEquals("U", info.getTypeParameterTexts().get(0));
}
private ParsedCUNode cuForSource(String sourceCode, EntityResolver resolver)
{
MoeSyntaxDocument document = new MoeSyntaxDocument(resolver, ScopeColors.dummy());
document.enableParser(true);
document.insertString(0, sourceCode);
return document.getParser();
}
@Test
public void testInterfaceSelections()
{
InitConfig.init();
TestEntityResolver ter = new TestEntityResolver(
new ClassLoaderResolver(this.getClass().getClassLoader())
);
PackageResolver pkgr = new PackageResolver(ter, "");
ter.addCompilationUnit("", cuForSource("interface I {}", pkgr));
ter.addCompilationUnit("", cuForSource("interface J {}", pkgr));
String IIsrc = "interface II extends I { public void sampleMethod(); }";
ClassInfo info = InfoParser.parse(new StringReader(IIsrc), pkgr, "");
List<Selection> isels = info.getInterfaceSelections();
assertEquals(2, isels.size());
assertEquals(14, isels.get(0).getColumn());
assertEquals(22, isels.get(1).getColumn());
String JJsrc = "interface JJ extends I, J { public void sampleMethod(); }";
info = InfoParser.parse(new StringReader(JJsrc), pkgr, "");
isels = info.getInterfaceSelections();
assertEquals(4, isels.size());
assertEquals(14, isels.get(0).getColumn());
assertEquals(22, isels.get(1).getColumn());
assertEquals(23, isels.get(2).getColumn());
assertEquals(25, isels.get(3).getColumn());
}
@Test
public void testDependencyAnalysis()
throws Exception
{
InitConfig.init();
TestEntityResolver ter = new TestEntityResolver(
new ClassLoaderResolver(this.getClass().getClassLoader())
);
PackageResolver pkgr = new PackageResolver(ter, "");
ter.addCompilationUnit("", cuForSource("class I {}", pkgr));
ter.addCompilationUnit("", cuForSource("class J<T> {}", pkgr));
ter.addCompilationUnit("", cuForSource("class K {}", pkgr));
ter.addCompilationUnit("", cuForSource("class L {}", pkgr));
ter.addCompilationUnit("", cuForSource("class M {}", pkgr));
FileInputStream fis = new FileInputStream(getFile("H.dat"));
ClassInfo info = InfoParser.parse(new InputStreamReader(fis), pkgr, "");
List<String> used = info.getUsed();
assertTrue(used.contains("I"));
assertTrue(used.contains("J"));
assertTrue(used.contains("K"));
assertTrue(used.contains("L"));
assertTrue(used.contains("M"));
}
| Test dependency analysis works correctly in the presence of inner classes.
| In this example, the "I" in the method body refers to the inner class "I" and
|* should not generate an external reference.
*/
@Test
public void testDependencyAnalysis2() throws Exception
{
InitConfig.init();
TestEntityResolver ter = new TestEntityResolver(
|
|new ClassLoaderResolver(this.getClass().getClassLoader())
|
|);
|
|ter.addCompilationUnit("", cuForSource("class I {}", ter));
StringReader sr = new StringReader(
"class A {\n" +
" void someMethod() {\n" +
" I i = new I();\n" +
" }\n" +
" class I { }\n" +
"}\n"
);
ClassInfo info = InfoParser.parse(sr, null, null);
List<String> used = info.getUsed();
assertFalse(used.contains("I"));
}
/**
* Test loop iterator variable declaration dependency
*/
@Test
public void testDependencyAnalysis3() throws Exception
{
InitConfig.init();
|
|TestEntityResolver ter = new TestEntityResolver(
|
|new ClassLoaderResolver(this.getClass().getClassLoader())
|
|);
|
|PackageResolver pkgr = new PackageResolver(ter, "");
ter.addCompilationUnit("", cuForSource("class I {}", pkgr));
ter.addCompilationUnit("", cuForSource("class JJ { public static I someMethod() { return null; } }", pkgr));
StringReader sr = new StringReader(
"class A {\n" +
" void someMethod() {\n" +
" for(I ii = JJ.someMethod(); ;) ;\n" +
" }\n" +
"}\n"
);
ClassInfo info = InfoParser.parse(sr, pkgr, "");
List<String> used = info.getUsed();
assertTrue(used.contains("I"));
}
/**
* Test reference to class via static method call
*/
@Test
public void testDependencyAnalysis4() throws Exception
{
InitConfig.init();
|
|TestEntityResolver ter = new TestEntityResolver(
|
|new ClassLoaderResolver(this.getClass().getClassLoader())
|
|);
|
|PackageResolver pkgr = new PackageResolver(ter, "");
ter.addCompilationUnit("", cuForSource("class I {}", pkgr));
ter.addCompilationUnit("", cuForSource("class JJ { public static I someMethod() { return null; } }", pkgr));
StringReader sr = new StringReader(
"class A {\n" +
" void someMethod() {\n" +
" for(I ii = JJ.someMethod(); ;) ;\n" +
" }\n" +
"}\n"
);
ClassInfo info = InfoParser.parse(sr, pkgr, "");
List<String> used = info.getUsed();
assertTrue(used.contains("JJ"));
}
/**
* Test that type parameters are recognized and that they shadow classes with the same name
*/
@Test
public void testDependencyAnalysis5() throws Exception
|
|{
|
|InitConfig.init();
|
|TestEntityResolver ter = new TestEntityResolver(
|
|new ClassLoaderResolver(this.getClass().getClassLoader())
|
|);
|
|ter.addCompilationUnit("", cuForSource("class T {}", ter));
StringReader sr = new StringReader(
"class A<T> {\n" +
" public T someVar;" +
"}\n"
);
ClassInfo info = InfoParser.parse(sr, ter, "");
List<String> used = info.getUsed();
assertFalse(used.contains("T"));
}
/**
* Test dependency analysis within a named package
*/
@Test
public void testDependencyAnalysis6() throws Exception
{
InitConfig.init();
|
|TestEntityResolver ter = new TestEntityResolver(
|
|new ClassLoaderResolver(this.getClass().getClassLoader())
|
|);
|
|PackageResolver pkgr = new PackageResolver(ter, "testpkg");
ter.addCompilationUnit("testpkg", cuForSource("package testpkg; class N {}", pkgr));
StringReader sr = new StringReader(
"package testpkg;" +
"class A {\n" +
" public N someVar;" +
"}\n"
);
ClassInfo info = InfoParser.parse(sr, pkgr, "testpkg");
List<String> used = info.getUsed();
assertTrue(used.contains("N"));
}
/**
* Test dependency analysis handles qualified names
*/
@Test
public void testDependencyAnalysis7() throws Exception
{
InitConfig.init();
|
|TestEntityResolver ter = new TestEntityResolver(
|
|new ClassLoaderResolver(this.getClass().getClassLoader())
|
|);
|
|PackageResolver pkgr = new PackageResolver(ter, "testpkg");
PackageResolver pkgmr = new PackageResolver(ter, "otherpkg");
ter.addCompilationUnit("testpkg", cuForSource("package testpkg; class N {}", pkgr));
ter.addCompilationUnit("otherpkg", cuForSource("package otherpkg; class M {}", pkgmr));
StringReader sr = new StringReader(
"package testpkg;" +
"class A {\n" +
" public testpkg.N someVar;" +
" public otherpkg.M otherVar;" +
"}\n"
);
ClassInfo info = InfoParser.parse(sr, pkgr, "testpkg");
List<String> used = info.getUsed();
assertTrue(used.contains("N"));
assertFalse(used.contains("M"));
}
/**
* Test that an imported class shadows another class in the same package.
*/
@Test
public void testDependencyAnalysis8() throws Exception
{
InitConfig.init();
|
|TestEntityResolver ter = new TestEntityResolver(
|
|new ClassLoaderResolver(this.getClass().getClassLoader())
|
|);
|
|ter.addCompilationUnit("testpkg", cuForSource("class N {}", ter));
ter.addCompilationUnit("otherpkg", cuForSource("class N {}", ter));
StringReader sr = new StringReader(
"package testpkg;" +
"import otherpkg.N;" +
"class A {\n" +
" public N someVar;" +
"}\n"
);
ClassInfo info = InfoParser.parse(sr, ter, "testpkg");
List<String> used = info.getUsed();
assertFalse(used.contains("N"));
}
/**
* Test reference to class via static value reference
*/
@Test
public void testDependencyAnalysis9() throws Exception
{
InitConfig.init();
|
|TestEntityResolver ter = new TestEntityResolver(
|
|new ClassLoaderResolver(this.getClass().getClassLoader())
|
|);
|
|PackageResolver pkgr = new PackageResolver(ter, "");
ter.addCompilationUnit("", cuForSource("class I { public static int xyz = 3; }", pkgr));
StringReader sr = new StringReader(
"class A {\n" +
" int n = I.xyz;" +
"}\n"
);
ClassInfo info = InfoParser.parse(sr, pkgr, "");
List<String> used = info.getUsed();
assertTrue(used.contains("I"));
}
/**
* Test that a type argument generates a dependency.
*/
@Test
public void testDependencyAnalysis10()
{
InitConfig.init();
TestEntityResolver ter = new TestEntityResolver(
|
|new ClassLoaderResolver(this.getClass().getClassLoader())
|
|);
|
|PackageResolver pkgr = new PackageResolver(ter, "");
ter.addCompilationUnit("", cuForSource("class I { }", pkgr));
StringReader sr = new StringReader(
"import java.util.List;" +
"class A {\n" +
" List<I> list;" +
"}\n"
);
ClassInfo info = InfoParser.parse(sr, pkgr, "");
List<String> used = info.getUsed();
assertTrue(used.contains("I"));
}
/**
* Test that a type parameter bound generates a dependency.
*/
@Test
public void testDependencyAnalysis11()
{
InitConfig.init();
TestEntityResolver ter = new TestEntityResolver(
|
|new ClassLoaderResolver(this.getClass().getClassLoader())
|
|);
|
|PackageResolver pkgr = new PackageResolver(ter, "");
ter.addCompilationUnit("", cuForSource("class I { }", pkgr));
StringReader sr = new StringReader(
"class A<T extends I> {\n" +
"}\n"
);
ClassInfo info = InfoParser.parse(sr, pkgr, "");
List<String> used = info.getUsed();
assertTrue(used.contains("I"));
}
@Test
public void testDependencyAnalysis12()
{
InitConfig.init();
TestEntityResolver ter = new TestEntityResolver(
new ClassLoaderResolver(this.getClass().getClassLoader())
|
|);
|
|PackageResolver pkgr = new PackageResolver(ter, "testpkg");
ter.addCompilationUnit("testpkg", cuForSource("package testpkg; class I { }", pkgr));
ter.addCompilationUnit("testpkg", cuForSource("package testpkg; class J { }", pkgr));
StringReader sr = new StringReader(
"package testpkg;" +
"class A {\n" +
" Class<?> cc = I.class;" +
" Class<?> cc2 = testpkg.J.class;" +
"}\n"
);
ClassInfo info = InfoParser.parse(sr, pkgr, "testpkg");
List<String> used = info.getUsed();
assertTrue(used.contains("I"));
assertTrue(used.contains("J"));
}
@Test
public void testDependencyAnalysis13()
{
InitConfig.init();
TestEntityResolver ter = new TestEntityResolver(
new ClassLoaderResolver(this.getClass().getClassLoader())
|
|);
|
|PackageResolver pkgr = new PackageResolver(ter, "testpkg");
ter.addCompilationUnit("testpkg", cuForSource("package testpkg; class I { }", pkgr));
ter.addCompilationUnit("testpkg", cuForSource("package testpkg; class J { }", pkgr));
StringReader sr = new StringReader(
"package testpkg;" +
"class A {\n" +
" Class<? extends I> cc;" +
" Class<? super J> cc2;" +
"}\n"
);
ClassInfo info = InfoParser.parse(sr, pkgr, "testpkg");
List<String> used = info.getUsed();
assertTrue(used.contains("I"));
assertTrue(used.contains("J"));
}
@Test
public void testClassModifiers()
{
InitConfig.init();
TestEntityResolver ter = new TestEntityResolver(
new ClassLoaderResolver(this.getClass().getClassLoader())
|
|);
|
|PackageResolver pkgr = new PackageResolver(ter, "");
StringReader sr = new StringReader(
"abstract class A {\n" +
"}\n"
);
ClassInfo info = InfoParser.parse(sr, pkgr, "");
assertTrue(info.isAbstract());
assertFalse(info.isInterface());
assertFalse(info.isEnum());
}
@Test
public void testAnnotation1()
{
String aSrc = "public @interface UnderConstruction {\n" +
" public enum Priority { LOW, MEDIUM, HIGH }\n" +
" String owner() default \"Aqifg\";\n" +
" public abstract String lastChanged() default \"08/07/2011\";\n" +
" int someInteger() default 123;\n" +
" java.lang.String someString() default \"I am a String\";\n" +
" String ff = \"another string\";\n" +
"}\n";
ClassInfo info = InfoParser.parse(new StringReader(aSrc), new ClassLoaderResolver(getClass().getClassLoader()), null);
assertNotNull(info);
assertFalse(info.hadParseError());
|
|}
|
|/**
| Parse some code with an error in it (regression test).
|
@Test
public void testParseBroken()
{
String aSrc = "class A {\n" +
" <T> fff(List<\n" +
" void xyz(int n) { }\n" +
"}\n";
ClassInfo info = InfoParser.parse(new StringReader(aSrc), new ClassLoaderResolver(getClass().getClassLoader()), null);
assertNotNull(info);
assertTrue(info.hadParseError());
}
}
top,
use,
map,
class BasicParseTest
. getFile
. findTarget
. testNoParseExceptionsOnStandardCode
. testNoParseExceptionsOnGenerics
. testCode
. testValidClassInfo
. testValidClassInfo2
. testValidClassInfo3
. testValidClassInfo4
. testValidClassInfo5
. testMultiDimensionalArrayParam
. testCommentExtraction
. testCommentExtraction2
. testCommentExtraction3
. testCommentExtraction4
. testMultipleInterfaceExtends
. testClassTpars
. cuForSource
. testInterfaceSelections
. testDependencyAnalysis
. testParseBroken
595 neLoCode
+ 62 LoComm