1/* 2 * Copyright 2015 The WebRTC Project Authors. All rights reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11package org.appspot.apprtc.test; 12 13import java.util.concurrent.CountDownLatch; 14import java.util.concurrent.TimeUnit; 15 16import org.appspot.apprtc.util.LooperExecutor; 17 18import android.test.InstrumentationTestCase; 19import android.util.Log; 20 21public class LooperExecutorTest extends InstrumentationTestCase { 22 private static final String TAG = "LooperTest"; 23 private static final int WAIT_TIMEOUT = 5000; 24 25 public void testLooperExecutor() throws InterruptedException { 26 Log.d(TAG, "testLooperExecutor"); 27 final int counter[] = new int[1]; 28 final int expectedCounter = 10; 29 final CountDownLatch looperDone = new CountDownLatch(1); 30 31 Runnable counterIncRunnable = new Runnable() { 32 @Override 33 public void run() { 34 counter[0]++; 35 Log.d(TAG, "Run " + counter[0]); 36 } 37 }; 38 LooperExecutor executor = new LooperExecutor(); 39 40 // Try to execute a counter increment task before starting an executor. 41 executor.execute(counterIncRunnable); 42 43 // Start the executor and run expected amount of counter increment task. 44 executor.requestStart(); 45 for (int i = 0; i < expectedCounter; i++) { 46 executor.execute(counterIncRunnable); 47 } 48 executor.execute(new Runnable() { 49 @Override 50 public void run() { 51 looperDone.countDown(); 52 } 53 }); 54 executor.requestStop(); 55 56 // Try to execute a task after stopping the executor. 57 executor.execute(counterIncRunnable); 58 59 // Wait for final looper task and make sure the counter increment task 60 // is executed expected amount of times. 61 looperDone.await(WAIT_TIMEOUT, TimeUnit.MILLISECONDS); 62 assertTrue (looperDone.getCount() == 0); 63 assertTrue (counter[0] == expectedCounter); 64 65 Log.d(TAG, "testLooperExecutor done"); 66 } 67} 68