author | ykantser |
Thu, 07 May 2015 09:11:49 +0200 | |
changeset 30376 | 2ccf2cf7ea48 |
parent 24973 | 8c4bc3fa4c4e |
child 44423 | 306c020eb154 |
permissions | -rw-r--r-- |
2 | 1 |
/** |
2 |
* @test |
|
3 |
* @bug 4390869 |
|
4 |
* @bug 4460328 |
|
5 |
* @summary Test the new SourceDebugExtension facility |
|
6 |
* |
|
7 |
* @author Robert Field |
|
8 |
* |
|
9 |
* @library .. |
|
30376
2ccf2cf7ea48
8078896: Add @modules as needed to the jdk_svc tests
ykantser
parents:
24973
diff
changeset
|
10 |
* @modules jdk.jdi |
2 | 11 |
* @run build TestScaffold VMConnection TargetListener TargetAdapter InstallSDE |
12 |
* @run compile MangleTest.java |
|
13 |
* @run compile -g onion/pickle/Mangle.java |
|
24973
8c4bc3fa4c4e
6622468: TEST_BUG: Time to retire the @debuggeeVMOptions mechanism used in the com.sun.jdi infrastructure
sla
parents:
2
diff
changeset
|
14 |
* @run driver MangleTest |
2 | 15 |
*/ |
16 |
import com.sun.jdi.*; |
|
17 |
import com.sun.jdi.event.*; |
|
18 |
import com.sun.jdi.request.*; |
|
19 |
||
20 |
import java.util.*; |
|
21 |
import java.io.File; |
|
22 |
||
23 |
public class MangleTest extends TestScaffold { |
|
24 |
static final String op = "onion" + File.separator + "pickle" + File.separator; |
|
25 |
ReferenceType targetClass; |
|
26 |
||
27 |
MangleTest (String args[]) { |
|
28 |
super(args); |
|
29 |
} |
|
30 |
||
31 |
public static void main(String[] args) throws Exception { |
|
32 |
testSetUp(); |
|
33 |
new MangleTest(args).startTests(); |
|
34 |
} |
|
35 |
||
36 |
/********** test set-up **********/ |
|
37 |
||
38 |
static void testSetUp() throws Exception { |
|
39 |
InstallSDE.install(new File(System.getProperty("test.classes", "."), |
|
40 |
op + "Mangle.class"), |
|
41 |
new File(System.getProperty("test.src", "."), |
|
42 |
"Mangle.sde")); |
|
43 |
} |
|
44 |
||
45 |
/********** test assist **********/ |
|
46 |
||
47 |
void checkLocation(Location loc, String label, |
|
48 |
String expectedSourceName, |
|
49 |
String expectedSourcePath, |
|
50 |
int expectedLinenumber) throws Exception { |
|
51 |
String sourceName = loc.sourceName(); |
|
52 |
if (sourceName.equals(expectedSourceName)) { |
|
53 |
println(label + " sourceName: " + sourceName); |
|
54 |
} else { |
|
55 |
failure("FAIL: " + label + |
|
56 |
" expected sourceName " + expectedSourceName + |
|
57 |
" got - " + sourceName); |
|
58 |
} |
|
59 |
||
60 |
String sourcePath = loc.sourcePath(); |
|
61 |
if (sourcePath.equals(expectedSourcePath)) { |
|
62 |
println(label + " sourcePath: " + sourcePath); |
|
63 |
} else { |
|
64 |
failure("FAIL: " + label + |
|
65 |
" expected sourcePath " + expectedSourcePath + |
|
66 |
" got - " + sourcePath); |
|
67 |
} |
|
68 |
||
69 |
int ln = loc.lineNumber(); |
|
70 |
if (ln == expectedLinenumber) { |
|
71 |
println(label + " line number: " + ln); |
|
72 |
} else { |
|
73 |
failure("FAIL: " + label + |
|
74 |
" expected line number " + expectedLinenumber + |
|
75 |
" got - " + ln); |
|
76 |
} |
|
77 |
} |
|
78 |
||
79 |
void checkLocation(String stratum, Location loc, String label, |
|
80 |
String expectedSourceName, |
|
81 |
String expectedSourcePath, |
|
82 |
int expectedLinenumber) throws Exception { |
|
83 |
String sourceName = loc.sourceName(stratum); |
|
84 |
if (sourceName.equals(expectedSourceName)) { |
|
85 |
println(label + "(" + stratum + ")" + |
|
86 |
" sourceName: " + sourceName); |
|
87 |
} else { |
|
88 |
failure("FAIL: " + label + "(" + stratum + ")" + |
|
89 |
" expected sourceName " + expectedSourceName + |
|
90 |
" got " + sourceName); |
|
91 |
} |
|
92 |
||
93 |
String sourcePath = loc.sourcePath(stratum); |
|
94 |
if (sourcePath.equals(expectedSourcePath)) { |
|
95 |
println(label + "(" + stratum + ")" + |
|
96 |
" sourcePath: " + sourcePath); |
|
97 |
} else { |
|
98 |
failure("FAIL: " + label + "(" + stratum + ")" + |
|
99 |
" expected sourcePath " + expectedSourcePath + |
|
100 |
" got " + sourcePath); |
|
101 |
} |
|
102 |
||
103 |
int ln = loc.lineNumber(stratum); |
|
104 |
if (ln == expectedLinenumber) { |
|
105 |
println(label + "(" + stratum + ")" + |
|
106 |
" line number: " + ln); |
|
107 |
} else { |
|
108 |
failure("FAIL: " + label + "(" + stratum + ")" + |
|
109 |
" expected line number " + expectedLinenumber + |
|
110 |
" got " + ln); |
|
111 |
} |
|
112 |
} |
|
113 |
||
114 |
Location getLoc(int index, List locList) { |
|
115 |
return ((Location)(locList.get(index))); |
|
116 |
} |
|
117 |
||
118 |
void lineMatch(int index, String stratum, Location loc, int line) { |
|
119 |
int gotLine = loc.lineNumber(stratum); |
|
120 |
if (gotLine != line) { |
|
121 |
failure("FAIL: index=" + index + |
|
122 |
" " + stratum + " line=" + gotLine + |
|
123 |
" expected: " + line); |
|
124 |
} |
|
125 |
} |
|
126 |
||
127 |
void lineMatch(int index, Location loc, |
|
128 |
int javaLine, int xyzLine, int ratsLine) { |
|
129 |
lineMatch(index, "Java", loc, javaLine); |
|
130 |
lineMatch(index, "XYZ", loc, xyzLine); |
|
131 |
lineMatch(index, "Rats", loc, ratsLine); |
|
132 |
} |
|
133 |
||
134 |
List listWith(String s1) { |
|
135 |
List result = new ArrayList(); |
|
136 |
result.add(s1); |
|
137 |
return result; |
|
138 |
} |
|
139 |
||
140 |
List listWith(String s1, String s2) { |
|
141 |
List result = new ArrayList(); |
|
142 |
result.add(s1); |
|
143 |
result.add(s2); |
|
144 |
return result; |
|
145 |
} |
|
146 |
||
147 |
||
148 |
/********** test core **********/ |
|
149 |
||
150 |
protected void runTests() throws Exception { |
|
151 |
/* |
|
152 |
* Get to the top of main() |
|
153 |
* to determine targetClass |
|
154 |
*/ |
|
155 |
BreakpointEvent bpe = startToMain("onion.pickle.Mangle"); |
|
156 |
targetClass = bpe.location().declaringType(); |
|
157 |
||
158 |
// ref type source name |
|
159 |
String sourceName = targetClass.sourceName(); |
|
160 |
if (sourceName.equals("Mangle.xyz")) { |
|
161 |
println("ref type sourceName: " + sourceName); |
|
162 |
} else { |
|
163 |
failure("FAIL: unexpected ref type sourceName - " + sourceName); |
|
164 |
} |
|
165 |
||
166 |
// ref type source names /paths |
|
167 |
List sourceNames; |
|
168 |
sourceNames = targetClass.sourceNames("Java"); |
|
169 |
if (sourceNames.equals(listWith("Mangle.java"))) { |
|
170 |
println("ref type Java sourceNames: " + sourceNames); |
|
171 |
} else { |
|
172 |
failure("FAIL: unexpected ref type Java sourceNames - " + |
|
173 |
sourceNames); |
|
174 |
} |
|
175 |
sourceNames = targetClass.sourceNames("XYZ"); |
|
176 |
if (sourceNames.equals(listWith("Mangle.xyz", "Incl.xyz"))) { |
|
177 |
println("ref type XYZ sourceNames: " + sourceNames); |
|
178 |
} else { |
|
179 |
failure("FAIL: unexpected ref type XYZ sourceNames - " + |
|
180 |
sourceNames); |
|
181 |
} |
|
182 |
sourceNames = targetClass.sourceNames(null); |
|
183 |
if (sourceNames.equals(listWith("Mangle.xyz", "Incl.xyz"))) { |
|
184 |
println("ref type null sourceNames: " + sourceNames); |
|
185 |
} else { |
|
186 |
failure("FAIL: unexpected ref type null sourceNames - " + |
|
187 |
sourceNames); |
|
188 |
} |
|
189 |
sourceNames = targetClass.sourceNames("Rats"); |
|
190 |
if (sourceNames.equals(listWith("Mangle.rats", "Incl.rats"))) { |
|
191 |
println("ref type Rats sourceNames: " + sourceNames); |
|
192 |
} else { |
|
193 |
failure("FAIL: unexpected ref type Rats sourceNames - " + |
|
194 |
sourceNames); |
|
195 |
} |
|
196 |
List sourcePaths; |
|
197 |
sourcePaths = targetClass.sourcePaths("Java"); |
|
198 |
if (sourcePaths.equals(listWith(op + "Mangle.java"))) { |
|
199 |
println("ref type Java sourcePaths: " + sourcePaths); |
|
200 |
} else { |
|
201 |
failure("FAIL: unexpected ref type Java sourcePaths - " + |
|
202 |
sourcePaths); |
|
203 |
} |
|
204 |
sourcePaths = targetClass.sourcePaths("XYZ"); |
|
205 |
if (sourcePaths.equals(listWith("database14", op + "Incl.xyz"))) { |
|
206 |
println("ref type XYZ sourcePaths: " + sourcePaths); |
|
207 |
} else { |
|
208 |
failure("FAIL: unexpected ref type XYZ sourcePaths - " + |
|
209 |
sourcePaths); |
|
210 |
} |
|
211 |
sourcePaths = targetClass.sourcePaths(null); |
|
212 |
if (sourcePaths.equals(listWith("database14", op + "Incl.xyz"))) { |
|
213 |
println("ref type null sourcePaths: " + sourcePaths); |
|
214 |
} else { |
|
215 |
failure("FAIL: unexpected ref type null sourcePaths - " + |
|
216 |
sourcePaths); |
|
217 |
} |
|
218 |
sourcePaths = targetClass.sourcePaths("Rats"); |
|
219 |
if (sourcePaths.equals(listWith(op + "Mangle.rats", |
|
220 |
"bleep:bleep:Incl.rats"))) { |
|
221 |
println("ref type Rats sourcePaths: " + sourcePaths); |
|
222 |
} else { |
|
223 |
failure("FAIL: unexpected ref type Rats sourcePaths - " + |
|
224 |
sourcePaths); |
|
225 |
} |
|
226 |
||
227 |
Method main = findMethod(targetClass, "main", |
|
228 |
"([Ljava/lang/String;)V"); |
|
229 |
List allLines = main.allLineLocations(); |
|
230 |
List javaLines = main.allLineLocations("Java", null); |
|
231 |
List bogusLines = main.allLineLocations("bogus", null); |
|
232 |
List nullLines = main.allLineLocations(null, null); |
|
233 |
List xyzLines = main.allLineLocations("XYZ", null); |
|
234 |
List ratsLines = main.allLineLocations("Rats", null); |
|
235 |
||
236 |
List tl = new ArrayList(allLines); |
|
237 |
tl.removeAll(xyzLines); |
|
238 |
if (tl.isEmpty() && allLines.size() == xyzLines.size()) { |
|
239 |
println("allLineLocations() is OK"); |
|
240 |
} else { |
|
241 |
failure("FAIL: allLineLocations() wrong - " + allLines); |
|
242 |
} |
|
243 |
||
244 |
tl = new ArrayList(bogusLines); |
|
245 |
tl.removeAll(xyzLines); |
|
246 |
if (tl.isEmpty() && bogusLines.size() == xyzLines.size()) { |
|
247 |
println("allLineLocations(\"bogus\") is OK"); |
|
248 |
} else { |
|
249 |
failure("FAIL: allLineLocations(\"bogus\") wrong - " + bogusLines); |
|
250 |
} |
|
251 |
||
252 |
tl = new ArrayList(nullLines); |
|
253 |
tl.removeAll(xyzLines); |
|
254 |
if (tl.isEmpty() && nullLines.size() == xyzLines.size()) { |
|
255 |
println("allLineLocations(null) is OK"); |
|
256 |
} else { |
|
257 |
failure("FAIL: allLineLocations(null) wrong - " + nullLines); |
|
258 |
} |
|
259 |
||
260 |
if (!javaLines.get(0).equals(ratsLines.get(0))) { |
|
261 |
failure("FAIL: locations should match - " + javaLines.get(0)); |
|
262 |
} |
|
263 |
if (javaLines.get(0).equals(xyzLines.get(0))) { |
|
264 |
failure("FAIL: locations should not match - " + |
|
265 |
javaLines.get(0)); |
|
266 |
} |
|
267 |
if (!javaLines.get(1).equals(ratsLines.get(1))) { |
|
268 |
failure("FAIL: locations should match - " + javaLines.get(1)); |
|
269 |
} |
|
270 |
if (!javaLines.get(1).equals(xyzLines.get(0))) { |
|
271 |
failure("FAIL: locations should match - " + javaLines.get(1)); |
|
272 |
} |
|
273 |
if (javaLines.get(2).equals(ratsLines.get(1))) { |
|
274 |
failure("FAIL: locations should not match - " + |
|
275 |
javaLines.get(1)); |
|
276 |
} |
|
277 |
if (xyzLines.contains(javaLines.get(0))) { |
|
278 |
failure("FAIL: xyz locations should not match - " + |
|
279 |
javaLines.get(0)); |
|
280 |
} |
|
281 |
if (xyzLines.contains(javaLines.get(2))) { |
|
282 |
failure("FAIL: xyz locations should not match - " + |
|
283 |
javaLines.get(2)); |
|
284 |
} |
|
285 |
if (xyzLines.contains(javaLines.get(6))) { |
|
286 |
failure("FAIL: xyz locations should not match - " + |
|
287 |
javaLines.get(6)); |
|
288 |
} |
|
289 |
||
290 |
if (ratsLines.contains(javaLines.get(2))) { |
|
291 |
failure("FAIL: rats locations should not match - " + |
|
292 |
javaLines.get(2)); |
|
293 |
} |
|
294 |
if (ratsLines.contains(javaLines.get(4))) { |
|
295 |
failure("FAIL: rats locations should not match - " + |
|
296 |
javaLines.get(4)); |
|
297 |
} |
|
298 |
if (ratsLines.contains(javaLines.get(5))) { |
|
299 |
failure("FAIL: rats locations should not match - " + |
|
300 |
javaLines.get(5)); |
|
301 |
} |
|
302 |
||
303 |
println("*** Java"); |
|
304 |
for (Iterator it = javaLines.iterator(); it.hasNext(); ) { |
|
305 |
Location loc = (Location)it.next(); |
|
306 |
print("" + loc.lineNumber("Java") + " - "); |
|
307 |
print(loc.sourceName("XYZ") + " : "); |
|
308 |
print("" + loc.lineNumber("XYZ") + " ... "); |
|
309 |
print(loc.sourceName("Rats") + " : "); |
|
310 |
println("" + loc.lineNumber("Rats")); |
|
311 |
} |
|
312 |
||
313 |
println("*** XYZ"); |
|
314 |
for (Iterator it = xyzLines.iterator(); it.hasNext(); ) { |
|
315 |
Location loc = (Location)it.next(); |
|
316 |
print("" + loc.lineNumber("Java") + " - "); |
|
317 |
print(loc.sourceName("XYZ") + " : "); |
|
318 |
print("" + loc.lineNumber("XYZ") + " ... "); |
|
319 |
print(loc.sourceName("Rats") + " : "); |
|
320 |
println("" + loc.lineNumber("Rats")); |
|
321 |
} |
|
322 |
||
323 |
println("*** Rats"); |
|
324 |
for (Iterator it = ratsLines.iterator(); it.hasNext(); ) { |
|
325 |
Location loc = (Location)it.next(); |
|
326 |
print("" + loc.lineNumber("Java") + " - "); |
|
327 |
print(loc.sourceName("XYZ") + " : "); |
|
328 |
print("" + loc.lineNumber("XYZ") + " ... "); |
|
329 |
print(loc.sourceName("Rats") + " : "); |
|
330 |
println("" + loc.lineNumber("Rats")); |
|
331 |
} |
|
332 |
||
333 |
checkLocation(getLoc(0, javaLines), "0", |
|
334 |
"Incl.xyz", |
|
335 |
op + "Incl.xyz", 200); |
|
336 |
checkLocation(null, getLoc(0, javaLines), "0", |
|
337 |
"Incl.xyz", |
|
338 |
op + "Incl.xyz", 200); |
|
339 |
checkLocation("bogus", getLoc(0, javaLines), "0", |
|
340 |
"Incl.xyz", |
|
341 |
op + "Incl.xyz", 200); |
|
342 |
checkLocation("Java", getLoc(0, javaLines), "0", |
|
343 |
"Mangle.java", |
|
344 |
op + "Mangle.java", 4); |
|
345 |
checkLocation("XYZ", getLoc(0, javaLines), "0", |
|
346 |
"Incl.xyz", |
|
347 |
op + "Incl.xyz", 200); |
|
348 |
checkLocation("Rats", getLoc(0, javaLines), "0", |
|
349 |
"Mangle.rats", |
|
350 |
op + "Mangle.rats", 1000); |
|
351 |
||
352 |
checkLocation(getLoc(3, javaLines), "3", |
|
353 |
"Mangle.xyz", |
|
354 |
"database14", 210); |
|
355 |
checkLocation(null, getLoc(3, javaLines), "3", |
|
356 |
"Mangle.xyz", |
|
357 |
"database14", 210); |
|
358 |
checkLocation("bogus", getLoc(3, javaLines), "3", |
|
359 |
"Mangle.xyz", |
|
360 |
"database14", 210); |
|
361 |
checkLocation("Java", getLoc(3, javaLines), "3", |
|
362 |
"Mangle.java", |
|
363 |
op + "Mangle.java", 7); |
|
364 |
checkLocation("XYZ", getLoc(3, javaLines), "3", |
|
365 |
"Mangle.xyz", |
|
366 |
"database14", 210); |
|
367 |
checkLocation("Rats", getLoc(3, javaLines), "3", |
|
368 |
"Incl.rats", |
|
369 |
"bleep:bleep:Incl.rats", 1112); |
|
370 |
||
371 |
checkLocation(getLoc(6, javaLines), "6", |
|
372 |
"Mangle.xyz", |
|
373 |
"database14", 218); |
|
374 |
checkLocation(null, getLoc(6, javaLines), "6", |
|
375 |
"Mangle.xyz", |
|
376 |
"database14", 218); |
|
377 |
checkLocation("bogus", getLoc(6, javaLines), "6", |
|
378 |
"Mangle.xyz", |
|
379 |
"database14", 218); |
|
380 |
checkLocation("Java", getLoc(6, javaLines), "6", |
|
381 |
"Mangle.java", |
|
382 |
op + "Mangle.java", 10); |
|
383 |
checkLocation("XYZ", getLoc(6, javaLines), "6", |
|
384 |
"Mangle.xyz", |
|
385 |
"database14", 218); |
|
386 |
checkLocation("Rats", getLoc(6, javaLines), "6", |
|
387 |
"Incl.rats", |
|
388 |
"bleep:bleep:Incl.rats", 1112); |
|
389 |
||
390 |
lineMatch(0, getLoc(0, javaLines), 4, 200, 1000); |
|
391 |
lineMatch(1, getLoc(1, javaLines), 5, 200, 1111); |
|
392 |
lineMatch(2, getLoc(2, javaLines), 6, 200, 1111); |
|
393 |
lineMatch(3, getLoc(3, javaLines), 7, 210, 1112); |
|
394 |
lineMatch(4, getLoc(4, javaLines), 8, 217, 1112); |
|
395 |
lineMatch(5, getLoc(5, javaLines), 9, 218, 1112); |
|
396 |
lineMatch(6, getLoc(6, javaLines), 10, 218, 1112); |
|
397 |
||
398 |
/* |
|
399 |
* resume the target listening for events |
|
400 |
*/ |
|
401 |
listenUntilVMDisconnect(); |
|
402 |
||
403 |
/* |
|
404 |
* deal with results of test |
|
405 |
* if anything has called failure("foo") testFailed will be true |
|
406 |
*/ |
|
407 |
if (!testFailed) { |
|
408 |
println("MangleTest: passed"); |
|
409 |
} else { |
|
410 |
throw new Exception("MangleTest: failed"); |
|
411 |
} |
|
412 |
} |
|
413 |
} |