diff options
Diffstat (limited to 'InCallUI')
4 files changed, 22 insertions, 7 deletions
diff --git a/InCallUI/src/com/android/incallui/async/PausableExecutor.java b/InCallUI/src/com/android/incallui/async/PausableExecutor.java index fdeef360c..1b8201a79 100644 --- a/InCallUI/src/com/android/incallui/async/PausableExecutor.java +++ b/InCallUI/src/com/android/incallui/async/PausableExecutor.java @@ -45,6 +45,14 @@ public interface PausableExecutor extends Executor { 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. */ diff --git a/InCallUI/src/com/android/incallui/async/PausableExecutorImpl.java b/InCallUI/src/com/android/incallui/async/PausableExecutorImpl.java index e493feb3d..15900e57b 100644 --- a/InCallUI/src/com/android/incallui/async/PausableExecutorImpl.java +++ b/InCallUI/src/com/android/incallui/async/PausableExecutorImpl.java @@ -30,6 +30,9 @@ public class PausableExecutorImpl implements PausableExecutor { public void ackMilestoneForTesting() {} @Override + public void ackAllMilestonesForTesting() {} + + @Override public void awaitMilestoneForTesting() {} @Override 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) {} @@ -49,8 +50,14 @@ public final class SingleProdThreadExecutor implements PausableExecutor { } @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() { |