8304834: Fix wrapper insertion in TestScaffold.parseArgs(String args[])

Reviewed-by: cjplummer, dholmes
This commit is contained in:
Leonid Mesnik 2023-04-12 17:44:38 +00:00
parent 19380d74e4
commit bc15163386
3 changed files with 44 additions and 29 deletions

@ -30,17 +30,12 @@ com/sun/jdi/EATests.java#id0 8264699 generic-
com/sun/jdi/DeferredStepTest.java 8285422 generic-all
com/sun/jdi/EarlyReturnTest.java 8285422 generic-all
com/sun/jdi/ExceptionEvents.java 8285422 generic-all
com/sun/jdi/FetchLocals.java 8285422 generic-all
com/sun/jdi/Frames2Test.java 8285422 generic-all
com/sun/jdi/GetSetLocalTest.java 8285422 generic-all
com/sun/jdi/JdbMethodExitTest.java 8285422 generic-all
com/sun/jdi/JdbStepTest.java 8285422 generic-all
com/sun/jdi/JdbStopThreadTest.java 8285422 generic-all
com/sun/jdi/JdbStopThreadidTest.java 8285422 generic-all
com/sun/jdi/LaunchCommandLine.java 8285422 generic-all
com/sun/jdi/MethodEntryExitEvents.java 8285422 generic-all
com/sun/jdi/MultiBreakpointsTest.java 8285422 generic-all
com/sun/jdi/NativeInstanceFilter.java 8285422 generic-all
com/sun/jdi/PopAndStepTest.java 8285422 generic-all
com/sun/jdi/PopAsynchronousTest.java 8285422 generic-all
com/sun/jdi/PopSynchronousTest.java 8285422 generic-all

@ -1,5 +1,5 @@
/*
* Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2001, 2023, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -230,7 +230,7 @@ public class MultiBreakpointsTest extends TestScaffold {
nhits = Integer.parseInt(countStr);
}
args = new String[] { "-J-Dnthreads=" + nthreads, "-J-Dnhits=" + nhits} ;
args = new String[] { "-Dnthreads=" + nthreads, "-Dnhits=" + nhits} ;
new MultiBreakpointsTest(args).startTests();
}

@ -461,44 +461,64 @@ abstract public class TestScaffold extends TargetAdapter {
testFailed = true;
}
final List<String> doubleWordArgs = List.of("-cp", "-classpath", "--add-opens", "--class-path",
"--upgrade-module-path", "--add-modules", "-d", "--add-exports", "--patch-module", "--module-path");
private ArgInfo parseArgs(String args[]) {
ArgInfo argInfo = new ArgInfo();
String mainWrapper = System.getProperty("main.wrapper");
if ("Virtual".equals(mainWrapper)) {
argInfo.targetAppCommandLine = TestScaffold.class.getName() + " " + mainWrapper + " ";
} else if ("true".equals(System.getProperty("test.enable.preview"))) {
// the test specified @enablePreview.
argInfo.targetVMArgs += "--enable-preview ";
}
// Parse arguments, like java/j* tools command-line arguments.
// The first argument not-starting with '-' is treated as a classname.
// The other arguments are split to targetVMArgs targetAppCommandLine correspondingly.
// The example of args for line '@run driver Frames2Test -Xss4M' is '-Xss4M' 'Frames2Targ'.
// The result without any wrapper enabled:
// argInfo.targetAppCommandLine : Frames2Targ
// argInfo.targetVMArgs : -Xss4M
// The result with wrapper enabled:
// argInfo.targetAppCommandLine : TestScaffold Virtual Frames2Targ
// argInfo.targetVMArgs : -Xss4M
boolean classNameParsed = false;
for (int i = 0; i < args.length; i++) {
if (args[i].equals("-connect")) {
String arg = args[i].trim();
if (classNameParsed) {
// once classname is read, treat any other arguments as app arguments
argInfo.targetAppCommandLine += (arg + ' ');
continue;
}
if (arg.equals("-connect")) {
i++;
argInfo.connectorSpec = args[i];
} else if (args[i].equals("-trace")) {
} else if (arg.equals("-trace")) {
i++;
argInfo.traceFlags = Integer.decode(args[i]).intValue();
} else if (args[i].equals("-redefstart")) {
} else if (arg.equals("-redefstart")) {
redefineAtStart = true;
} else if (args[i].equals("-redefevent")) {
} else if (arg.equals("-redefevent")) {
redefineAtEvents = true;
} else if (args[i].equals("-redefasync")) {
} else if (arg.equals("-redefasync")) {
redefineAsynchronously = true;
} else if (args[i].startsWith("-J")) {
argInfo.targetVMArgs += (args[i].substring(2) + ' ');
/*
* classpath can span two arguments so we need to handle
* it specially.
*/
if (args[i].equals("-J-classpath")) {
} else if (arg.startsWith("-J")) {
throw new RuntimeException("-J-option format is not supported. Incorrect arg: " + arg);
} else if (arg.startsWith("-")) {
argInfo.targetVMArgs += (arg + ' ');
if (doubleWordArgs.contains(arg)) {
i++;
argInfo.targetVMArgs += (args[i] + ' ');
}
} else {
argInfo.targetAppCommandLine += (args[i] + ' ');
classNameParsed = true;
argInfo.targetAppCommandLine += (arg + ' ');
}
}
// Need to change args to run wrapper using command like 'TestScaffold Virtual <app-name>'
String mainWrapper = System.getProperty("main.wrapper");
if (mainWrapper != null && !argInfo.targetAppCommandLine.isEmpty()) {
argInfo.targetAppCommandLine = TestScaffold.class.getName() + ' '
+ mainWrapper + ' ' + argInfo.targetAppCommandLine;
} else if ("true".equals(System.getProperty("test.enable.preview"))) {
// the test specified @enablePreview.
argInfo.targetVMArgs += "--enable-preview ";
}
return argInfo;
}