diff options
author | Brandon Maxwell <maxwelb@google.com> | 2016-02-13 02:53:01 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2016-02-13 02:53:01 +0000 |
commit | c677fc15403996055d2c6fa73e7ff0928bd218b9 (patch) | |
tree | 0b9a0375efe287cdb3007595ab2dbf3b97f7692f | |
parent | 97fbfe5baaccbd06c19ebde6636ca500278a21f2 (diff) | |
parent | 90820a50b614e8b5f6a9830536553167e1914faa (diff) |
Added ackAllMilestones api to PausableExecutor
am: 90820a50b6
* commit '90820a50b614e8b5f6a9830536553167e1914faa':
Added ackAllMilestones api to PausableExecutor
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() { |