From 90820a50b614e8b5f6a9830536553167e1914faa Mon Sep 17 00:00:00 2001 From: Brandon Maxwell Date: Fri, 12 Feb 2016 17:47:41 -0800 Subject: 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 --- .../com/android/incallui/async/SingleProdThreadExecutor.java | 11 +++++++++-- .../com/android/incallui/ringtone/InCallTonePlayerTest.java | 7 ++----- 2 files changed, 11 insertions(+), 7 deletions(-) (limited to 'InCallUI/tests') diff --git a/InCallUI/tests/src/com/android/incallui/async/SingleProdThreadExecutor.java b/InCallUI/tests/src/com/android/incallui/async/SingleProdThreadExecutor.java index 839bb2e96..5717c9478 100644 --- a/InCallUI/tests/src/com/android/incallui/async/SingleProdThreadExecutor.java +++ b/InCallUI/tests/src/com/android/incallui/async/SingleProdThreadExecutor.java @@ -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(); } } diff --git a/InCallUI/tests/src/com/android/incallui/ringtone/InCallTonePlayerTest.java b/InCallUI/tests/src/com/android/incallui/ringtone/InCallTonePlayerTest.java index 096d21122..59611f701 100644 --- a/InCallUI/tests/src/com/android/incallui/ringtone/InCallTonePlayerTest.java +++ b/InCallUI/tests/src/com/android/incallui/ringtone/InCallTonePlayerTest.java @@ -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() { -- cgit v1.2.3