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

Commit a1afeb69 authored by Neil Fuller's avatar Neil Fuller Committed by Gerrit Code Review
Browse files

Merge "Reverse ReferenceWithHistory.dump() order"

parents 999147b4 1a5a8744
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.util.IndentingPrintWriter;

import java.time.Duration;
import java.util.ArrayDeque;
import java.util.Iterator;

/**
 * A class that behaves like the following definition, except it stores the history of values set
@@ -112,9 +113,11 @@ public final class ReferenceWithHistory<V> {
        if (mValues == null) {
            ipw.println("{Empty}");
        } else {
            int i = mSetCount;
            for (TimestampedValue<V> valueHolder : mValues) {
                ipw.print(--i);
            int i = mSetCount - mValues.size();
            Iterator<TimestampedValue<V>> reverseIterator = mValues.descendingIterator();
            while (reverseIterator.hasNext()) {
                TimestampedValue<V> valueHolder = reverseIterator.next();
                ipw.print(i++);
                ipw.print("@");
                ipw.print(Duration.ofMillis(valueHolder.getReferenceTimeMillis()).toString());
                ipw.print(": ");
+60 −12
Original line number Diff line number Diff line
@@ -17,17 +17,19 @@
package com.android.server.timedetector;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;

import android.util.IndentingPrintWriter;

import androidx.test.runner.AndroidJUnit4;

import com.android.internal.util.IndentingPrintWriter;
import com.android.server.timezonedetector.ReferenceWithHistory;

import org.junit.Test;
import org.junit.runner.RunWith;

import java.io.StringWriter;
import java.util.Arrays;

@RunWith(AndroidJUnit4.class)
public class ReferenceWithHistoryTest {
@@ -41,31 +43,34 @@ public class ReferenceWithHistoryTest {

        // Check unset behavior.
        compareGet(referenceWithHistory, reference, null);
        assertNotNull(dumpReferenceWithHistory(referenceWithHistory));
        assertDumpContent(referenceWithHistory);
        compareToString(referenceWithHistory, reference, "null");

        // Try setting null.
        setAndCompareReturnValue(referenceWithHistory, reference, null);
        compareGet(referenceWithHistory, reference, null);
        assertNotNull(dumpReferenceWithHistory(referenceWithHistory));
        assertDumpContent(referenceWithHistory, new DumpLine(0, "null"));
        compareToString(referenceWithHistory, reference, "null");

        // Try setting a non-null value.
        setAndCompareReturnValue(referenceWithHistory, reference, "Foo");
        compareGet(referenceWithHistory, reference, "Foo");
        assertNotNull(dumpReferenceWithHistory(referenceWithHistory));
        assertDumpContent(referenceWithHistory,
                new DumpLine(0, "null"), new DumpLine(1, "Foo"));
        compareToString(referenceWithHistory, reference, "Foo");

        // Try setting null again.
        setAndCompareReturnValue(referenceWithHistory, reference, "Foo");
        compareGet(referenceWithHistory, reference, "Foo");
        assertNotNull(dumpReferenceWithHistory(referenceWithHistory));
        compareToString(referenceWithHistory, reference, "Foo");
        setAndCompareReturnValue(referenceWithHistory, reference, null);
        compareGet(referenceWithHistory, reference, null);
        assertDumpContent(referenceWithHistory,
                new DumpLine(1, "Foo"), new DumpLine(2, "null"));
        compareToString(referenceWithHistory, reference, "null");

        // Try a non-null value again.
        setAndCompareReturnValue(referenceWithHistory, reference, "Bar");
        compareGet(referenceWithHistory, reference, "Bar");
        assertNotNull(dumpReferenceWithHistory(referenceWithHistory));
        assertDumpContent(referenceWithHistory,
                new DumpLine(2, "null"), new DumpLine(3, "Bar"));
        compareToString(referenceWithHistory, reference, "Bar");
    }

@@ -132,11 +137,54 @@ public class ReferenceWithHistoryTest {
        assertEquals(expected, referenceWithHistory.toString());
    }

    private static String dumpReferenceWithHistory(ReferenceWithHistory<?> referenceWithHistory) {
    private static void assertDumpContent(
            ReferenceWithHistory<?> referenceWithHistory, DumpLine... expectedLines) {
        String[] actualLines = dumpReferenceWithHistory(referenceWithHistory);

        if (expectedLines.length == 0) {
            String expectedEmptyOutput = "{Empty}";
            assertEquals(expectedEmptyOutput, 1, actualLines.length);
            assertEquals(expectedEmptyOutput, actualLines[0]);
        } else {
            assertEquals("Expected=" + Arrays.toString(expectedLines)
                            + ", actual=" + Arrays.toString(actualLines),
                    expectedLines.length, actualLines.length);
            for (int i = 0; i < expectedLines.length; i++) {
                DumpLine expectedLine = expectedLines[i];
                String actualLine = actualLines[i];
                assertTrue("i=" + i + ", expected=" + expectedLine + ", actual=" + actualLine,
                        actualLine.startsWith(Integer.toString(expectedLine.mIndex)));
                assertTrue("i=" + i + ", expected=" + expectedLine + ", actual=" + actualLine,
                        actualLine.endsWith(expectedLine.mLine));
            }
        }
    }

    private static String[] dumpReferenceWithHistory(ReferenceWithHistory<?> referenceWithHistory) {
        StringWriter stringWriter = new StringWriter();
        try (IndentingPrintWriter ipw = new IndentingPrintWriter(stringWriter, " ")) {
            referenceWithHistory.dump(ipw);
            return stringWriter.toString();
            return stringWriter.toString().split("\n");
        }
    }

    /** An expected line of {@link ReferenceWithHistory#dump} output. */
    private static class DumpLine {

        final int mIndex;
        final String mLine;

        DumpLine(int index, String line) {
            mIndex = index;
            mLine = line;
        }

        @Override
        public String toString() {
            return "DumpLine{"
                    + "mIndex=" + mIndex
                    + ", mLine='" + mLine + '\''
                    + '}';
        }
    }
}