# HG changeset patch # User rfield # Date 1485369821 28800 # Node ID 7797472a9ed5b5d45edcce3f73d1df021e4a18d4 # Parent 9e917e04f53cc5b6fe4e2c94d43dfcc03e75e478 8171343: jshell tool: missing options: --help-extra --show-version Reviewed-by: jlahoda diff -r 9e917e04f53c -r 7797472a9ed5 langtools/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellTool.java --- a/langtools/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellTool.java Wed Jan 25 10:22:06 2017 -0800 +++ b/langtools/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellTool.java Wed Jan 25 10:43:41 2017 -0800 @@ -426,7 +426,8 @@ private final OptionSpecBuilder argHelp = parser.acceptsAll(asList("h", "help")); private final OptionSpecBuilder argVersion = parser.accepts("version"); private final OptionSpecBuilder argFullVersion = parser.accepts("full-version"); - private final OptionSpecBuilder argX = parser.accepts("X"); + private final OptionSpecBuilder argShowVersion = parser.accepts("show-version"); + private final OptionSpecBuilder argHelpExtra = parser.acceptsAll(asList("X", "help-extra")); private String feedbackMode = null; private Startup initialStartup = null; @@ -450,7 +451,7 @@ printUsage(); return null; } - if (options.has(argX)) { + if (options.has(argHelpExtra)) { printUsageX(); return null; } @@ -462,6 +463,9 @@ cmdout.printf("jshell %s\n", fullVersion()); return null; } + if (options.has(argShowVersion)) { + cmdout.printf("jshell %s\n", version()); + } if ((options.valuesOf(argFeedback).size() + (options.has(argQ) ? 1 : 0) + (options.has(argS) ? 1 : 0) + diff -r 9e917e04f53c -r 7797472a9ed5 langtools/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/resources/l10n.properties --- a/langtools/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/resources/l10n.properties Wed Jan 25 10:22:06 2017 -0800 +++ b/langtools/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/resources/l10n.properties Wed Jan 25 10:43:41 2017 -0800 @@ -187,9 +187,10 @@ \ Use one -R for each remote flag or flag argument\n\ \ -C Pass to the compiler.\n\ \ Use one -C for each compiler flag or flag argument\n\ -\ --help Print this synopsis of standard options\n\ -\ --version Version information\n\ -\ -X Print help on non-standard options\n +\ --version Print version information and exit\n\ +\ --show-version Print version information and continue\n\ +\ --help Print this synopsis of standard options and exit\n\ +\ --help-extra, -X Print help on non-standard options and exit\n help.usage.x = \ \ --add-exports / Export specified module-private package to snippets\n\ \ --execution Specify an alternate execution engine.\n\ diff -r 9e917e04f53c -r 7797472a9ed5 langtools/test/jdk/jshell/StartOptionTest.java --- a/langtools/test/jdk/jshell/StartOptionTest.java Wed Jan 25 10:22:06 2017 -0800 +++ b/langtools/test/jdk/jshell/StartOptionTest.java Wed Jan 25 10:43:41 2017 -0800 @@ -22,7 +22,7 @@ */ /* - * @test 8151754 8080883 8160089 8170162 8166581 8172102 + * @test 8151754 8080883 8160089 8170162 8166581 8172102 8171343 * @summary Testing start-up options. * @modules jdk.compiler/com.sun.tools.javac.api * jdk.compiler/com.sun.tools.javac.main @@ -33,7 +33,9 @@ * @run testng StartOptionTest */ +import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; +import java.io.InputStream; import java.io.PrintStream; import java.nio.charset.StandardCharsets; import java.nio.file.Path; @@ -46,6 +48,7 @@ import org.testng.annotations.Test; import jdk.jshell.tool.JavaShellToolBuilder; import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertTrue; import static org.testng.Assert.fail; @@ -57,12 +60,14 @@ private ByteArrayOutputStream console; private ByteArrayOutputStream userout; private ByteArrayOutputStream usererr; + private InputStream cmdInStream; private JavaShellToolBuilder builder() { return JavaShellToolBuilder .builder() .out(new PrintStream(cmdout), new PrintStream(console), new PrintStream(userout)) .err(new PrintStream(cmderr), new PrintStream(usererr)) + .in(cmdInStream, null) .persistence(new HashMap<>()) .env(new HashMap<>()) .locale(Locale.ROOT); @@ -119,6 +124,7 @@ console = new ByteArrayOutputStream(); userout = new ByteArrayOutputStream(); usererr = new ByteArrayOutputStream(); + cmdInStream = new ByteArrayInputStream("/exit\n".getBytes()); } protected String writeToFile(String stuff) throws Exception { @@ -138,6 +144,19 @@ start(s -> { assertTrue(s.split("\n").length >= 7, "Not enough usage lines: " + s); assertTrue(s.startsWith("Usage: jshell "), "Unexpect usage start: " + s); + assertTrue(s.contains("--show-version"), "Expected help: " + s); + assertFalse(s.contains("Welcome"), "Unexpected start: " + s); + }, null, null, opt); + } + } + + public void testHelpExtra() throws Exception { + for (String opt : new String[]{"-X", "--help-extra"}) { + start(s -> { + assertTrue(s.split("\n").length >= 5, "Not enough help-extra lines: " + s); + assertTrue(s.contains("--add-exports"), "Expected --add-exports: " + s); + assertTrue(s.contains("--execution"), "Expected --add-exports: " + s); + assertFalse(s.contains("Welcome"), "Unexpected start: " + s); }, null, null, opt); } } @@ -201,7 +220,29 @@ } public void testVersion() throws Exception { - start(s -> assertTrue(s.startsWith("jshell"), "unexpected version: " + s), null, null, "--version"); + start( + s -> { + assertTrue(s.startsWith("jshell"), "unexpected version: " + s); + assertFalse(s.contains("Welcome"), "Unexpected start: " + s); + }, + null, null, + "--version"); + } + + public void testShowVersion() throws Exception { + runShell("--show-version"); + check(cmdout, + s -> { + assertTrue(s.startsWith("jshell"), "unexpected version: " + s); + assertTrue(s.contains("Welcome"), "Expected start (but got no welcome): " + s); + }, + "cmdout"); + check(cmderr, null, "cmderr"); + check(console, + s -> assertTrue(s.trim().startsWith("jshell>"), "Expected prompt, got: " + s), + "console"); + check(userout, null, "userout"); + check(usererr, null, "usererr"); } @AfterMethod @@ -211,5 +252,6 @@ console = null; userout = null; usererr = null; + cmdInStream = null; } } diff -r 9e917e04f53c -r 7797472a9ed5 langtools/test/jdk/jshell/ToolProviderTest.java --- a/langtools/test/jdk/jshell/ToolProviderTest.java Wed Jan 25 10:22:06 2017 -0800 +++ b/langtools/test/jdk/jshell/ToolProviderTest.java Wed Jan 25 10:43:41 2017 -0800 @@ -23,16 +23,18 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; +import java.io.InputStream; import java.util.ServiceLoader; import java.util.function.Consumer; import javax.tools.Tool; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; +import static org.testng.Assert.assertTrue; import static org.testng.Assert.fail; /* * @test - * @bug 8170044 + * @bug 8170044 8171343 * @summary Test ServiceLoader launching of jshell tool * @modules jdk.compiler/com.sun.tools.javac.api * jdk.compiler/com.sun.tools.javac.main @@ -47,12 +49,14 @@ private ByteArrayOutputStream cmdout; private ByteArrayOutputStream cmderr; + private InputStream cmdInStream; @BeforeMethod @Override public void setUp() { cmdout = new ByteArrayOutputStream(); cmderr = new ByteArrayOutputStream(); + cmdInStream = new ByteArrayInputStream("/exit\n".getBytes()); } @Override @@ -70,7 +74,7 @@ ServiceLoader sl = ServiceLoader.load(Tool.class); for (Tool provider : sl) { if (provider.name().equals("jshell")) { - return provider.run(new ByteArrayInputStream(new byte[0]), cmdout, cmderr, args); + return provider.run(cmdInStream, cmdout, cmderr, args); } } throw new AssertionError("Repl tool not found by ServiceLoader: " + sl); @@ -90,4 +94,16 @@ check(cmderr, s -> s.startsWith("Launching JShell execution engine threw: Failed remote"), "cmderr"); } } + + @Override + public void testShowVersion() throws Exception { + start( + s -> { + assertTrue(s.startsWith("jshell "), "unexpected version: " + s); + assertTrue(s.contains("Welcome"), "Expected start (but got no welcome): " + s); + assertTrue(s.trim().contains("jshell>"), "Expected prompt, got: " + s); + }, + null, null, + "--show-version"); + } }