Skip to content

Commit 20d81ac

Browse files
committed
Avoid passing around null
1 parent 3474322 commit 20d81ac

File tree

4 files changed

+62
-43
lines changed

4 files changed

+62
-43
lines changed

junit-platform-console/src/main/java/org/junit/platform/console/ConsoleLauncher.java

Lines changed: 8 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -30,38 +30,23 @@
3030
public class ConsoleLauncher {
3131

3232
public static void main(String... args) {
33-
CommandResult<?> result = run(null, null, args);
33+
CommandResult<?> result = newCommandFacade().run(args);
3434
System.exit(result.getExitCode());
3535
}
3636

3737
@API(status = INTERNAL, since = "1.0")
3838
public static CommandResult<?> run(PrintWriter out, PrintWriter err, String... args) {
39-
ConsoleLauncher consoleLauncher = new ConsoleLauncher(ConsoleTestExecutor::new, out, err);
40-
return consoleLauncher.run(args);
41-
}
42-
43-
private final ConsoleTestExecutor.Factory consoleTestExecutorFactory;
44-
private final PrintWriter out;
45-
private final PrintWriter err;
46-
47-
ConsoleLauncher(ConsoleTestExecutor.Factory consoleTestExecutorFactory, PrintWriter out, PrintWriter err) {
48-
this.consoleTestExecutorFactory = consoleTestExecutorFactory;
49-
this.out = out;
50-
this.err = err;
51-
}
52-
53-
CommandResult<?> run(String... args) {
5439
try {
55-
return new CommandFacade(consoleTestExecutorFactory).run(out, err, args);
40+
return newCommandFacade().run(args, out, err);
5641
}
5742
finally {
58-
if (out != null) {
59-
out.flush();
60-
}
61-
if (err != null) {
62-
err.flush();
63-
}
43+
out.flush();
44+
err.flush();
6445
}
6546
}
6647

48+
private static CommandFacade newCommandFacade() {
49+
return new CommandFacade(ConsoleTestExecutor::new);
50+
}
51+
6752
}

junit-platform-console/src/main/java/org/junit/platform/console/options/CommandFacade.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,18 @@ public CommandFacade(ConsoleTestExecutor.Factory consoleTestExecutorFactory) {
3333
this.consoleTestExecutorFactory = consoleTestExecutorFactory;
3434
}
3535

36-
public CommandResult<?> run(PrintWriter out, PrintWriter err, String[] args) {
36+
public CommandResult<?> run(String[] args) {
37+
return run(args, Optional.empty());
38+
}
39+
40+
public CommandResult<?> run(String[] args, PrintWriter out, PrintWriter err) {
41+
return run(args, Optional.of(new OutputConfig(out, err)));
42+
}
43+
44+
private CommandResult<?> run(String[] args, Optional<OutputConfig> outputConfig) {
3745
Optional<String> version = ManifestVersionProvider.getImplementationVersion();
3846
System.setProperty("junit.docs.version",
3947
version.map(it -> it.endsWith("-SNAPSHOT") ? "snapshot" : it).orElse("current"));
40-
return new MainCommand(consoleTestExecutorFactory).run(out, err, args);
48+
return new MainCommand(consoleTestExecutorFactory).run(args, outputConfig);
4149
}
4250
}

junit-platform-console/src/main/java/org/junit/platform/console/options/MainCommand.java

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -103,10 +103,11 @@ private Object runCommand(String subcommand, Optional<String> triggeringOption)
103103

104104
List<String> args = new ArrayList<>(commandLine.getParseResult().expandedArgs());
105105
triggeringOption.ifPresent(args::remove);
106-
CommandResult<?> result = runCommand(commandLine.getOut(), //
107-
commandLine.getErr(), //
106+
CommandResult<?> result = runCommand( //
107+
new CommandLine(command), //
108108
args.toArray(new String[0]), //
109-
command);
109+
Optional.of(new OutputConfig(commandLine)) //
110+
);
110111
this.commandResult = result;
111112

112113
printDeprecationWarning(subcommand, triggeringOption, commandLine);
@@ -130,27 +131,18 @@ private static void printDeprecationWarning(String subcommand, Optional<String>
130131
err.flush();
131132
}
132133

133-
CommandResult<?> run(PrintWriter out, PrintWriter err, String[] args) {
134+
CommandResult<?> run(String[] args, Optional<OutputConfig> outputConfig) {
134135
CommandLine commandLine = new CommandLine(this) //
135136
.addSubcommand(new DiscoverTestsCommand(consoleTestExecutorFactory)) //
136137
.addSubcommand(new ExecuteTestsCommand(consoleTestExecutorFactory)) //
137138
.addSubcommand(new ListTestEnginesCommand());
138-
return runCommand(out, err, args, commandLine);
139+
return runCommand(commandLine, args, outputConfig);
139140
}
140141

141-
private static CommandResult<?> runCommand(PrintWriter out, PrintWriter err, String[] args, Object command) {
142-
return runCommand(out, err, args, new CommandLine(command));
143-
}
144-
145-
private static CommandResult<Object> runCommand(PrintWriter out, PrintWriter err, String[] args,
146-
CommandLine commandLine) {
147-
commandLine = BaseCommand.initialize(commandLine);
148-
if (out != null) {
149-
commandLine = commandLine.setOut(out);
150-
}
151-
if (err != null) {
152-
commandLine = commandLine.setErr(err);
153-
}
142+
private static CommandResult<Object> runCommand(CommandLine commandLine, String[] args,
143+
Optional<OutputConfig> outputConfig) {
144+
BaseCommand.initialize(commandLine);
145+
outputConfig.ifPresent(it -> it.applyTo(commandLine));
154146
int exitCode = commandLine.execute(args);
155147
return CommandResult.create(exitCode, getLikelyExecutedCommand(commandLine).getExecutionResult());
156148
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/*
2+
* Copyright 2015-2024 the original author or authors.
3+
*
4+
* All rights reserved. This program and the accompanying materials are
5+
* made available under the terms of the Eclipse Public License v2.0 which
6+
* accompanies this distribution and is available at
7+
*
8+
* https://www.eclipse.org/legal/epl-v20.html
9+
*/
10+
11+
package org.junit.platform.console.options;
12+
13+
import java.io.PrintWriter;
14+
15+
import picocli.CommandLine;
16+
17+
class OutputConfig {
18+
19+
private final PrintWriter out;
20+
private final PrintWriter err;
21+
22+
OutputConfig(CommandLine commandLine) {
23+
this(commandLine.getOut(), commandLine.getErr());
24+
}
25+
26+
OutputConfig(PrintWriter out, PrintWriter err) {
27+
this.out = out;
28+
this.err = err;
29+
}
30+
31+
void applyTo(CommandLine commandLine) {
32+
commandLine.setOut(out).setErr(err);
33+
}
34+
}

0 commit comments

Comments
 (0)