@Test public void testTextApply() { Ansi.Text txt = Ansi.ON.apply("--p", Arrays.<Ansi.IStyle>asList(Ansi.Style.fg_red, Ansi.Style.bold)); assertEquals(Ansi.ON.new Text("@|fg(red),bold --p|@"), txt); }
@Test public void testAnsiEnabled() { assertTrue(Ansi.ON.enabled()); assertFalse(Ansi.OFF.enabled()); System.setProperty("picocli.ansi", "true"); assertEquals(true, Ansi.AUTO.enabled()); System.setProperty("picocli.ansi", "false"); assertEquals(false, Ansi.AUTO.enabled()); System.clearProperty("picocli.ansi"); boolean isWindows = System.getProperty("os.name").startsWith("Windows"); boolean isXterm = System.getenv("TERM") != null && System.getenv("TERM").startsWith("xterm"); boolean hasOsType = System.getenv("OSTYPE") != null; // null on Windows unless on Cygwin or MSYS boolean isAtty = (isWindows && (isXterm || hasOsType)) // cygwin pseudo-tty || hasConsole(); assertEquals((isAtty && (!isWindows || isXterm || hasOsType)) || isJansiConsoleInstalled(), Ansi.AUTO.enabled()); if (isWindows && !Ansi.AUTO.enabled()) { AnsiConsole.systemInstall(); try { assertTrue(Ansi.AUTO.enabled()); } finally { AnsiConsole.systemUninstall(); } } }
/** * Entry point into parsing command line arguments. * @param args the command line arguments * @return a list with all commands and subcommands initialized by this method * @throws ParameterException if the specified command line arguments are invalid */ List<CommandLine> parse(String... args) { Assert.notNull(args, "argument array"); if (tracer.isInfo()) {tracer.info("Picocli version: %s%n", versionString());} if (tracer.isInfo()) {tracer.info("Parsing %d command line args %s%n", args.length, Arrays.toString(args));} if (tracer.isDebug()){tracer.debug("Parser configuration: %s%n", config());} if (tracer.isDebug()){tracer.debug("(ANSI is %s by default: isatty=%s, XTERM=%s, OSTYPE=%s, isWindows=%s, JansiConsoleInstalled=%s, ANSICON=%s, ConEmuANSI=%s, NO_COLOR=%s, CLICOLOR=%s, CLICOLOR_FORCE=%s)%n", Help.Ansi.ansiPossible() ? "enabled" : "disabled", Help.Ansi.isTTY(), System.getenv("XTERM"), System.getenv("OSTYPE"), Help.Ansi.isWindows(), Help.Ansi.isJansiConsoleInstalled(), System.getenv("ANSICON"), System.getenv("ConEmuANSI"), System.getenv("NO_COLOR"), System.getenv("CLICOLOR"), System.getenv("CLICOLOR_FORCE"));} List<String> expanded = new ArrayList<String>(); for (String arg : args) { addOrExpand(arg, expanded, new LinkedHashSet<String>()); } Stack<String> arguments = new Stack<String>(); arguments.addAll(reverseList(expanded)); List<CommandLine> result = new ArrayList<CommandLine>(); parse(result, arguments, args, new ArrayList<Object>()); return result; }
public Text renderParameterLabel(ArgSpec argSpec, Ansi ansi, List<IStyle> styles) { Range capacity = argSpec.isOption() ? argSpec.arity() : ((PositionalParamSpec)argSpec).capacity(); if (capacity.max == 0) { return ansi.new Text(""); } if (argSpec.hideParamSyntax()) { return ansi.apply((argSpec.isOption() ? separator() : "") + argSpec.paramLabel(), styles); } Text paramName = ansi.apply(argSpec.paramLabel(), styles); String split = argSpec.splitRegex(); String mandatorySep = empty(split) ? " " : split;
/** Returns a String representation of the text with ANSI escape codes embedded, unless ANSI is * {@linkplain Ansi#enabled()} not enabled}, in which case the plain text is returned. * @return a String representation of the text with ANSI escape codes embedded (if enabled) */ public String toString() { if (!Ansi.this.enabled()) { return plain.toString().substring(from, from + length); } if (length == 0) { return ""; } StringBuilder sb = new StringBuilder(plain.length() + 20 * sections.size()); StyledSection current = null; int end = Math.min(from + length, plain.length()); for (int i = from; i < end; i++) { StyledSection section = findSectionContaining(i); if (section != current) { if (current != null) { sb.append(current.endStyles); } if (section != null) { sb.append(section.startStyles); } current = section; } sb.append(plain.charAt(i)); } if (current != null) { sb.append(current.endStyles); } return sb.toString(); }
@Test public void testAnsiEnabled() { assertTrue(Ansi.ON.enabled()); assertFalse(Ansi.OFF.enabled()); System.setProperty("picocli.ansi", "true"); assertEquals(true, Ansi.AUTO.enabled()); System.setProperty("picocli.ansi", "false"); assertEquals(false, Ansi.AUTO.enabled()); System.clearProperty("picocli.ansi"); boolean isWindows = System.getProperty("os.name").startsWith("Windows"); boolean isXterm = System.getenv("TERM") != null && System.getenv("TERM").startsWith("xterm"); boolean hasOsType = System.getenv("OSTYPE") != null; // null on Windows unless on Cygwin or MSYS boolean isAtty = (isWindows && (isXterm || hasOsType)) // cygwin pseudo-tty || hasConsole(); assertEquals((isAtty && (!isWindows || isXterm || hasOsType)) || isJansiConsoleInstalled(), Ansi.AUTO.enabled()); if (isWindows && !Ansi.AUTO.enabled()) { AnsiConsole.systemInstall(); try { assertTrue(Ansi.AUTO.enabled()); } finally { AnsiConsole.systemUninstall(); } } }
@Test public void testAnsiIsPseudoTtyDependsOnWindowsXtermOrOsType() { System.setProperty("os.name", "MMIX"); environmentVariables.clear(ANSI_ENVIRONMENT_VARIABLES); assertFalse("OSTYPE and XTERM are not set", Ansi.isPseudoTTY()); System.setProperty("os.name", "Windows 10 build 12345"); environmentVariables.set("OSTYPE", "222"); environmentVariables.set("TERM", "xterm"); assertTrue(Ansi.isPseudoTTY()); System.setProperty("os.name", "MMIX"); assertFalse("Not Windows", Ansi.isPseudoTTY()); System.setProperty("os.name", "Windows 10 build 12345"); // restore assertTrue("restored", Ansi.isPseudoTTY()); environmentVariables.clear("OSTYPE"); assertTrue("Missing OSTYPE, but TERM=xterm", Ansi.isPseudoTTY()); environmentVariables.set("OSTYPE", "anything"); assertTrue("restored", Ansi.isPseudoTTY()); environmentVariables.clear("XTERM"); assertTrue("Missing XTERM, but OSTYPE defined", Ansi.isPseudoTTY()); }
/** * Entry point into parsing command line arguments. * @param args the command line arguments * @return a list with all commands and subcommands initialized by this method * @throws ParameterException if the specified command line arguments are invalid */ List<CommandLine> parse(String... args) { Assert.notNull(args, "argument array"); if (tracer.isInfo()) {tracer.info("Picocli version: %s%n", versionString());} if (tracer.isInfo()) {tracer.info("Parsing %d command line args %s%n", args.length, Arrays.toString(args));} if (tracer.isDebug()){tracer.debug("Parser configuration: %s%n", config());} if (tracer.isDebug()){tracer.debug("(ANSI is %s by default: isatty=%s, XTERM=%s, OSTYPE=%s, isWindows=%s, JansiConsoleInstalled=%s, ANSICON=%s, ConEmuANSI=%s, NO_COLOR=%s, CLICOLOR=%s, CLICOLOR_FORCE=%s)%n", Help.Ansi.ansiPossible() ? "enabled" : "disabled", Help.Ansi.isTTY(), System.getenv("XTERM"), System.getenv("OSTYPE"), Help.Ansi.isWindows(), Help.Ansi.isJansiConsoleInstalled(), System.getenv("ANSICON"), System.getenv("ConEmuANSI"), System.getenv("NO_COLOR"), System.getenv("CLICOLOR"), System.getenv("CLICOLOR_FORCE"));} List<String> expanded = new ArrayList<String>(); for (String arg : args) { addOrExpand(arg, expanded, new LinkedHashSet<String>()); } Stack<String> arguments = new Stack<String>(); arguments.addAll(reverseList(expanded)); List<CommandLine> result = new ArrayList<CommandLine>(); parse(result, arguments, args, new ArrayList<Object>()); return result; }
@Test public void testAnsiAutoForcedEnabledOverridesHintDisabled() { environmentVariables.clear(ANSI_ENVIRONMENT_VARIABLES); environmentVariables.set("CLICOLOR", "0"); environmentVariables.set("CLICOLOR_FORCE", "1"); assertFalse(Ansi.forceDisabled()); assertTrue(Ansi.hintDisabled()); assertTrue(Ansi.forceEnabled()); assertFalse(Ansi.hintEnabled()); assertTrue("forceEnabled overrides hintDisabled", Ansi.AUTO.enabled()); environmentVariables.clear(ANSI_ENVIRONMENT_VARIABLES); environmentVariables.set("ConEmuANSI", "OFF"); environmentVariables.set("CLICOLOR_FORCE", "1"); assertFalse(Ansi.forceDisabled()); assertTrue(Ansi.hintDisabled()); assertTrue(Ansi.forceEnabled()); assertFalse(Ansi.hintEnabled()); assertTrue("forceEnabled overrides hintDisabled 2", Ansi.AUTO.enabled()); }
@Test public void testAnsiHintDisabledTrueIfConEmuANSIisOFF() { environmentVariables.clear(ANSI_ENVIRONMENT_VARIABLES); assertFalse("no env vars set", Ansi.hintDisabled()); environmentVariables.set("ConEmuANSI", ""); assertFalse("Just defining ConEmuANSI is not enough", Ansi.hintDisabled()); environmentVariables.set("ConEmuANSI", "0"); assertFalse("ConEmuANSI=0 is not enough", Ansi.hintDisabled()); environmentVariables.set("ConEmuANSI", "false"); assertFalse("ConEmuANSI=false is not enough", Ansi.hintDisabled()); environmentVariables.set("ConEmuANSI", "off"); assertFalse("ConEmuANSI=off does not disable", Ansi.hintDisabled()); environmentVariables.set("ConEmuANSI", "Off"); assertFalse("ConEmuANSI=Off does not disable", Ansi.hintDisabled()); environmentVariables.set("ConEmuANSI", "OFF"); assertTrue("ConEmuANSI=OFF disables", Ansi.hintDisabled()); }
@Test public void testAnsiHintEnabledTrueIfConEmuANSIisON() { environmentVariables.clear(ANSI_ENVIRONMENT_VARIABLES); assertFalse("no env vars set", Ansi.hintEnabled()); environmentVariables.set("ConEmuANSI", ""); assertFalse("Just defining ConEmuANSI is not enough", Ansi.hintEnabled()); environmentVariables.set("ConEmuANSI", "1"); assertFalse("ConEmuANSI=1 is not enough", Ansi.hintEnabled()); environmentVariables.set("ConEmuANSI", "true"); assertFalse("ConEmuANSI=true is not enough", Ansi.hintEnabled()); environmentVariables.set("ConEmuANSI", "on"); assertFalse("ConEmuANSI=on does not enables", Ansi.hintEnabled()); environmentVariables.set("ConEmuANSI", "On"); assertFalse("ConEmuANSI=On does not enables", Ansi.hintEnabled()); environmentVariables.set("ConEmuANSI", "ON"); assertTrue("ConEmuANSI=ON enables", Ansi.hintEnabled()); }
@Test public void testAnsiAutoEnabledIfWindowsPseudoTTY() { environmentVariables.clear(ANSI_ENVIRONMENT_VARIABLES); System.setProperty("os.name", "Windows"); assertTrue(Ansi.isWindows()); assertFalse(Ansi.isJansiConsoleInstalled()); assertFalse(Ansi.forceDisabled()); assertFalse(Ansi.forceEnabled()); assertFalse(Ansi.hintDisabled()); assertFalse(Ansi.hintEnabled()); environmentVariables.set("TERM", "xterm"); assertTrue(Ansi.isPseudoTTY()); assertTrue("If have Cygwin pseudo-TTY, enabled on Windows", Ansi.AUTO.enabled()); environmentVariables.clear(ANSI_ENVIRONMENT_VARIABLES); environmentVariables.set("OSTYPE", "Windows"); assertTrue(Ansi.isPseudoTTY()); assertTrue("If have MSYS pseudo-TTY, enabled on Windows", Ansi.AUTO.enabled()); } }
@Test public void testAnsiAutoJansiConsoleInstalledOverridesHintDisabled() { environmentVariables.clear(ANSI_ENVIRONMENT_VARIABLES); environmentVariables.set("CLICOLOR", "0"); // hint disabled System.setProperty("os.name", "Windows"); assertTrue(Ansi.isWindows()); assertFalse(Ansi.isPseudoTTY()); assertFalse(Ansi.forceDisabled()); assertFalse(Ansi.forceEnabled()); assertTrue(Ansi.hintDisabled()); assertFalse(Ansi.hintEnabled()); assertFalse(Ansi.isJansiConsoleInstalled()); AnsiConsole.systemInstall(); try { assertTrue(Ansi.isJansiConsoleInstalled()); assertTrue(Ansi.AUTO.enabled()); } finally { AnsiConsole.systemUninstall(); } }
@Test public void testAnsiAutoHintDisabledOverridesHintEnabled() { environmentVariables.clear(ANSI_ENVIRONMENT_VARIABLES); environmentVariables.set("CLICOLOR", "0"); // hint disabled environmentVariables.set("ANSICON", "1"); // hint enabled System.setProperty("os.name", "Windows"); assertTrue(Ansi.isWindows()); environmentVariables.set("TERM", "xterm"); // fake Cygwin assertTrue(Ansi.isPseudoTTY()); assertFalse(Ansi.isJansiConsoleInstalled()); assertFalse(Ansi.forceDisabled()); assertFalse(Ansi.forceEnabled()); assertTrue(Ansi.hintDisabled()); assertTrue(Ansi.hintEnabled()); assertFalse("Disabled overrides enabled", Ansi.AUTO.enabled()); }
@Test public void testAnsiHintDisabledTrueIfCLICOLORZero() { environmentVariables.clear(ANSI_ENVIRONMENT_VARIABLES); assertFalse("no env vars set", Ansi.hintDisabled()); environmentVariables.set("CLICOLOR", ""); assertFalse("Just defining CLICOLOR is not enough", Ansi.hintDisabled()); environmentVariables.set("CLICOLOR", "1"); assertFalse("CLICOLOR=1 is not enough", Ansi.hintDisabled()); environmentVariables.set("CLICOLOR", "false"); assertFalse("CLICOLOR=false is not enough", Ansi.hintDisabled()); environmentVariables.set("CLICOLOR", "0"); assertTrue("CLICOLOR=0 disables", Ansi.hintDisabled()); }
@Test public void testAnsiHintEnbledTrueIfCLICOLOROne() { environmentVariables.clear(ANSI_ENVIRONMENT_VARIABLES); assertFalse("no env vars set", Ansi.hintEnabled()); environmentVariables.set("CLICOLOR", ""); assertFalse("Just defining CLICOLOR is not enough", Ansi.hintEnabled()); environmentVariables.set("CLICOLOR", "0"); assertFalse("CLICOLOR=0 is not enough", Ansi.hintEnabled()); environmentVariables.set("CLICOLOR", "true"); assertFalse("CLICOLOR=true is not enough", Ansi.hintEnabled()); environmentVariables.set("CLICOLOR", "1"); assertTrue("CLICOLOR=1 enables", Ansi.hintEnabled()); }
/** Returns a Text with all optionParam styles applied to the specified optionParam string. * @param optionParam the option parameter string to apply the registered option parameter styles to * @return a Text with all option parameter styles applied to the specified option parameter string */ public Ansi.Text optionParamText(String optionParam) { return ansi().apply(optionParam, optionParamStyles); }
public Text renderParameterLabel(ArgSpec argSpec, Ansi ansi, List<IStyle> styles) { return ansi.apply(argSpec.paramLabel(), styles); } public String separator() { return ""; }
@Test public void testAnsiAutoEnabledIfNotWindows() { if (!Ansi.isTTY()) { return; } // needs TTY for this test environmentVariables.clear(ANSI_ENVIRONMENT_VARIABLES); System.setProperty("os.name", "MMIX"); assertFalse(Ansi.isWindows()); assertFalse(Ansi.isPseudoTTY()); // TODO Mock this? assertFalse(Ansi.isJansiConsoleInstalled()); assertFalse(Ansi.forceDisabled()); assertFalse(Ansi.forceEnabled()); assertFalse(Ansi.hintDisabled()); assertFalse(Ansi.hintEnabled()); assertTrue("If have TTY, enabled on non-Windows", Ansi.AUTO.enabled()); }