Skip to content

Commit e6e415f

Browse files
Fix color mode detecting
1 parent 8bd23e9 commit e6e415f

3 files changed

Lines changed: 87 additions & 47 deletions

File tree

maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -522,6 +522,12 @@ void logging(CliRequest cliRequest) {
522522
} else if (cliRequest.commandLine.hasOption(CLIManager.BATCH_MODE)
523523
|| cliRequest.commandLine.hasOption(CLIManager.LOG_FILE)) {
524524
MessageUtils.setColorEnabled(false);
525+
} else {
526+
// if the terminal is detected as dumb terminal, disable colors
527+
if (MessageUtils.getTerminal() != null
528+
&& MessageUtils.getTerminal().getType().startsWith("dumb")) {
529+
MessageUtils.setColorEnabled(false);
530+
}
525531
}
526532

527533
// LOG STREAMS

maven-embedder/src/test/java/org/apache/maven/cli/MavenCliTest.java

Lines changed: 76 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import org.codehaus.plexus.PlexusContainer;
3434
import org.junit.jupiter.api.AfterEach;
3535
import org.junit.jupiter.api.BeforeEach;
36+
import org.junit.jupiter.api.Nested;
3637
import org.junit.jupiter.api.Test;
3738
import org.mockito.InOrder;
3839

@@ -42,7 +43,6 @@
4243
import static org.junit.jupiter.api.Assertions.assertThrows;
4344
import static org.junit.jupiter.api.Assertions.assertTrue;
4445
import static org.junit.jupiter.api.Assertions.fail;
45-
import static org.junit.jupiter.api.Assumptions.assumeTrue;
4646
import static org.mockito.Mockito.any;
4747
import static org.mockito.Mockito.inOrder;
4848
import static org.mockito.Mockito.mock;
@@ -258,58 +258,86 @@ public void testMVNConfigurationFunkyArguments() throws Exception {
258258
assertEquals("-Dpom.xml", request.getCommandLine().getOptionValue(CLIManager.ALTERNATE_POM_FILE));
259259
}
260260

261-
@Test
262-
public void testStyleColors() throws Exception {
263-
assumeTrue(MessageUtils.isColorEnabled(), "ANSI not supported");
264-
CliRequest request;
261+
@Nested
262+
class StyleColors {
265263

266-
MessageUtils.setColorEnabled(true);
267-
request = new CliRequest(new String[] {"-B"}, null);
268-
cli.cli(request);
269-
cli.properties(request);
270-
cli.logging(request);
271-
assertFalse(MessageUtils.isColorEnabled());
264+
@BeforeEach
265+
public void setUp() {
266+
MessageUtils.systemInstall();
267+
MessageUtils.getTerminalWidth(); // wait for fast terminal initialize
268+
}
272269

273-
MessageUtils.setColorEnabled(true);
274-
request = new CliRequest(new String[] {"-l", "target/temp/mvn.log"}, null);
275-
request.workingDirectory = "target/temp";
276-
cli.cli(request);
277-
cli.properties(request);
278-
cli.logging(request);
279-
assertFalse(MessageUtils.isColorEnabled());
270+
@AfterEach
271+
public void tearDown() {
272+
MessageUtils.systemUninstall();
273+
}
280274

281-
MessageUtils.setColorEnabled(false);
282-
request = new CliRequest(new String[] {"-Dstyle.color=always"}, null);
283-
cli.cli(request);
284-
cli.properties(request);
285-
cli.logging(request);
286-
assertTrue(MessageUtils.isColorEnabled());
275+
@Test
276+
public void testStyleColors() throws Exception {
277+
CliRequest request;
287278

288-
MessageUtils.setColorEnabled(true);
289-
request = new CliRequest(new String[] {"-Dstyle.color=never"}, null);
290-
cli.cli(request);
291-
cli.properties(request);
292-
cli.logging(request);
293-
assertFalse(MessageUtils.isColorEnabled());
279+
MessageUtils.setColorEnabled(true);
280+
request = new CliRequest(new String[] {"-B"}, null);
281+
cli.cli(request);
282+
cli.properties(request);
283+
cli.logging(request);
284+
assertFalse(MessageUtils.isColorEnabled());
294285

295-
MessageUtils.setColorEnabled(false);
296-
request = new CliRequest(new String[] {"-Dstyle.color=always", "-B", "-l", "target/temp/mvn.log"}, null);
297-
request.workingDirectory = "target/temp";
298-
cli.cli(request);
299-
cli.properties(request);
300-
cli.logging(request);
301-
assertTrue(MessageUtils.isColorEnabled());
286+
MessageUtils.setColorEnabled(true);
287+
request = new CliRequest(new String[] {"-l", "target/temp/mvn.log"}, null);
288+
request.workingDirectory = "target/temp";
289+
cli.cli(request);
290+
cli.properties(request);
291+
cli.logging(request);
292+
assertFalse(MessageUtils.isColorEnabled());
293+
294+
MessageUtils.setColorEnabled(false);
295+
request = new CliRequest(new String[] {"-Dstyle.color=always"}, null);
296+
cli.cli(request);
297+
cli.properties(request);
298+
cli.logging(request);
299+
assertTrue(MessageUtils.isColorEnabled());
300+
301+
MessageUtils.setColorEnabled(true);
302+
request = new CliRequest(new String[] {"-Dstyle.color=never"}, null);
303+
cli.cli(request);
304+
cli.properties(request);
305+
cli.logging(request);
306+
assertFalse(MessageUtils.isColorEnabled());
302307

303-
try {
304308
MessageUtils.setColorEnabled(false);
305-
request = new CliRequest(new String[] {"-Dstyle.color=maybe", "-B", "-l", "target/temp/mvn.log"}, null);
309+
request = new CliRequest(new String[] {"-Dstyle.color=always", "-B", "-l", "target/temp/mvn.log"}, null);
306310
request.workingDirectory = "target/temp";
307311
cli.cli(request);
308312
cli.properties(request);
309313
cli.logging(request);
310-
fail("maybe is not a valid option");
311-
} catch (IllegalArgumentException e) {
312-
// noop
314+
assertTrue(MessageUtils.isColorEnabled());
315+
316+
try {
317+
MessageUtils.setColorEnabled(false);
318+
request = new CliRequest(new String[] {"-Dstyle.color=maybe", "-B", "-l", "target/temp/mvn.log"}, null);
319+
request.workingDirectory = "target/temp";
320+
cli.cli(request);
321+
cli.properties(request);
322+
cli.logging(request);
323+
fail("maybe is not a valid option");
324+
} catch (IllegalArgumentException e) {
325+
// noop
326+
}
327+
}
328+
329+
@Test
330+
void testDumpTerminal() throws Exception {
331+
// test provide own sys out which is not a tty
332+
// similar will be with redirected output
333+
// check that colors are disabled
334+
335+
MessageUtils.setColorEnabled(true);
336+
CliRequest request = new CliRequest(new String[] {}, null);
337+
cli.cli(request);
338+
cli.properties(request);
339+
cli.logging(request);
340+
assertFalse(MessageUtils.isColorEnabled());
313341
}
314342
}
315343

@@ -357,17 +385,20 @@ public void testVersionStringWithoutAnsi() throws Exception {
357385
PrintStream oldOut = System.out;
358386
System.setOut(new PrintStream(systemOut));
359387

388+
System.setProperty(MavenCli.MULTIMODULE_PROJECT_DIRECTORY, ".");
389+
360390
// when
361391
try {
362-
cli.cli(cliRequest);
363-
} catch (MavenCli.ExitException exitException) {
364-
// expected
392+
assertEquals(0, cli.doMain(cliRequest));
365393
} finally {
366394
// restore sysout
367395
System.setOut(oldOut);
396+
System.clearProperty(MavenCli.MULTIMODULE_PROJECT_DIRECTORY);
368397
}
369398
String versionOut = new String(systemOut.toByteArray(), StandardCharsets.UTF_8);
370399

400+
assertTrue(versionOut.contains("Apache Maven"));
401+
371402
// then
372403
assertEquals(MessageUtils.stripAnsiCodes(versionOut), versionOut);
373404
}

maven-jline/src/main/java/org/apache/maven/jline/MessageUtils.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,11 @@ public static void systemInstall() {
4545
public static void systemInstall(Consumer<TerminalBuilder> builderConsumer, Consumer<Terminal> terminalConsumer) {
4646
MessageUtils.terminal = new FastTerminal(
4747
() -> {
48-
TerminalBuilder builder =
49-
TerminalBuilder.builder().name("Maven").dumb(true);
48+
TerminalBuilder builder = TerminalBuilder.builder()
49+
.name("Maven")
50+
.dumb(true)
51+
.systemOutput(TerminalBuilder.SystemOutput.SysOut)
52+
.color(true);
5053
if (builderConsumer != null) {
5154
builderConsumer.accept(builder);
5255
}

0 commit comments

Comments
 (0)