class Cling {

    public List<TestGenerationResult> parseCommandLine(String[] args) {
        // Get default properties
        IntegrationTestingProperties integrationTestingProperties = IntegrationTestingProperties.getInstance();

        // Parse commands according to the defined options
        Options options = CommandLineParameters.getCommandLineOptions();
        CommandLine commands = parseCommands(args, options,true);

        // If help option is provided
        if (commands.hasOption(HELP_OPT)) {
            printHelpMessage(options,true);
        } else if(!commands.hasOption(PROJECT_CP_OPT) || !commands.hasOption(TARGET_CLASSES) ) { // Check the required options are there
            LOG.error("A mandatory option -{} -{} is missing!", PROJECT_CP_OPT, TARGET_CLASSES);
            printHelpMessage(options,true);
        } else {// Otherwise, proceed to crash reproduction

            // Update EvoSuite's properties
            java.util.Properties properties = commands.getOptionProperties(D_OPT);
            updateEvoSuiteProperties(properties);
            // Setup project class paths
            integrationTestingProperties.setClasspath(getCompatibleCP(commands.getOptionValue(PROJECT_CP_OPT)));
            setupProjectClasspath(integrationTestingProperties.getProjectClassPaths());
            // Setup target classes
            setupTargetClasses(commands.getOptionValue(TARGET_CLASSES));
            // Set the search algorithm
            if(commands.hasOption(SEARCH_ALGORITHM)){
                String algorithm = commands.getOptionValue(SEARCH_ALGORITHM);
                IntegrationTestingProperties.searchAlgorithm = IntegrationTestingProperties.SearchAlgorithm.valueOf(algorithm);
            }
            // Set fitness function(s)
            if(commands.hasOption(FITNESS_FUNCTION)){
                String fitnessFunction = commands.getOptionValue(FITNESS_FUNCTION);
                IntegrationTestingProperties.fitnessFunctions = new IntegrationTestingProperties.FitnessFunction[]{IntegrationTestingProperties.FitnessFunction.valueOf(fitnessFunction)};
            }

            // execute
          return IntegrationTesting.execute();
        }
        return null;

    }

}