Merge "Implement a single interface to consume events from EventLogger"
This commit is contained in:
@@ -26,7 +26,9 @@ import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayDeque;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
/**
|
||||
@@ -79,20 +81,34 @@ public class EventLogger {
|
||||
enqueue(event.printLog(logType, tag));
|
||||
}
|
||||
|
||||
/** Dumps events into the given {@link DumpSink}. */
|
||||
public synchronized void dump(DumpSink dumpSink) {
|
||||
dumpSink.sink(mTag, new ArrayList<>(mEvents));
|
||||
}
|
||||
|
||||
/** Dumps events using {@link PrintWriter}. */
|
||||
public synchronized void dump(PrintWriter pw) {
|
||||
dump(pw, "" /* prefix */);
|
||||
}
|
||||
|
||||
/** Dumps events using {@link PrintWriter} with a certain indent. */
|
||||
public synchronized void dump(PrintWriter pw, String prefix) {
|
||||
pw.println(prefix + "Events log: " + mTag);
|
||||
String indent = prefix + " ";
|
||||
public synchronized void dump(PrintWriter pw, String indent) {
|
||||
pw.println(indent + "Events log: " + mTag);
|
||||
|
||||
String childrenIndention = indent + " ";
|
||||
for (Event evt : mEvents) {
|
||||
pw.println(indent + evt.toString());
|
||||
pw.println(childrenIndention + evt.toString());
|
||||
}
|
||||
}
|
||||
|
||||
/** Receives events from {@link EventLogger} upon a {@link #dump(DumpSink)} call. **/
|
||||
public interface DumpSink {
|
||||
|
||||
/** Processes given events into some pipeline with a given tag. **/
|
||||
void sink(String tag, List<Event> events);
|
||||
|
||||
}
|
||||
|
||||
public abstract static class Event {
|
||||
|
||||
/** Timestamps formatter. */
|
||||
|
||||
@@ -29,8 +29,10 @@ import org.junit.runners.Parameterized;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.io.StringWriter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
@SmallTest
|
||||
@RunWith(Enclosed.class)
|
||||
@@ -51,17 +53,25 @@ public class EventLoggerTest {
|
||||
private StringWriter mTestStringWriter;
|
||||
private PrintWriter mTestPrintWriter;
|
||||
|
||||
private TestDumpSink mTestConsumer;
|
||||
private EventLogger mEventLogger;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
mTestStringWriter = new StringWriter();
|
||||
mTestPrintWriter = new PrintWriter(mTestStringWriter);
|
||||
mTestConsumer = new TestDumpSink();
|
||||
mEventLogger = new EventLogger(EVENTS_LOGGER_SIZE, EVENTS_LOGGER_TAG);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testThatConsumeOfEmptyLoggerProducesEmptyList() {
|
||||
public void testThatConsumerProducesEmptyListFromEmptyLog() {
|
||||
mEventLogger.dump(mTestConsumer);
|
||||
assertThat(mTestConsumer.getLastKnownConsumedEvents()).isEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testThatPrintWriterProducesEmptyListFromEmptyLog() {
|
||||
mEventLogger.dump(mTestPrintWriter);
|
||||
assertThat(mTestStringWriter.toString()).isEmpty();
|
||||
}
|
||||
@@ -102,10 +112,12 @@ public class EventLoggerTest {
|
||||
});
|
||||
}
|
||||
|
||||
private TestDumpSink mTestConsumer;
|
||||
private EventLogger mEventLogger;
|
||||
|
||||
private final StringWriter mTestStringWriter;
|
||||
private final PrintWriter mTestPrintWriter;
|
||||
|
||||
private final EventLogger.Event[] mEventsToInsert;
|
||||
private final EventLogger.Event[] mExpectedEvents;
|
||||
|
||||
@@ -119,11 +131,25 @@ public class EventLoggerTest {
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
mTestConsumer = new TestDumpSink();
|
||||
mEventLogger = new EventLogger(EVENTS_LOGGER_SIZE, EVENTS_LOGGER_TAG);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testThatLoggingWorksAsExpected() {
|
||||
public void testThatConsumerDumpsEventsAsExpected() {
|
||||
for (EventLogger.Event event: mEventsToInsert) {
|
||||
mEventLogger.enqueue(event);
|
||||
}
|
||||
|
||||
mEventLogger.dump(mTestConsumer);
|
||||
|
||||
assertThat(mTestConsumer.getLastKnownConsumedEvents())
|
||||
.containsExactlyElementsIn(mExpectedEvents);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testThatPrintWriterDumpsEventsAsExpected() {
|
||||
for (EventLogger.Event event: mEventsToInsert) {
|
||||
mEventLogger.enqueue(event);
|
||||
}
|
||||
@@ -149,11 +175,27 @@ public class EventLoggerTest {
|
||||
return stringWriter.toString();
|
||||
}
|
||||
|
||||
private static class TestEvent extends EventLogger.Event {
|
||||
|
||||
private static final class TestEvent extends EventLogger.Event {
|
||||
|
||||
@Override
|
||||
public String eventToString() {
|
||||
return getClass().getName() + "@" + Integer.toHexString(hashCode());
|
||||
}
|
||||
}
|
||||
|
||||
private static final class TestDumpSink implements EventLogger.DumpSink {
|
||||
|
||||
private final ArrayList<EventLogger.Event> mEvents = new ArrayList<>();
|
||||
|
||||
@Override
|
||||
public void sink(String tag, List<EventLogger.Event> events) {
|
||||
mEvents.clear();
|
||||
mEvents.addAll(events);
|
||||
}
|
||||
|
||||
public ArrayList<EventLogger.Event> getLastKnownConsumedEvents() {
|
||||
return new ArrayList<>(mEvents);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user