package io.reactivex.netty.examples;
import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.slf4j.Logger;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;
import static org.mockito.Matchers.*;
public class ExamplesMockLogger {
private final Logger mock;
private final Queue<String> logMessages;
public ExamplesMockLogger(Class<?> exampleClass) {
mock = Mockito.mock(Logger.class);
logMessages = new ConcurrentLinkedQueue<>();
Mockito.doAnswer(new TeeLogsAnswer(logMessages)).when(mock).error(anyString());
Mockito.doAnswer(new TeeLogsAnswer(logMessages)).when(mock).debug(anyString());
Mockito.doAnswer(new TeeLogsAnswer(logMessages)).when(mock).info(anyString());
Mockito.doAnswer(new TeeLogsAnswer(logMessages)).when(mock).warn(anyString());
}
public Logger getMock() {
return mock;
}
public Queue<String> getLogMessages() {
return logMessages;
}
private static class TeeLogsAnswer implements Answer<Void> {
private final Queue<String> output;
public TeeLogsAnswer(Queue<String> output) {
this.output = output;
}
@Override
public Void answer(InvocationOnMock invocation) throws Throwable {
String logged = (String) invocation.getArguments()[0];
System.out.println(logged);
output.add(logged);
return null;
}
}
}