Skip to content

Commit

Permalink
Merge 964f305 into 2c6652d
Browse files Browse the repository at this point in the history
  • Loading branch information
ltpquang committed Sep 25, 2020
2 parents 2c6652d + 964f305 commit 65f7c09
Show file tree
Hide file tree
Showing 3 changed files with 96 additions and 31 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/).

### Changed

* [Core] Refactor CommandLine arguments ([2130](https://github.com/cucumber/cucumber-jvm/pull/2130) Quang Lê)

### Deprecated

### Removed
Expand Down
58 changes: 58 additions & 0 deletions core/src/main/java/io/cucumber/core/cli/CLIOptions.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package io.cucumber.core.cli;

import org.apiguardian.api.API;

@API(status = API.Status.STABLE)
public final class CLIOptions {
public static final String HELP = "--help";
public static final String HELP_SHORT = "-h";

public static final String VERSION = "--version";
public static final String VERSION_SHORT = "-v";

public static final String I18N = "--i18n";

public static final String THREADS = "--threads";

public static final String GLUE = "--glue";
public static final String GLUE_SHORT = "-g";

public static final String TAGS = "--tags";
public static final String TAGS_SHORT = "-t";

public static final String PUBLISH = "--publish";

public static final String PLUGIN = "--plugin";
public static final String PLUGIN_SHORT = "-p";

public static final String NO_DRY_RUN = "--no-dry-run";

public static final String DRY_RUN = "--dry-run";
public static final String DRY_RUN_SHORT = "-d";

public static final String NO_STRICT = "--no-strict";

public static final String STRICT = "--strict";
public static final String STRICT_SHORT = "-s";

public static final String NO_MONOCHROME = "--no-monochrome";

public static final String MONOCHROME = "--monochrome";
public static final String MONOCHROME_SHORT = "-m";

public static final String SNIPPETS = "--snippets";

public static final String NAME = "--name";
public static final String NAME_SHORT = "-n";

public static final String WIP = "--wip";
public static final String WIP_SHORT = "-w";

public static final String ORDER = "--order";

public static final String COUNT = "--count";

public static final String OBJECT_FACTORY = "--object-factory";

private CLIOptions() { }
}
Original file line number Diff line number Diff line change
@@ -1,16 +1,5 @@
package io.cucumber.core.options;

import io.cucumber.core.exception.CucumberException;
import io.cucumber.core.feature.FeatureWithLines;
import io.cucumber.core.feature.GluePath;
import io.cucumber.core.logging.Logger;
import io.cucumber.core.logging.LoggerFactory;
import io.cucumber.datatable.DataTable;
import io.cucumber.gherkin.GherkinDialect;
import io.cucumber.gherkin.GherkinDialectProvider;
import io.cucumber.gherkin.IGherkinDialectProvider;
import io.cucumber.tagexpressions.TagExpressionParser;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
Expand All @@ -28,6 +17,18 @@
import java.util.regex.Pattern;
import java.util.stream.Collectors;

import io.cucumber.core.cli.CLIOptions;
import io.cucumber.core.exception.CucumberException;
import io.cucumber.core.feature.FeatureWithLines;
import io.cucumber.core.feature.GluePath;
import io.cucumber.core.logging.Logger;
import io.cucumber.core.logging.LoggerFactory;
import io.cucumber.datatable.DataTable;
import io.cucumber.gherkin.GherkinDialect;
import io.cucumber.gherkin.GherkinDialectProvider;
import io.cucumber.gherkin.IGherkinDialectProvider;
import io.cucumber.tagexpressions.TagExpressionParser;

import static io.cucumber.core.options.ObjectFactoryParser.parseObjectFactory;
import static io.cucumber.core.options.OptionsFileParser.parseFeatureWithLinesFile;
import static java.nio.charset.StandardCharsets.UTF_8;
Expand Down Expand Up @@ -65,66 +66,70 @@ private RuntimeOptionsBuilder parse(List<String> args) {
while (!args.isEmpty()) {
String arg = args.remove(0).trim();

if (arg.equals("--help") || arg.equals("-h")) {
if (arg.equals(CLIOptions.HELP) || arg.equals(CLIOptions.HELP_SHORT)) {
printUsage();
exitCode = 0;
return parsedOptions;
} else if (arg.equals("--version") || arg.equals("-v")) {
} else if (arg.equals(CLIOptions.VERSION) || arg.equals(CLIOptions.VERSION_SHORT)) {
out.println(VERSION);
exitCode = 0;
return parsedOptions;
} else if (arg.equals("--i18n")) {
} else if (arg.equals(CLIOptions.I18N)) {
String nextArg = removeArgFor(arg, args);
exitCode = printI18n(nextArg);
return parsedOptions;
} else if (arg.equals("--threads")) {
} else if (arg.equals(CLIOptions.THREADS)) {
int threads = Integer.parseInt(removeArgFor(arg, args));
if (threads < 1) {
out.println("--threads must be > 0");
exitCode = 1;
return parsedOptions;
}
parsedOptions.setThreads(threads);
} else if (arg.equals("--glue") || arg.equals("-g")) {
} else if (arg.equals(CLIOptions.GLUE) || arg.equals(CLIOptions.GLUE_SHORT)) {
String gluePath = removeArgFor(arg, args);
URI parse = GluePath.parse(gluePath);
parsedOptions.addGlue(parse);
} else if (arg.equals("--tags") || arg.equals("-t")) {
} else if (arg.equals(CLIOptions.TAGS) || arg.equals(CLIOptions.TAGS_SHORT)) {
parsedOptions.addTagFilter(TagExpressionParser.parse(removeArgFor(arg, args)));
} else if (arg.equals("--publish")) {
} else if (arg.equals(CLIOptions.PUBLISH)) {
parsedOptions.setPublish(true);
} else if (arg.equals("--plugin") || arg.equals("-p")) {
} else if (arg.equals(CLIOptions.PLUGIN) || arg.equals(CLIOptions.PLUGIN_SHORT)) {
parsedOptions.addPluginName(removeArgFor(arg, args));
} else if (arg.equals("--no-dry-run") || arg.equals("--dry-run") || arg.equals("-d")) {
parsedOptions.setDryRun(!arg.startsWith("--no-"));
} else if (arg.equals("--no-strict")) {
} else if (arg.equals(CLIOptions.DRY_RUN) || arg.equals(CLIOptions.DRY_RUN_SHORT)) {
parsedOptions.setDryRun(true);
} else if (arg.equals(CLIOptions.NO_DRY_RUN)) {
parsedOptions.setDryRun(false);
} else if (arg.equals(CLIOptions.NO_STRICT)) {
out.println("--no-strict is no longer effective");
exitCode = 1;
return parsedOptions;
} else if (arg.equals("--strict") || arg.equals("-s")) {
} else if (arg.equals(CLIOptions.STRICT) || arg.equals(CLIOptions.STRICT_SHORT)) {
log.warn(() -> "--strict is enabled by default. This option will be removed in a future release.");
} else if (arg.equals("--no-monochrome") || arg.equals("--monochrome") || arg.equals("-m")) {
parsedOptions.setMonochrome(!arg.startsWith("--no-"));
} else if (arg.equals("--snippets")) {
} else if (arg.equals(CLIOptions.MONOCHROME) || arg.equals(CLIOptions.MONOCHROME_SHORT)) {
parsedOptions.setMonochrome(true);
} else if (arg.equals(CLIOptions.NO_MONOCHROME)) {
parsedOptions.setMonochrome(false);
} else if (arg.equals(CLIOptions.SNIPPETS)) {
String nextArg = removeArgFor(arg, args);
parsedOptions.setSnippetType(SnippetTypeParser.parseSnippetType(nextArg));
} else if (arg.equals("--name") || arg.equals("-n")) {
} else if (arg.equals(CLIOptions.NAME) || arg.equals(CLIOptions.NAME_SHORT)) {
String nextArg = removeArgFor(arg, args);
Pattern pattern = Pattern.compile(nextArg);
parsedOptions.addNameFilter(pattern);
} else if (arg.equals("--wip") || arg.equals("-w")) {
} else if (arg.equals(CLIOptions.WIP) || arg.equals(CLIOptions.WIP_SHORT)) {
parsedOptions.setWip(true);
} else if (arg.equals("--order")) {
} else if (arg.equals(CLIOptions.ORDER)) {
parsedOptions.setPickleOrder(PickleOrderParser.parse(removeArgFor(arg, args)));
} else if (arg.equals("--count")) {
} else if (arg.equals(CLIOptions.COUNT)) {
int count = Integer.parseInt(removeArgFor(arg, args));
if (count < 1) {
out.println("--count must be > 0");
exitCode = 1;
return parsedOptions;
}
parsedOptions.setCount(count);
} else if (arg.equals("--object-factory")) {
} else if (arg.equals(CLIOptions.OBJECT_FACTORY)) {
String objectFactoryClassName = removeArgFor(arg, args);
parsedOptions.setObjectFactoryClass(parseObjectFactory(objectFactoryClassName));
} else if (arg.startsWith("-")) {
Expand Down

0 comments on commit 65f7c09

Please sign in to comment.