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

Commit 9ceed75e authored by Jeff Sharkey's avatar Jeff Sharkey Committed by Android (Google) Code Review
Browse files

Merge "Support "probing" ignored tests; more Parcel impl." into main

parents 4cd2a5dc 06e55aba
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -465,9 +465,7 @@ public final class Parcel {
    private static native byte[] nativeMarshall(long nativePtr);
    private static native void nativeUnmarshall(
            long nativePtr, byte[] data, int offset, int length);
    @RavenwoodThrow
    private static native int nativeCompareData(long thisNativePtr, long otherNativePtr);
    @RavenwoodThrow
    private static native boolean nativeCompareDataInRange(
            long ptrA, int offsetA, long ptrB, int offsetB, int length);
    private static native void nativeAppendFrom(
+0 −4
Original line number Diff line number Diff line
@@ -197,7 +197,6 @@ public class BundleTest {
    }

    @Test
    @IgnoreUnderRavenwood(blockedBy = Parcel.class)
    public void kindofEquals_bothParcelled_same() {
        Bundle bundle1 = new Bundle();
        bundle1.putString("StringKey", "S");
@@ -215,7 +214,6 @@ public class BundleTest {
    }

    @Test
    @IgnoreUnderRavenwood(blockedBy = Parcel.class)
    public void kindofEquals_bothParcelled_different() {
        Bundle bundle1 = new Bundle();
        bundle1.putString("StringKey", "S");
@@ -247,7 +245,6 @@ public class BundleTest {
    }

    @Test
    @IgnoreUnderRavenwood(blockedBy = Parcel.class)
    public void kindofEquals_lazyValues() {
        Parcelable p1 = new CustomParcelable(13, "Tiramisu");
        Parcelable p2 = new CustomParcelable(13, "Tiramisu");
@@ -281,7 +278,6 @@ public class BundleTest {
    }

    @Test
    @IgnoreUnderRavenwood(blockedBy = Parcel.class)
    public void kindofEquals_lazyValuesWithIdenticalParcels_returnsTrue() {
        Parcelable p1 = new CustomParcelable(13, "Tiramisu");
        Parcelable p2 = new CustomParcelable(13, "Tiramisu");
+0 −6
Original line number Diff line number Diff line
@@ -132,7 +132,6 @@ public class ParcelTest {
    }

    @Test
    @IgnoreUnderRavenwood(blockedBy = Parcel.class)
    public void testCompareDataInRange_whenSameData() {
        Parcel pA = Parcel.obtain();
        int iA = pA.dataPosition();
@@ -169,7 +168,6 @@ public class ParcelTest {
    }

    @Test
    @IgnoreUnderRavenwood(blockedBy = Parcel.class)
    public void testCompareDataInRange_whenDifferentData() {
        Parcel pA = Parcel.obtain();
        int iA = pA.dataPosition();
@@ -186,7 +184,6 @@ public class ParcelTest {
    }

    @Test
    @IgnoreUnderRavenwood(blockedBy = Parcel.class)
    public void testCompareDataInRange_whenLimitOutOfBounds_throws() {
        Parcel pA = Parcel.obtain();
        int iA = pA.dataPosition();
@@ -213,7 +210,6 @@ public class ParcelTest {
    }

    @Test
    @IgnoreUnderRavenwood(blockedBy = Parcel.class)
    public void testCompareDataInRange_whenLengthZero() {
        Parcel pA = Parcel.obtain();
        int iA = pA.dataPosition();
@@ -232,7 +228,6 @@ public class ParcelTest {
    }

    @Test
    @IgnoreUnderRavenwood(blockedBy = Parcel.class)
    public void testCompareDataInRange_whenNegativeLength_throws() {
        Parcel pA = Parcel.obtain();
        int iA = pA.dataPosition();
@@ -248,7 +243,6 @@ public class ParcelTest {
    }

    @Test
    @IgnoreUnderRavenwood(blockedBy = Parcel.class)
    public void testCompareDataInRange_whenNegativeOffset_throws() {
        Parcel pA = Parcel.obtain();
        int iA = pA.dataPosition();
+70 −9
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package android.platform.test.ravenwood;

import static org.junit.Assert.fail;

import android.platform.test.annotations.IgnoreUnderRavenwood;

import org.junit.Assume;
@@ -36,6 +38,15 @@ public class RavenwoodRule implements TestRule {

    private static final boolean IS_UNDER_RAVENWOOD = RavenwoodRuleImpl.isUnderRavenwood();

    /**
     * When probing is enabled, all tests will be unconditionally run under Ravenwood to detect
     * cases where a test is able to pass despite being marked as {@code IgnoreUnderRavenwood}.
     *
     * This is typically helpful for internal maintainers discovering tests that had previously
     * been ignored, but now have enough Ravenwood-supported functionality to be enabled.
     */
    private static final boolean ENABLE_PROBE_IGNORED = false; // DO NOT SUBMIT WITH TRUE

    private static final int SYSTEM_UID = 1000;
    private static final int NOBODY_UID = 9999;
    private static final int FIRST_APPLICATION_UID = 10000;
@@ -97,26 +108,76 @@ public class RavenwoodRule implements TestRule {
        return IS_UNDER_RAVENWOOD;
    }

    /**
     * Test if the given {@link Description} has been marked with an {@link IgnoreUnderRavenwood}
     * annotation, either at the method or class level.
     */
    private static boolean hasIgnoreUnderRavenwoodAnnotation(Description description) {
        if (description.getTestClass().getAnnotation(IgnoreUnderRavenwood.class) != null) {
            return true;
        } else if (description.getAnnotation(IgnoreUnderRavenwood.class) != null) {
            return true;
        } else {
            return false;
        }
    }

    @Override
    public Statement apply(Statement base, Description description) {
        if (ENABLE_PROBE_IGNORED) {
            return applyProbeIgnored(base, description);
        } else {
            return applyDefault(base, description);
        }
    }

    /**
     * Run the given {@link Statement} with no special treatment.
     */
    private Statement applyDefault(Statement base, Description description) {
        return new Statement() {
            @Override
            public void evaluate() throws Throwable {
                if (description.getTestClass().getAnnotation(IgnoreUnderRavenwood.class) != null) {
                    Assume.assumeFalse(IS_UNDER_RAVENWOOD);
                }
                if (description.getAnnotation(IgnoreUnderRavenwood.class) != null) {
                if (hasIgnoreUnderRavenwoodAnnotation(description)) {
                    Assume.assumeFalse(IS_UNDER_RAVENWOOD);
                }
                if (IS_UNDER_RAVENWOOD) {

                RavenwoodRuleImpl.init(RavenwoodRule.this);
                try {
                    base.evaluate();
                } finally {
                    RavenwoodRuleImpl.reset(RavenwoodRule.this);
                }
            }
        };
    }

    /**
     * Run the given {@link Statement} with probing enabled. All tests will be unconditionally
     * run under Ravenwood to detect cases where a test is able to pass despite being marked as
     * {@code IgnoreUnderRavenwood}.
     */
    private Statement applyProbeIgnored(Statement base, Description description) {
        return new Statement() {
            @Override
            public void evaluate() throws Throwable {
                RavenwoodRuleImpl.init(RavenwoodRule.this);
                try {
                    base.evaluate();
                } catch (Throwable t) {
                    if (hasIgnoreUnderRavenwoodAnnotation(description)) {
                        // This failure is expected, so eat the exception and report the
                        // assumption failure that test authors expect
                        Assume.assumeFalse(IS_UNDER_RAVENWOOD);
                    }
                    throw t;
                } finally {
                    if (IS_UNDER_RAVENWOOD) {
                    RavenwoodRuleImpl.reset(RavenwoodRule.this);
                }

                if (hasIgnoreUnderRavenwoodAnnotation(description) && IS_UNDER_RAVENWOOD) {
                    fail("Test was annotated with IgnoreUnderRavenwood, but it actually "
                            + "passed under Ravenwood; consider removing the annotation");
                }
            }
        };
+2 −4
Original line number Diff line number Diff line
@@ -22,12 +22,10 @@ public class RavenwoodRuleImpl {
    }

    public static void init(RavenwoodRule rule) {
        // Must be provided by impl to reference runtime internals
        throw new UnsupportedOperationException();
        // No-op when running on a real device
    }

    public static void reset(RavenwoodRule rule) {
        // Must be provided by impl to reference runtime internals
        throw new UnsupportedOperationException();
        // No-op when running on a real device
    }
}
Loading