Skip to content

Commit bc15163

Browse files
committed
8304834: Fix wrapper insertion in TestScaffold.parseArgs(String args[])
Reviewed-by: cjplummer, dholmes
1 parent 19380d7 commit bc15163

File tree

3 files changed

+44
-29
lines changed

3 files changed

+44
-29
lines changed

test/jdk/ProblemList-svc-vthread.txt

-5
Original file line numberDiff line numberDiff line change
@@ -30,17 +30,12 @@ com/sun/jdi/EATests.java#id0 8264699 generic-
3030
com/sun/jdi/DeferredStepTest.java 8285422 generic-all
3131
com/sun/jdi/EarlyReturnTest.java 8285422 generic-all
3232
com/sun/jdi/ExceptionEvents.java 8285422 generic-all
33-
com/sun/jdi/FetchLocals.java 8285422 generic-all
34-
com/sun/jdi/Frames2Test.java 8285422 generic-all
35-
com/sun/jdi/GetSetLocalTest.java 8285422 generic-all
3633
com/sun/jdi/JdbMethodExitTest.java 8285422 generic-all
3734
com/sun/jdi/JdbStepTest.java 8285422 generic-all
3835
com/sun/jdi/JdbStopThreadTest.java 8285422 generic-all
3936
com/sun/jdi/JdbStopThreadidTest.java 8285422 generic-all
40-
com/sun/jdi/LaunchCommandLine.java 8285422 generic-all
4137
com/sun/jdi/MethodEntryExitEvents.java 8285422 generic-all
4238
com/sun/jdi/MultiBreakpointsTest.java 8285422 generic-all
43-
com/sun/jdi/NativeInstanceFilter.java 8285422 generic-all
4439
com/sun/jdi/PopAndStepTest.java 8285422 generic-all
4540
com/sun/jdi/PopAsynchronousTest.java 8285422 generic-all
4641
com/sun/jdi/PopSynchronousTest.java 8285422 generic-all

test/jdk/com/sun/jdi/MultiBreakpointsTest.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2001, 2023, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -230,7 +230,7 @@ public static void main(String[] args) throws Exception {
230230
nhits = Integer.parseInt(countStr);
231231
}
232232

233-
args = new String[] { "-J-Dnthreads=" + nthreads, "-J-Dnhits=" + nhits} ;
233+
args = new String[] { "-Dnthreads=" + nthreads, "-Dnhits=" + nhits} ;
234234
new MultiBreakpointsTest(args).startTests();
235235
}
236236

test/jdk/com/sun/jdi/TestScaffold.java

+42-22
Original file line numberDiff line numberDiff line change
@@ -461,44 +461,64 @@ protected void failure(String str) {
461461
testFailed = true;
462462
}
463463

464+
final List<String> doubleWordArgs = List.of("-cp", "-classpath", "--add-opens", "--class-path",
465+
"--upgrade-module-path", "--add-modules", "-d", "--add-exports", "--patch-module", "--module-path");
466+
464467
private ArgInfo parseArgs(String args[]) {
465468
ArgInfo argInfo = new ArgInfo();
466-
String mainWrapper = System.getProperty("main.wrapper");
467-
if ("Virtual".equals(mainWrapper)) {
468-
argInfo.targetAppCommandLine = TestScaffold.class.getName() + " " + mainWrapper + " ";
469-
} else if ("true".equals(System.getProperty("test.enable.preview"))) {
470-
// the test specified @enablePreview.
471-
argInfo.targetVMArgs += "--enable-preview ";
472-
}
473-
469+
// Parse arguments, like java/j* tools command-line arguments.
470+
// The first argument not-starting with '-' is treated as a classname.
471+
// The other arguments are split to targetVMArgs targetAppCommandLine correspondingly.
472+
// The example of args for line '@run driver Frames2Test -Xss4M' is '-Xss4M' 'Frames2Targ'.
473+
// The result without any wrapper enabled:
474+
// argInfo.targetAppCommandLine : Frames2Targ
475+
// argInfo.targetVMArgs : -Xss4M
476+
// The result with wrapper enabled:
477+
// argInfo.targetAppCommandLine : TestScaffold Virtual Frames2Targ
478+
// argInfo.targetVMArgs : -Xss4M
479+
boolean classNameParsed = false;
474480
for (int i = 0; i < args.length; i++) {
475-
if (args[i].equals("-connect")) {
481+
String arg = args[i].trim();
482+
if (classNameParsed) {
483+
// once classname is read, treat any other arguments as app arguments
484+
argInfo.targetAppCommandLine += (arg + ' ');
485+
continue;
486+
}
487+
if (arg.equals("-connect")) {
476488
i++;
477489
argInfo.connectorSpec = args[i];
478-
} else if (args[i].equals("-trace")) {
490+
} else if (arg.equals("-trace")) {
479491
i++;
480492
argInfo.traceFlags = Integer.decode(args[i]).intValue();
481-
} else if (args[i].equals("-redefstart")) {
493+
} else if (arg.equals("-redefstart")) {
482494
redefineAtStart = true;
483-
} else if (args[i].equals("-redefevent")) {
495+
} else if (arg.equals("-redefevent")) {
484496
redefineAtEvents = true;
485-
} else if (args[i].equals("-redefasync")) {
497+
} else if (arg.equals("-redefasync")) {
486498
redefineAsynchronously = true;
487-
} else if (args[i].startsWith("-J")) {
488-
argInfo.targetVMArgs += (args[i].substring(2) + ' ');
489-
490-
/*
491-
* classpath can span two arguments so we need to handle
492-
* it specially.
493-
*/
494-
if (args[i].equals("-J-classpath")) {
499+
} else if (arg.startsWith("-J")) {
500+
throw new RuntimeException("-J-option format is not supported. Incorrect arg: " + arg);
501+
} else if (arg.startsWith("-")) {
502+
argInfo.targetVMArgs += (arg + ' ');
503+
if (doubleWordArgs.contains(arg)) {
495504
i++;
496505
argInfo.targetVMArgs += (args[i] + ' ');
497506
}
498507
} else {
499-
argInfo.targetAppCommandLine += (args[i] + ' ');
508+
classNameParsed = true;
509+
argInfo.targetAppCommandLine += (arg + ' ');
500510
}
501511
}
512+
513+
// Need to change args to run wrapper using command like 'TestScaffold Virtual <app-name>'
514+
String mainWrapper = System.getProperty("main.wrapper");
515+
if (mainWrapper != null && !argInfo.targetAppCommandLine.isEmpty()) {
516+
argInfo.targetAppCommandLine = TestScaffold.class.getName() + ' '
517+
+ mainWrapper + ' ' + argInfo.targetAppCommandLine;
518+
} else if ("true".equals(System.getProperty("test.enable.preview"))) {
519+
// the test specified @enablePreview.
520+
argInfo.targetVMArgs += "--enable-preview ";
521+
}
502522
return argInfo;
503523
}
504524

0 commit comments

Comments
 (0)