Added
Link Here
|
1 |
/******************************************************************************* |
2 |
* Copyright (c) 2009 IBM Corporation and others. |
3 |
* All rights reserved. This program and the accompanying materials |
4 |
* are made available under the terms of the Eclipse Public License v1.0 |
5 |
* which accompanies this distribution, and is available at |
6 |
* http://www.eclipse.org/legal/epl-v10.html |
7 |
* |
8 |
* Contributors: |
9 |
* IBM Corporation - initial API and implementation |
10 |
*******************************************************************************/ |
11 |
package org.eclipse.jdt.core.tests.compiler.regression; |
12 |
|
13 |
import java.io.File; |
14 |
|
15 |
import junit.framework.Test; |
16 |
|
17 |
public class InnerEmulationTest_1_5 extends AbstractRegressionTest { |
18 |
static { |
19 |
// TESTS_NAMES = new String[] { "Bug58069" }; |
20 |
// TESTS_NUMBERS = new int[] { 13 }; |
21 |
// TESTS_RANGE = new int[] { 144, -1 }; |
22 |
} |
23 |
public InnerEmulationTest_1_5(String name) { |
24 |
super(name); |
25 |
} |
26 |
public static Test suite() { |
27 |
return buildMinimalComplianceTestSuite(testClass(), F_1_5); |
28 |
} |
29 |
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=275381 |
30 |
public void test1() throws Exception { |
31 |
this.runConformTest(new String[] { |
32 |
"X.java", |
33 |
"import java.util.Collection;\n" + |
34 |
"import java.util.Map;\n" + |
35 |
"public class X {\n" + |
36 |
" public void foo(Collection<? extends Map.Entry> args) { /* dummy */ }\n" + |
37 |
"}" |
38 |
}); |
39 |
String expectedOutput = |
40 |
" Inner classes:\n" + |
41 |
" [inner class info: #25 java/util/Map$Entry, outer class info: #27 java/util/Map\n" + |
42 |
" inner name: #29 Entry, accessflags: 1545 public abstract static]\n"; |
43 |
checkDisassembledClassFile(OUTPUT_DIR + File.separator + "X.class", "X", expectedOutput); |
44 |
} |
45 |
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=275381 |
46 |
public void test2() throws Exception { |
47 |
this.runConformTest(new String[] { |
48 |
"p/X.java", |
49 |
"package p;\n" + |
50 |
"import java.util.Collection;\n" + |
51 |
"import java.util.Map;\n" + |
52 |
"public class X {\n" + |
53 |
" public void foo(Map.Entry args) { /* dummy */ }\n" + |
54 |
"}" |
55 |
}); |
56 |
String expectedOutput = |
57 |
" Inner classes:\n" + |
58 |
" [inner class info: #21 java/util/Map$Entry, outer class info: #23 java/util/Map\n" + |
59 |
" inner name: #25 Entry, accessflags: 1545 public abstract static]\n"; |
60 |
checkDisassembledClassFile(OUTPUT_DIR + File.separator + "p" + File.separator + "X.class", "X", expectedOutput); |
61 |
} |
62 |
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=275381 |
63 |
public void test3() throws Exception { |
64 |
this.runConformTest(new String[] { |
65 |
"X.java", |
66 |
"import java.util.Map;\n" + |
67 |
"import java.util.List;\n" + |
68 |
"public class X {\n" + |
69 |
" <U extends List<?>, T extends Map.Entry> X(List<U> lu, T t) {\n" + |
70 |
" }\n" + |
71 |
"}" |
72 |
}); |
73 |
String expectedOutput = |
74 |
" Inner classes:\n" + |
75 |
" [inner class info: #27 java/util/Map$Entry, outer class info: #29 java/util/Map\n" + |
76 |
" inner name: #31 Entry, accessflags: 1545 public abstract static]\n"; |
77 |
checkDisassembledClassFile(OUTPUT_DIR + File.separator + "X.class", "X", expectedOutput); |
78 |
} |
79 |
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=275381 |
80 |
public void test4() throws Exception { |
81 |
this.runConformTest(new String[] { |
82 |
"X.java", |
83 |
"import java.util.Map;\n" + |
84 |
"import java.util.List;\n" + |
85 |
"public class X<T extends Object & Comparable<? super Map.Entry>> {}" |
86 |
}); |
87 |
String expectedOutput = |
88 |
" Inner classes:\n" + |
89 |
" [inner class info: #21 java/util/Map$Entry, outer class info: #23 java/util/Map\n" + |
90 |
" inner name: #25 Entry, accessflags: 1545 public abstract static]\n"; |
91 |
checkDisassembledClassFile(OUTPUT_DIR + File.separator + "X.class", "X", expectedOutput); |
92 |
} |
93 |
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=275381 |
94 |
public void test5() throws Exception { |
95 |
this.runConformTest(new String[] { |
96 |
"p/X.java", |
97 |
"package p;\n" + |
98 |
"import java.util.Collection;\n" + |
99 |
"import java.util.Map;\n" + |
100 |
"public class X {\n" + |
101 |
" public void foo(Map.Entry<String, String> args) { /* dummy */ }\n" + |
102 |
"}" |
103 |
}); |
104 |
String expectedOutput = |
105 |
" Inner classes:\n" + |
106 |
" [inner class info: #25 java/util/Map$Entry, outer class info: #27 java/util/Map\n" + |
107 |
" inner name: #29 Entry, accessflags: 1545 public abstract static]\n"; |
108 |
checkDisassembledClassFile(OUTPUT_DIR + File.separator + "p" + File.separator + "X.class", "X", expectedOutput); |
109 |
} |
110 |
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=275381 |
111 |
public void test6() throws Exception { |
112 |
this.runConformTest(new String[] { |
113 |
"p/X.java", |
114 |
"package p;\n" + |
115 |
"import java.util.Collection;\n" + |
116 |
"import java.util.Map;\n" + |
117 |
"public class X {\n" + |
118 |
" Map.Entry<String, String> f;\n" + |
119 |
"}" |
120 |
}); |
121 |
String expectedOutput = |
122 |
" Inner classes:\n" + |
123 |
" [inner class info: #21 java/util/Map$Entry, outer class info: #23 java/util/Map\n" + |
124 |
" inner name: #25 Entry, accessflags: 1545 public abstract static]\n"; |
125 |
checkDisassembledClassFile(OUTPUT_DIR + File.separator + "p" + File.separator + "X.class", "X", expectedOutput); |
126 |
} |
127 |
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=275381 |
128 |
public void test7() throws Exception { |
129 |
this.runConformTest(new String[] { |
130 |
"p/X.java", |
131 |
"package p;\n" + |
132 |
"import java.util.Collection;\n" + |
133 |
"import java.util.Map;\n" + |
134 |
"public class X<E extends Object & Map.Entry<String, E>> {\n" + |
135 |
"}" |
136 |
}); |
137 |
String expectedOutput = |
138 |
" Inner classes:\n" + |
139 |
" [inner class info: #21 java/util/Map$Entry, outer class info: #23 java/util/Map\n" + |
140 |
" inner name: #25 Entry, accessflags: 1545 public abstract static]\n"; |
141 |
checkDisassembledClassFile(OUTPUT_DIR + File.separator + "p" + File.separator + "X.class", "X", expectedOutput); |
142 |
} |
143 |
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=275381 |
144 |
public void test8() throws Exception { |
145 |
this.runConformTest(new String[] { |
146 |
"p/X.java", |
147 |
"package p;\n" + |
148 |
"import java.util.Collection;\n" + |
149 |
"import java.util.Map;\n" + |
150 |
"class A {\n" + |
151 |
" static class B{}\n" + |
152 |
"}\n" + |
153 |
"public class X<E extends Object & Map.Entry<E, A.B>> {\n" + |
154 |
"}" |
155 |
}); |
156 |
String expectedOutput = |
157 |
" Inner classes:\n" + |
158 |
" [inner class info: #21 java/util/Map$Entry, outer class info: #23 java/util/Map\n" + |
159 |
" inner name: #25 Entry, accessflags: 1545 public abstract static],\n" + |
160 |
" [inner class info: #26 p/A$B, outer class info: #28 p/A\n" + |
161 |
" inner name: #30 B, accessflags: 8 static]\n"; |
162 |
checkDisassembledClassFile(OUTPUT_DIR + File.separator + "p" + File.separator + "X.class", "X", expectedOutput); |
163 |
} |
164 |
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=275381 |
165 |
public void test9() throws Exception { |
166 |
this.runConformTest(new String[] { |
167 |
"p/X.java", |
168 |
"package p;\n" + |
169 |
"import java.util.Collection;\n" + |
170 |
"import java.util.Map;\n" + |
171 |
"class A {\n" + |
172 |
" static class B{}\n" + |
173 |
"}\n" + |
174 |
"public class X {\n" + |
175 |
" <E extends Object & Map.Entry<E, A.B>> void foo(E e) {}\n" + |
176 |
"}" |
177 |
}); |
178 |
String expectedOutput = |
179 |
" Inner classes:\n" + |
180 |
" [inner class info: #25 java/util/Map$Entry, outer class info: #27 java/util/Map\n" + |
181 |
" inner name: #29 Entry, accessflags: 1545 public abstract static],\n" + |
182 |
" [inner class info: #30 p/A$B, outer class info: #32 p/A\n" + |
183 |
" inner name: #34 B, accessflags: 8 static]\n"; |
184 |
checkDisassembledClassFile(OUTPUT_DIR + File.separator + "p" + File.separator + "X.class", "X", expectedOutput); |
185 |
} |
186 |
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=275381 |
187 |
public void test10() throws Exception { |
188 |
this.runConformTest(new String[] { |
189 |
"p/X.java", |
190 |
"package p;\n" + |
191 |
"import java.util.Collection;\n" + |
192 |
"import java.util.Map;\n" + |
193 |
"class A {\n" + |
194 |
" static interface B<U, T>{}\n" + |
195 |
"}\n" + |
196 |
"class C {\n" + |
197 |
" static class D<U, T>{}\n" + |
198 |
"}\n" + |
199 |
"public class X {\n" + |
200 |
" <E extends Object & A.B<E, Map.Entry<E, C.D>>> void foo(E e) {}\n" + |
201 |
"}" |
202 |
}); |
203 |
String expectedOutput = |
204 |
" Inner classes:\n" + |
205 |
" [inner class info: #25 java/util/Map$Entry, outer class info: #27 java/util/Map\n" + |
206 |
" inner name: #29 Entry, accessflags: 1545 public abstract static],\n" + |
207 |
" [inner class info: #30 p/A$B, outer class info: #32 p/A\n" + |
208 |
" inner name: #34 B, accessflags: 1544 abstract static],\n" + |
209 |
" [inner class info: #35 p/C$D, outer class info: #37 p/C\n" + |
210 |
" inner name: #39 D, accessflags: 8 static]\n"; |
211 |
checkDisassembledClassFile(OUTPUT_DIR + File.separator + "p" + File.separator + "X.class", "X", expectedOutput); |
212 |
} |
213 |
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=275381 |
214 |
public void test11() throws Exception { |
215 |
this.runConformTest(new String[] { |
216 |
"X.java", |
217 |
"import java.util.*;\n" + |
218 |
"\n" + |
219 |
" public class X {\n" + |
220 |
" \n" + |
221 |
" static abstract class SelfType<T extends SelfType<T>>{\n" + |
222 |
" }\n" + |
223 |
" \n" + |
224 |
" static class SuperType extends SelfType<SuperType>{\n" + |
225 |
" }\n" + |
226 |
" \n" + |
227 |
" static class SubType extends SuperType{}\n" + |
228 |
" \n" + |
229 |
" static <T extends SelfType<T>> List<T> makeSingletonList(T t){\n" + |
230 |
" return Collections.singletonList(t);\n" + |
231 |
" }\n" + |
232 |
" \n" + |
233 |
" static <T extends SelfType<T>,S extends T> List<T> makeSingletonList2(S s){\n" + |
234 |
" return Collections.singletonList((T)s); // #0\n" + |
235 |
" }\n" + |
236 |
"}" |
237 |
}); |
238 |
String expectedOutput = |
239 |
" Inner classes:\n" + |
240 |
" [inner class info: #35 X$SelfType, outer class info: #1 X\n" + |
241 |
" inner name: #37 SelfType, accessflags: 1032 abstract static],\n" + |
242 |
" [inner class info: #38 X$SubType, outer class info: #1 X\n" + |
243 |
" inner name: #40 SubType, accessflags: 8 static],\n" + |
244 |
" [inner class info: #41 X$SuperType, outer class info: #1 X\n" + |
245 |
" inner name: #43 SuperType, accessflags: 8 static]\n"; |
246 |
checkDisassembledClassFile(OUTPUT_DIR + File.separator + "X.class", "X", expectedOutput); |
247 |
} |
248 |
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=275381 |
249 |
public void test12() throws Exception { |
250 |
this.runConformTest(new String[] { |
251 |
"p/X.java", |
252 |
"package p;\n" + |
253 |
"import java.util.Collection;\n" + |
254 |
"import java.util.Map;\n" + |
255 |
"public class X {\n" + |
256 |
" Collection<Map.Entry> field;\n" + |
257 |
"}" |
258 |
}); |
259 |
String expectedOutput = |
260 |
" Inner classes:\n" + |
261 |
" [inner class info: #21 java/util/Map$Entry, outer class info: #23 java/util/Map\n" + |
262 |
" inner name: #25 Entry, accessflags: 1545 public abstract static]\n"; |
263 |
checkDisassembledClassFile(OUTPUT_DIR + File.separator + "p" + File.separator + "X.class", "X", expectedOutput); |
264 |
} |
265 |
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=275381 |
266 |
public void test13() throws Exception { |
267 |
this.runConformTest(new String[] { |
268 |
"p/X.java", |
269 |
"package p;\n" + |
270 |
"import java.util.Collection;\n" + |
271 |
"import java.util.Map;\n" + |
272 |
"class A {\n" + |
273 |
" static interface B<U, T>{}\n" + |
274 |
"}\n" + |
275 |
"class C {\n" + |
276 |
" static class D<U, T>{}\n" + |
277 |
"}\n" + |
278 |
"public class X extends C.D implements A.B {\n" + |
279 |
"}" |
280 |
}); |
281 |
String expectedOutput = |
282 |
" Inner classes:\n" + |
283 |
" [inner class info: #5 p/A$B, outer class info: #19 p/A\n" + |
284 |
" inner name: #21 B, accessflags: 1544 abstract static],\n" + |
285 |
" [inner class info: #3 p/C$D, outer class info: #22 p/C\n" + |
286 |
" inner name: #24 D, accessflags: 8 static]\n"; |
287 |
checkDisassembledClassFile(OUTPUT_DIR + File.separator + "p" + File.separator + "X.class", "X", expectedOutput); |
288 |
} |
289 |
public static Class testClass() { |
290 |
return InnerEmulationTest_1_5.class; |
291 |
} |
292 |
} |