public Main() {
        addOption(new Option("h", "help", "Displays the help screen") {
            protected void doProcess(String arg, LinkedList<String> remainingArgs) {
                showOptions();
                // no need to process further if user just wants help
                System.exit(0);
            }
        });

        addOption(new ParameterOption("c", "command", "Command can be encrypt or decrypt", "command") {
            protected void doProcess(String arg, String parameter, LinkedList<String> remainingArgs) {
                if ("encrypt".equals(parameter) || "decrypt".equals(parameter)) {
                    command = parameter;
                } else {
                    throw new IllegalArgumentException("Unknown command, was: " + parameter);
                }
            }
        });

        addOption(new ParameterOption("p", "password", "Password to use", "password") {
            protected void doProcess(String arg, String parameter, LinkedList<String> remainingArgs) {
                password = parameter;
            }
        });

        addOption(new ParameterOption("i", "input", "Text to encrypt or decrypt", "input") {
            protected void doProcess(String arg, String parameter, LinkedList<String> remainingArgs) {
                input = parameter;
            }
        });

        addOption(new ParameterOption("a", "algorithm", "Optional algorithm to use", "algorithm") {
            protected void doProcess(String arg, String parameter, LinkedList<String> remainingArgs) {
                algorithm = parameter;
            }
        });

        addOption(new ParameterOption("rsga", "salt", "Optional random salt generator algorithm to use", "salt") {
            protected void doProcess(String arg, String parameter, LinkedList<String> remainingArgs) {
                randomSaltGeneratorAlgorithm = parameter;
            }
        });

        addOption(new ParameterOption("riga", "iv", "Optional random iv generator algorithm to use", "iv") {
            protected void doProcess(String arg, String parameter, LinkedList<String> remainingArgs) {
                randomIvGeneratorAlgorithm = parameter;
            }
        });
    }
@Test
    public void testMainShowOptions() {
        assertDoesNotThrow(() -> Main.main(new String[] {}));
    }