/** 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 testAnsiAutoIfSystemPropertyPicocliAnsiIsAuto() { environmentVariables.set("CLICOLOR_FORCE", "1"); System.setProperty("picocli.ansi", "auto"); assertTrue(Ansi.AUTO.enabled()); System.setProperty("picocli.ansi", "Auto"); assertTrue(Ansi.AUTO.enabled()); System.setProperty("picocli.ansi", "AUTO"); assertTrue(Ansi.AUTO.enabled()); }
@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 testAnsiAutoForceDisabledOverridesForceEnabled() { environmentVariables.clear(ANSI_ENVIRONMENT_VARIABLES); environmentVariables.set("NO_COLOR", ""); environmentVariables.set("CLICOLOR_FORCE", "1"); assertTrue(Ansi.forceDisabled()); assertTrue(Ansi.forceEnabled()); assertFalse(Ansi.hintDisabled()); assertFalse(Ansi.hintEnabled()); assertFalse("forceDisabled overrides forceEnabled", Ansi.AUTO.enabled()); }
@Test public void testAnsiOffIfSystemPropertyPicocliAnsiIsNotAuto() { System.setProperty("picocli.ansi", "auto1"); environmentVariables.set("CLICOLOR_FORCE", "1"); assertFalse(Ansi.AUTO.enabled()); }
@Test public void testAnsiAutoForceDisabledOverridesHintEnabled() { environmentVariables.clear(ANSI_ENVIRONMENT_VARIABLES); environmentVariables.set("NO_COLOR", ""); environmentVariables.set("CLICOLOR", "1"); assertTrue(Ansi.forceDisabled()); assertFalse(Ansi.forceEnabled()); assertFalse(Ansi.hintDisabled()); assertTrue(Ansi.hintEnabled()); assertFalse("forceDisabled overrides hintEnabled", Ansi.AUTO.enabled()); }
@Test public void testAnsiAutoIfSystemPropertyPicocliAnsiIsAuto() { environmentVariables.set("CLICOLOR_FORCE", "1"); System.setProperty("picocli.ansi", "auto"); assertTrue(Ansi.AUTO.enabled()); System.setProperty("picocli.ansi", "Auto"); assertTrue(Ansi.AUTO.enabled()); System.setProperty("picocli.ansi", "AUTO"); assertTrue(Ansi.AUTO.enabled()); }
@Test public void testAnsiAutoIfSystemPropertyPicocliAnsiCleared() { environmentVariables.set("CLICOLOR_FORCE", "1"); System.clearProperty("picocli.ansi"); assertTrue(Ansi.AUTO.enabled()); }
@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 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 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 testAnsiAutoDisabledIfNoTty() { if (Ansi.isTTY()) { return; } // environmentVariables.clear(ANSI_ENVIRONMENT_VARIABLES); System.setProperty("os.name", "Windows"); assertTrue(Ansi.isWindows()); assertFalse(Ansi.isPseudoTTY()); assertFalse(Ansi.isJansiConsoleInstalled()); assertFalse(Ansi.forceDisabled()); assertFalse(Ansi.forceEnabled()); assertFalse(Ansi.hintDisabled()); assertFalse(Ansi.hintEnabled()); assertFalse("Must have TTY if no JAnsi", Ansi.AUTO.enabled()); }
@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()); }
@Test public void testAnsiOffDisabled() { assertFalse(Ansi.OFF.enabled()); }
@Test public void testAnsiOnEnabled() { assertTrue(Ansi.ON.enabled()); }
@Test public void testAnsiAutoForceDisabledOverridesForceEnabled() { environmentVariables.clear(ANSI_ENVIRONMENT_VARIABLES); environmentVariables.set("NO_COLOR", ""); environmentVariables.set("CLICOLOR_FORCE", "1"); assertTrue(Ansi.forceDisabled()); assertTrue(Ansi.forceEnabled()); assertFalse(Ansi.hintDisabled()); assertFalse(Ansi.hintEnabled()); assertFalse("forceDisabled overrides forceEnabled", Ansi.AUTO.enabled()); }
@Test public void testAnsiAutoIfSystemPropertyPicocliAnsiCleared() { environmentVariables.set("CLICOLOR_FORCE", "1"); System.clearProperty("picocli.ansi"); assertTrue(Ansi.AUTO.enabled()); }
@Test public void testAnsiOffIfSystemPropertyPicocliAnsiIsNotAuto() { System.setProperty("picocli.ansi", "auto1"); environmentVariables.set("CLICOLOR_FORCE", "1"); assertFalse(Ansi.AUTO.enabled()); }
@Test public void testAnsiAutoForceDisabledOverridesHintEnabled() { environmentVariables.clear(ANSI_ENVIRONMENT_VARIABLES); environmentVariables.set("NO_COLOR", ""); environmentVariables.set("CLICOLOR", "1"); assertTrue(Ansi.forceDisabled()); assertFalse(Ansi.forceEnabled()); assertFalse(Ansi.hintDisabled()); assertTrue(Ansi.hintEnabled()); assertFalse("forceDisabled overrides hintEnabled", Ansi.AUTO.enabled()); }