diff --git a/pom.xml b/pom.xml
index c035f48..bbdfe39 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
org.utplsql
cli
- 3.1.2-SNAPSHOT
+ 3.1.3-SNAPSHOT
jar
cli
diff --git a/src/main/java/org/utplsql/cli/Cli.java b/src/main/java/org/utplsql/cli/Cli.java
index 11a445e..a2e9202 100644
--- a/src/main/java/org/utplsql/cli/Cli.java
+++ b/src/main/java/org/utplsql/cli/Cli.java
@@ -3,9 +3,6 @@
import com.beust.jcommander.JCommander;
import com.beust.jcommander.Parameter;
import com.beust.jcommander.ParameterException;
-import org.utplsql.api.exception.DatabaseNotCompatibleException;
-import org.utplsql.api.exception.UtPLSQLNotInstalledException;
-import org.utplsql.cli.exception.DatabaseConnectionFailed;
public class Cli {
@@ -26,36 +23,31 @@ static int runWithExitCode( String[] args ) {
JCommander jc = new JCommander();
jc.setProgramName("utplsql");
- CommandProvider cmdProvider = new CommandProvider();
+ CommandProvider cmdProvider = new CommandProvider(jc);
cmdProvider.commands().forEach(cmd -> jc.addCommand(cmd.getCommand(), cmd));
int exitCode = DEFAULT_ERROR_CODE;
- try {
- jc.parse(args);
+ if ( args.length >= 1 && args[0].equals("-h") ) // Help?
+ {
+ exitCode = 0;
+ jc.usage();
+ }
+ else {
+ try {
+ jc.parse(args);
- exitCode = cmdProvider.getCommand(jc.getParsedCommand()).run();
+ exitCode = cmdProvider.getCommand(jc.getParsedCommand()).run();
- } catch (ParameterException e) {
- if (jc.getParsedCommand() != null) {
- System.err.println(e.getMessage());
- jc.usage(jc.getParsedCommand());
- } else {
- jc.usage();
+ } catch (ParameterException e) {
+ exitCode = new HelpCommand(jc, e.getMessage()).run();
+ } catch (Exception e) {
+ e.printStackTrace();
}
- } catch (Exception e) {
- e.printStackTrace();
}
return exitCode;
}
- private static class HelpCommand {
-
- @Parameter(names = {HELP_CMD, "--help"}, help = true)
- public boolean callHelp;
-
- }
-
}
diff --git a/src/main/java/org/utplsql/cli/CommandProvider.java b/src/main/java/org/utplsql/cli/CommandProvider.java
index 898eb2a..5298143 100644
--- a/src/main/java/org/utplsql/cli/CommandProvider.java
+++ b/src/main/java/org/utplsql/cli/CommandProvider.java
@@ -1,5 +1,7 @@
package org.utplsql.cli;
+import com.beust.jcommander.JCommander;
+
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Stream;
@@ -7,8 +9,10 @@
public class CommandProvider {
private Map commands;
+ private JCommander jCommander;
- public CommandProvider() {
+ public CommandProvider( JCommander jCommander ) {
+ this.jCommander = jCommander;
init();
}
@@ -18,6 +22,7 @@ private void init() {
addCommand(new RunCommand());
addCommand(new VersionInfoCommand());
addCommand(new ReportersCommand());
+ addCommand(new HelpCommand(jCommander));
}
private void addCommand( ICommand command ) {
@@ -28,7 +33,7 @@ public ICommand getCommand( String key ) {
if ( commands.containsKey(key))
return commands.get(key.toLowerCase());
else
- return new HelpCommand("Unknown command: '" + key + "'");
+ return new HelpCommand(jCommander, "Unknown command: '" + key + "'");
}
public Stream commands() {
diff --git a/src/main/java/org/utplsql/cli/HelpCommand.java b/src/main/java/org/utplsql/cli/HelpCommand.java
index 3476a07..6d0c27b 100644
--- a/src/main/java/org/utplsql/cli/HelpCommand.java
+++ b/src/main/java/org/utplsql/cli/HelpCommand.java
@@ -1,19 +1,38 @@
package org.utplsql.cli;
+import com.beust.jcommander.JCommander;
+
+/** Simple Help-Command which outputs an (optional) error message and the command line usage
+ * @author pesse
+ */
public class HelpCommand implements ICommand {
private String errorMessage;
+ private JCommander jCommander;
+
+ public HelpCommand(JCommander jCommander) {
+ this.jCommander = jCommander;
+ }
- public HelpCommand( String errorMessage ) {
+ public HelpCommand( JCommander jCommander, String errorMessage ) {
+ this.jCommander = jCommander;
this.errorMessage = errorMessage;
}
@Override
public int run() {
- if ( errorMessage != null )
+ if ( errorMessage != null ) {
System.out.println(errorMessage);
-
- return 1;
+ if (jCommander.getParsedCommand() != null)
+ jCommander.usage(jCommander.getParsedCommand());
+ else
+ jCommander.usage();
+ return 1;
+ }
+ else {
+ jCommander.usage();
+ return 0;
+ }
}
@Override
diff --git a/src/test/java/org/utplsql/cli/HelpCommandTest.java b/src/test/java/org/utplsql/cli/HelpCommandTest.java
new file mode 100644
index 0000000..762ebe4
--- /dev/null
+++ b/src/test/java/org/utplsql/cli/HelpCommandTest.java
@@ -0,0 +1,49 @@
+package org.utplsql.cli;
+
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.utplsql.cli.util.SystemOutCapturer;
+
+import java.io.IOException;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+public class HelpCommandTest {
+
+
+ private SystemOutCapturer capturer;
+
+ @BeforeEach
+ public void setupCaptureSystemOut() {
+ capturer = new SystemOutCapturer();
+ }
+
+ @Test
+ public void callHelp() {
+
+ capturer.start();
+ int result = TestHelper.runApp("-h");
+ String output = capturer.stop();
+
+ assertEquals(0, result);
+ assertTrue(output.contains("Usage:"));
+ }
+
+ @Test
+ public void callWithNoArgs() {
+
+ capturer.start();
+ int result = TestHelper.runApp();
+ String output = capturer.stop();
+
+ assertEquals(1, result);
+ assertTrue(output.contains("Usage:"));
+ }
+
+ @AfterEach
+ public void cleanupCaptureSystemOut() throws IOException {
+ capturer.stop();
+ }
+}