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
20
21
22
23 @Test
24 public void testInnerOuterClass() throws Exception {
25 parseJava17("/**\n" +
26 " * @author azagorulko\n" +
27 " *\n" +
28 " */\n" +
29 "public class TestInnerClassCallsOuterParent {\n" +
30 "\n" +
31 " public void test() {\n" +
32 " new Runnable() {\n" +
33 " @Override\n" +
34 " public void run() {\n" +
35 " TestInnerClassCallsOuterParent.super.toString();\n" +
36 " }\n" +
37 " };\n" +
38 " }\n" +
39 "}\n"
40 );
41 }
42
43 @Test
44 public final void testGetFirstASTNameImageNull() throws Throwable {
45 parseJava14(ABSTRACT_METHOD_LEVEL_CLASS_DECL);
46 }
47
48 @Test
49 public final void testCastLookaheadProblem() throws Throwable {
50 parseJava14(CAST_LOOKAHEAD_PROBLEM);
51 }
52
53
54
55
56
57 @Test
58 public void testGenericsProblem() {
59 parseJava15(GENERICS_PROBLEM);
60 parseJava17(GENERICS_PROBLEM);
61 }
62
63 @Test
64 public void testParsersCases() {
65 String test15 = readAsString("/net/sourceforge/pmd/ast/ParserCornerCases.java");
66 parseJava15(test15);
67
68 String test17 = readAsString("/net/sourceforge/pmd/ast/ParserCornerCases17.java");
69 parseJava17(test17);
70 }
71
72 private String readAsString(String resource) {
73 InputStream in = ParserCornersTest.class.getResourceAsStream(resource);
74 StringBuilder sb = new StringBuilder();
75 int c;
76 try {
77 while((c = in.read()) != -1) {
78 sb.append((char)c);
79 }
80 } catch (IOException e) {
81
82 } finally {
83 IOUtil.closeQuietly(in);
84 }
85 return sb.toString();
86 }
87
88 private static final String GENERICS_PROBLEM =
89 "public class Test {" + PMD.EOL +
90 " public void test() {" + PMD.EOL +
91 " String o = super.<String> doStuff(\"\");" + PMD.EOL +
92 " }" + PMD.EOL +
93 "}";
94
95 private static final String ABSTRACT_METHOD_LEVEL_CLASS_DECL =
96 "public class Test {" + PMD.EOL +
97 " void bar() {" + PMD.EOL +
98 " abstract class X { public abstract void f(); }" + PMD.EOL +
99 " class Y extends X { public void f() {" + PMD.EOL +
100 " new Y().f();" + PMD.EOL +
101 " }}" + PMD.EOL +
102 " }" + PMD.EOL +
103 "}";
104
105 private static final String CAST_LOOKAHEAD_PROBLEM =
106 "public class BadClass {" + PMD.EOL +
107 " public Class foo() {" + PMD.EOL +
108 " return (byte[].class);" + PMD.EOL +
109 " }" + PMD.EOL +
110 "}";
111
112 public static junit.framework.Test suite() {
113 return new junit.framework.JUnit4TestAdapter(ParserCornersTest.class);
114 }
115 }