Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 59eec43b authored by Alex Dadukin's avatar Alex Dadukin Committed by Android (Google) Code Review
Browse files

Merge "Implement a single interface to consume events from EventLogger"

parents 943864be a124382e
Loading
Loading
Loading
Loading
+20 −4
Original line number Diff line number Diff line
@@ -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,18 +81,32 @@ 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 {
+45 −3
Original line number Diff line number Diff line
@@ -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);
        }
    }
}