package cucumber.runtime.junit; import cucumber.runtime.CucumberException; import gherkin.util.FixJava; import java.io.InputStreamReader; import java.io.Reader; import java.util.ArrayList; import java.util.List; public class JUnitOptions { public static final String OPTIONS_RESOURCE = "/cucumber/api/junit/OPTIONS.txt"; private static String optionsText; private boolean allowStartedIgnored = false; private boolean filenameCompatibleNames = false; /** * Create a new instance from a list of options, for example: * <p/> * <pre<{@code Arrays.asList("--allow-started-ignored", "--filename-compatible-names");}</pre> * * @param argv the arguments */ public JUnitOptions(List<String> argv) { argv = new ArrayList<String>(argv); // in case the one passed in is unmodifiable. parse(argv); } private void parse(List<String> args) { while (!args.isEmpty()) { String arg = args.remove(0).trim(); if (arg.equals("--help") || arg.equals("-h")) { printOptions(); System.exit(0); } else if (arg.equals("--no-allow-started-ignored") || arg.equals("--allow-started-ignored")) { allowStartedIgnored = !arg.startsWith("--no-"); } else if (arg.equals("--no-filename-compatible-names") || arg.equals("--filename-compatible-names")) { filenameCompatibleNames = !arg.startsWith("--no-"); } else { throw new CucumberException("Unknown option: " + arg); } } } public boolean allowStartedIgnored() { return allowStartedIgnored; } public boolean filenameCompatibleNames() { return filenameCompatibleNames; } private void printOptions() { loadUsageTextIfNeeded(); System.out.println(optionsText); } static void loadUsageTextIfNeeded() { if (optionsText == null) { try { Reader reader = new InputStreamReader(FixJava.class.getResourceAsStream(OPTIONS_RESOURCE), "UTF-8"); optionsText = FixJava.readReader(reader); } catch (Exception e) { optionsText = "Could not load usage text: " + e.toString(); } } } }