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

Commit 90820a50 authored by Brandon Maxwell's avatar Brandon Maxwell
Browse files

Added ackAllMilestones api to PausableExecutor

+ This API simplifies tests, specifically their tearDown methods.
Rather than needing to call ackMilestone numerous times to clean up
at the end of the test, this method can be called to ensure that the
thread running the production code isn't blocked on the tests.

Change-Id: I60730c52491b315aee571f4ae158f62d34b0dbc2
parent 054559b6
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -44,6 +44,14 @@ public interface PausableExecutor extends Executor {
    @NeededForTesting
    void ackMilestoneForTesting();

    /**
     * Method called from the test code to inform this executor that the tests are finished with all
     * milestones. Future calls to {@link #milestone()} or {@link #awaitMilestoneForTesting()}
     * should return immediately.
     */
    @NeededForTesting
    void ackAllMilestonesForTesting();

    /**
     * Method called from the test code to block until a milestone has been reached in the
     * production code.
+3 −0
Original line number Diff line number Diff line
@@ -29,6 +29,9 @@ public class PausableExecutorImpl implements PausableExecutor {
    @Override
    public void ackMilestoneForTesting() {}

    @Override
    public void ackAllMilestonesForTesting() {}

    @Override
    public void awaitMilestoneForTesting() {}

+9 −2
Original line number Diff line number Diff line
@@ -30,12 +30,13 @@ public final class SingleProdThreadExecutor implements PausableExecutor {

    private int mMilestonesReached;
    private int mMilestonesAcked;
    private boolean mHasAckedAllMilestones;

    @Override
    public synchronized void milestone() {
        ++mMilestonesReached;
        notify();
        while (mMilestonesReached > mMilestonesAcked) {
        while (!mHasAckedAllMilestones && mMilestonesReached > mMilestonesAcked) {
            try {
                wait();
            } catch (InterruptedException e) {}
@@ -48,9 +49,15 @@ public final class SingleProdThreadExecutor implements PausableExecutor {
        notify();
    }

    @Override
    public synchronized void ackAllMilestonesForTesting() {
        mHasAckedAllMilestones = true;
        notify();
    }

    @Override
    public synchronized void awaitMilestoneForTesting() throws InterruptedException {
        while (mMilestonesReached <= mMilestonesAcked) {
        while (!mHasAckedAllMilestones && mMilestonesReached <= mMilestonesAcked) {
            wait();
        }
    }
+2 −5
Original line number Diff line number Diff line
@@ -61,11 +61,8 @@ public class InCallTonePlayerTest extends AndroidTestCase {
        super.tearDown();
        // Stop any playing so the InCallTonePlayer isn't stuck waiting for the tone to complete
        mInCallTonePlayer.stop();
        // 3 milestones in InCallTonePlayer, ack them to ensure that the prod thread doesn't block
        // forever. It's fine to ack for more milestones than are hit
        mExecutor.ackMilestoneForTesting();
        mExecutor.ackMilestoneForTesting();
        mExecutor.ackMilestoneForTesting();
        // Ack all milestones to ensure that the prod thread doesn't block forever
        mExecutor.ackAllMilestonesForTesting();
    }

    public void testIsPlayingTone_False() {