On Fri, 8 Jul 2022 12:10:29 GMT, Jaikiran Pai <j...@openjdk.org> wrote:
>> I removed a section of via JDK_JAVA_OPTIONS because including main class is >> not allowed in the specification. >> This behavior is added in JDK-8170832, which add JAVA_OPTIONS environment >> variable. At this time, this test is mismatch with the specification. >> I tried to test and get Passed on Japanese Windows environment. >> Could you review this fix, please? > > The change looks fine to me since in its current form the usage of > `JDK_JAVA_OPTIONS` is incorrect. > > Having said that and looking at the history of this file, I think, this part > of the test was added to check if the `java` launcher would be able to read > an environment variable (specifically the `JDK_JAVA_OPTIONS`) whose value was > in `MS932` encoding, and pass it along as a correctly encoded String, all the > way to the main method of the application. If we remove this section of the > test, then we would be skipping that code path completely. > > Perhaps this part of the test could be modified a bit to let it pass the > `JDK_JAVA_OPTIONS` environment variable with a `MS932` encoded value that > acts some option to the java launcher, instead of being the argument to the > main method? That way, you won't have to specify the main class name in the > value of the environment variable. Specifically, something like: > > > diff --git a/test/jdk/tools/launcher/I18NArgTest.java > b/test/jdk/tools/launcher/I18NArgTest.java > index fa09736da2f..2ba724d6f1d 100644 > --- a/test/jdk/tools/launcher/I18NArgTest.java > +++ b/test/jdk/tools/launcher/I18NArgTest.java > @@ -97,12 +97,17 @@ public class I18NArgTest extends TestHelper { > > // Test via JDK_JAVA_OPTIONS > Map<String, String> env = new HashMap<>(); > - String cmd = "-Dtest.src=" + TEST_SOURCES_DIR.getAbsolutePath() + > - " -Dtest.classes=" + TEST_CLASSES_DIR.getAbsolutePath() + > - " -cp " + TEST_CLASSES_DIR.getAbsolutePath() + > - " I18NArgTest " + unicodeStr + " " + hexValue; > - env.put("JDK_JAVA_OPTIONS", cmd); > - tr = doExec(env, javaCmd); > + String sysPropName = "foo.bar"; > + // pass "-Dfoo.bar=<unicodestr>" through the JDK_JAVA_OPTIONS > environment variable. > + // we expect that system property value to be passed along to the > main method with the > + // correct encoding > + String jdkJavaOpts = "-D" + sysPropName + "=" + unicodeStr; > + env.put("JDK_JAVA_OPTIONS", jdkJavaOpts); > + tr = doExec(env,javaCmd, > + "-Dtest.src=" + TEST_SOURCES_DIR.getAbsolutePath(), > + "-Dtest.classes=" + TEST_CLASSES_DIR.getAbsolutePath(), > + "-cp", TEST_CLASSES_DIR.getAbsolutePath(), > + "I18NArgTest", unicodeStr, hexValue, sysPropName); > System.out.println(tr.testOutput); > if (!tr.isOK()) { > System.err.println(tr); > @@ -125,5 +130,23 @@ public class I18NArgTest extends TestHelper { > "expected:" + expected + " obtained:" + hexValue; > throw new RuntimeException(message); > } > + if (args.length == 3) { > + // verify the value of the system property matches the expected > value > + String sysPropName = args[2]; > + String sysPropVal = System.getProperty(sysPropName); > + if (sysPropVal == null) { > + throw new RuntimeException("Missing system property " + > sysPropName); > + } > + String sysPropHexVal = ""; > + for (int i = 0; i < sysPropVal.length(); i++) { > + sysPropHexVal = > sysPropHexVal.concat(Integer.toHexString(sysPropVal.charAt(i))); > + } > + System.out.println("System property " + sysPropName + " computed > hex value: " > + + sysPropHexVal); > + if (!sysPropHexVal.equals(expected)) { > + throw new RuntimeException("Unexpected value in system > property, expected " > + + expected + ", but got " + sysPropHexVal); > + } > + } > } > } > > I haven't tested this change, so you might have to experiment with it a bit. > What do you think? @jaikiran Thank you for your comment. I agree to the additional check. I run the test you proposed, but it failed. I'm surveying that reason. ------------- PR: https://git.openjdk.org/jdk/pull/9389