mirror of
https://github.com/apache/maven-mvnd.git
synced 2025-09-27 16:08:21 +00:00
Provide smarter output on the client, fixes #77
All events are directly forwarded to the client. The client is now responsible for ordering them per project and displaying them if needed. A thread is now started to read the terminal input with support for '+' to display one more line per project, '-' to display one line less, and 'Ctrl+L' to redraw the display which could become messed if the build messages are a bit unusual (this may require a better fix though).
This commit is contained in:
@@ -17,6 +17,7 @@ package org.jboss.fuse.mvnd.assertj;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
@@ -43,7 +44,7 @@ public class MatchInOrderAmongOthers<T extends List<? extends String>> extends C
|
||||
.filter(pat -> pat.matcher(m).find())
|
||||
.findFirst()
|
||||
.orElse(null))
|
||||
.filter(pat -> pat != null) /* remove null patterns */
|
||||
.filter(Objects::nonNull) /* remove null patterns */
|
||||
.collect(Collectors.toList())
|
||||
/* if the mapped patterns equal the input patterns then each pattern matched exactly once */
|
||||
.equals(patterns),
|
||||
|
@@ -32,6 +32,8 @@ import org.junit.jupiter.api.Test;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
import org.mockito.Mockito;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
|
||||
@MvndTest(projectDir = "src/test/projects/multi-module")
|
||||
public class MultiModuleTest {
|
||||
|
||||
@@ -71,7 +73,7 @@ public class MultiModuleTest {
|
||||
client.execute(output, "clean", "install", "-e").assertSuccess();
|
||||
|
||||
final ArgumentCaptor<String> logMessage = ArgumentCaptor.forClass(String.class);
|
||||
Mockito.verify(output, Mockito.atLeast(1)).accept(logMessage.capture());
|
||||
Mockito.verify(output, Mockito.atLeast(1)).accept(any(), logMessage.capture());
|
||||
Assertions.assertThat(logMessage.getAllValues())
|
||||
.satisfiesAnyOf( /* Two orderings are possible */
|
||||
messages -> Assertions.assertThat(messages)
|
||||
|
@@ -30,6 +30,8 @@ import org.junit.jupiter.api.Test;
|
||||
import org.mockito.InOrder;
|
||||
import org.mockito.Mockito;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
|
||||
@MvndNativeTest(projectDir = "src/test/projects/single-module")
|
||||
public class SingleModuleNativeIT {
|
||||
|
||||
@@ -57,14 +59,14 @@ public class SingleModuleNativeIT {
|
||||
final Properties props = MvndTestUtil.properties(layout.multiModuleProjectDirectory().resolve("pom.xml"));
|
||||
|
||||
final InOrder inOrder = Mockito.inOrder(o);
|
||||
inOrder.verify(o).accept(Mockito.contains("Building single-module"));
|
||||
inOrder.verify(o).accept(Mockito.contains(MvndTestUtil.plugin(props, "maven-clean-plugin") + ":clean"));
|
||||
inOrder.verify(o).accept(Mockito.contains(MvndTestUtil.plugin(props, "maven-compiler-plugin") + ":compile"));
|
||||
inOrder.verify(o).accept(Mockito.contains(MvndTestUtil.plugin(props, "maven-compiler-plugin") + ":testCompile"));
|
||||
inOrder.verify(o).accept(Mockito.contains(MvndTestUtil.plugin(props, "maven-surefire-plugin") + ":test"));
|
||||
inOrder.verify(o).accept(Mockito.contains(MvndTestUtil.plugin(props, "maven-install-plugin") + ":install"));
|
||||
inOrder.verify(o)
|
||||
.accept(Mockito.contains("SUCCESS build of project org.jboss.fuse.mvnd.test.single-module:single-module"));
|
||||
inOrder.verify(o).accept(any(), Mockito.contains("Building single-module"));
|
||||
inOrder.verify(o).accept(any(), Mockito.contains(MvndTestUtil.plugin(props, "maven-clean-plugin") + ":clean"));
|
||||
inOrder.verify(o).accept(any(), Mockito.contains(MvndTestUtil.plugin(props, "maven-compiler-plugin") + ":compile"));
|
||||
inOrder.verify(o).accept(any(), Mockito.contains(MvndTestUtil.plugin(props, "maven-compiler-plugin") + ":testCompile"));
|
||||
inOrder.verify(o).accept(any(), Mockito.contains(MvndTestUtil.plugin(props, "maven-surefire-plugin") + ":test"));
|
||||
inOrder.verify(o).accept(any(), Mockito.contains(MvndTestUtil.plugin(props, "maven-install-plugin") + ":install"));
|
||||
inOrder.verify(o).accept(any(),
|
||||
Mockito.contains("SUCCESS build of project org.jboss.fuse.mvnd.test.single-module:single-module"));
|
||||
|
||||
assertJVM(o, props);
|
||||
|
||||
|
@@ -29,6 +29,8 @@ import org.junit.jupiter.api.Test;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
import org.mockito.Mockito;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
|
||||
@MvndTest(projectDir = "src/test/projects/single-module")
|
||||
public class StopStatusTest {
|
||||
|
||||
@@ -54,7 +56,7 @@ public class StopStatusTest {
|
||||
final ClientOutput output = Mockito.mock(ClientOutput.class);
|
||||
client.execute(output, "--status").assertSuccess();
|
||||
final ArgumentCaptor<String> logMessage = ArgumentCaptor.forClass(String.class);
|
||||
Mockito.verify(output, Mockito.atLeast(1)).accept(logMessage.capture());
|
||||
Mockito.verify(output, Mockito.atLeast(1)).accept(any(), logMessage.capture());
|
||||
Assertions.assertThat(logMessage.getAllValues())
|
||||
.is(new MatchInOrderAmongOthers<>(
|
||||
d.getUid() + " +" + d.getPid() + " +" + d.getAddress()));
|
||||
@@ -76,7 +78,7 @@ public class StopStatusTest {
|
||||
final ClientOutput output = Mockito.mock(ClientOutput.class);
|
||||
client.execute(output, "--status").assertSuccess();
|
||||
final ArgumentCaptor<String> logMessage = ArgumentCaptor.forClass(String.class);
|
||||
Mockito.verify(output, Mockito.atLeast(1)).accept(logMessage.capture());
|
||||
Mockito.verify(output, Mockito.atLeast(1)).accept(any(), logMessage.capture());
|
||||
Assertions.assertThat(
|
||||
logMessage.getAllValues().stream()
|
||||
.filter(m -> m.contains(d.getUid()))
|
||||
|
@@ -28,6 +28,8 @@ import org.junit.jupiter.api.Test;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
import org.mockito.Mockito;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
|
||||
@MvndNativeTest(projectDir = MvndTestExtension.TEMP_EXTERNAL)
|
||||
public class VersionNativeIT {
|
||||
|
||||
@@ -44,7 +46,7 @@ public class VersionNativeIT {
|
||||
client.execute(output, "-v").assertSuccess();
|
||||
|
||||
final ArgumentCaptor<String> logMessage = ArgumentCaptor.forClass(String.class);
|
||||
Mockito.verify(output, Mockito.atLeast(1)).accept(logMessage.capture());
|
||||
Mockito.verify(output, Mockito.atLeast(1)).accept(any(), logMessage.capture());
|
||||
|
||||
Assertions.assertThat(logMessage.getAllValues())
|
||||
.is(new MatchInOrderAmongOthers<>(
|
||||
|
@@ -26,7 +26,6 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.stream.Collectors;
|
||||
import org.jboss.fuse.mvnd.client.Client;
|
||||
import org.jboss.fuse.mvnd.client.ClientLayout;
|
||||
import org.jboss.fuse.mvnd.client.ClientOutput;
|
||||
@@ -57,7 +56,7 @@ public class NativeTestClient implements Client {
|
||||
public ExecutionResult execute(ClientOutput output, List<String> args) throws InterruptedException {
|
||||
final List<String> cmd = new ArrayList<String>(args.size() + 1);
|
||||
cmd.add(mvndNativeExecutablePath.toString());
|
||||
args.stream().forEach(cmd::add);
|
||||
cmd.addAll(args);
|
||||
if (!Environment.MVND_PROPERTIES_PATH.hasCommandLineProperty(args)) {
|
||||
cmd.add(Environment.MVND_PROPERTIES_PATH.asCommandLineProperty(layout.getMvndPropertiesPath().toString()));
|
||||
}
|
||||
@@ -81,9 +80,9 @@ public class NativeTestClient implements Client {
|
||||
if (!Environment.JAVA_HOME.hasCommandLineProperty(args)) {
|
||||
env.put("JAVA_HOME", System.getProperty("java.home"));
|
||||
}
|
||||
final String cmdString = cmd.stream().collect(Collectors.joining(" "));
|
||||
output.accept("Executing " + cmdString);
|
||||
try (CommandProcess process = new CommandProcess(builder.start(), cmd, output)) {
|
||||
final String cmdString = String.join(" ", cmd);
|
||||
output.accept(null, "Executing " + cmdString);
|
||||
try (CommandProcess process = new CommandProcess(builder.start(), cmd, s -> output.accept(null, s))) {
|
||||
return process.waitFor(timeoutMs);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException("Could not execute: " + cmdString, e);
|
||||
@@ -127,7 +126,7 @@ public class NativeTestClient implements Client {
|
||||
}
|
||||
sb.append("\n--- stderr+stdout start ---");
|
||||
synchronized (log) {
|
||||
log.stream().forEach(s -> sb.append('\n').append(s));
|
||||
log.forEach(s -> sb.append('\n').append(s));
|
||||
}
|
||||
sb.append("\n--- stderr+stdout end ---");
|
||||
throw new AssertionError(sb);
|
||||
|
Reference in New Issue
Block a user