1
2
3
4 package net.sourceforge.pmd.ast;
5
6 import java.io.IOException;
7 import java.io.InputStream;
8
9 import net.sourceforge.pmd.PMD;
10 import net.sourceforge.pmd.lang.java.ast.ParseException;
11 import net.sourceforge.pmd.testframework.ParserTst;
12 import net.sourceforge.pmd.util.IOUtil;
13
14 import org.junit.Test;
15
16
17 public class ParserCornersTest extends ParserTst {
18
19 @Test
20 public final void testGetFirstASTNameImageNull() throws Throwable {
21 parseJava14(ABSTRACT_METHOD_LEVEL_CLASS_DECL);
22 }
23
24 @Test
25 public final void testCastLookaheadProblem() throws Throwable {
26 parseJava14(CAST_LOOKAHEAD_PROBLEM);
27 }
28
29
30
31
32
33 @Test
34 public void testGenericsProblem() {
35 parseJava15(GENERICS_PROBLEM);
36 parseJava17(GENERICS_PROBLEM);
37 }
38
39 @Test
40 public void testParsersCases() {
41 String test15 = readAsString("/net/sourceforge/pmd/ast/ParserCornerCases.java");
42 parseJava15(test15);
43
44 String test17 = readAsString("/net/sourceforge/pmd/ast/ParserCornerCases17.java");
45 parseJava17(test17);
46 }
47
48 private String readAsString(String resource) {
49 InputStream in = ParserCornersTest.class.getResourceAsStream(resource);
50 StringBuilder sb = new StringBuilder();
51 int c;
52 try {
53 while((c = in.read()) != -1) {
54 sb.append((char)c);
55 }
56 } catch (IOException e) {
57
58 } finally {
59 IOUtil.closeQuietly(in);
60 }
61 return sb.toString();
62 }
63
64 private static final String GENERICS_PROBLEM =
65 "public class Test {" + PMD.EOL +
66 " public void test() {" + PMD.EOL +
67 " String o = super.<String> doStuff(\"\");" + PMD.EOL +
68 " }" + PMD.EOL +
69 "}";
70
71 private static final String ABSTRACT_METHOD_LEVEL_CLASS_DECL =
72 "public class Test {" + PMD.EOL +
73 " void bar() {" + PMD.EOL +
74 " abstract class X { public abstract void f(); }" + PMD.EOL +
75 " class Y extends X { public void f() {" + PMD.EOL +
76 " new Y().f();" + PMD.EOL +
77 " }}" + PMD.EOL +
78 " }" + PMD.EOL +
79 "}";
80
81 private static final String CAST_LOOKAHEAD_PROBLEM =
82 "public class BadClass {" + PMD.EOL +
83 " public Class foo() {" + PMD.EOL +
84 " return (byte[].class);" + PMD.EOL +
85 " }" + PMD.EOL +
86 "}";
87
88 public static junit.framework.Test suite() {
89 return new junit.framework.JUnit4TestAdapter(ParserCornersTest.class);
90 }
91 }