| /* |
| * Copyright 2015 The WebRTC Project Authors. All rights reserved. |
| * |
| * Use of this source code is governed by a BSD-style license |
| * that can be found in the LICENSE file in the root of the source |
| * tree. An additional intellectual property rights grant can be found |
| * in the file PATENTS. All contributing project authors may |
| * be found in the AUTHORS file in the root of the source tree. |
| */ |
| |
| package org.appspot.apprtc.test; |
| |
| import java.util.concurrent.CountDownLatch; |
| import java.util.concurrent.TimeUnit; |
| |
| import org.appspot.apprtc.util.LooperExecutor; |
| |
| import android.test.InstrumentationTestCase; |
| import android.util.Log; |
| |
| public class LooperExecutorTest extends InstrumentationTestCase { |
| private static final String TAG = "LooperTest"; |
| private static final int WAIT_TIMEOUT = 5000; |
| |
| public void testLooperExecutor() throws InterruptedException { |
| Log.d(TAG, "testLooperExecutor"); |
| final int counter[] = new int[1]; |
| final int expectedCounter = 10; |
| final CountDownLatch looperDone = new CountDownLatch(1); |
| |
| Runnable counterIncRunnable = new Runnable() { |
| @Override |
| public void run() { |
| counter[0]++; |
| Log.d(TAG, "Run " + counter[0]); |
| } |
| }; |
| LooperExecutor executor = new LooperExecutor(); |
| |
| // Try to execute a counter increment task before starting an executor. |
| executor.execute(counterIncRunnable); |
| |
| // Start the executor and run expected amount of counter increment task. |
| executor.requestStart(); |
| for (int i = 0; i < expectedCounter; i++) { |
| executor.execute(counterIncRunnable); |
| } |
| executor.execute(new Runnable() { |
| @Override |
| public void run() { |
| looperDone.countDown(); |
| } |
| }); |
| executor.requestStop(); |
| |
| // Try to execute a task after stopping the executor. |
| executor.execute(counterIncRunnable); |
| |
| // Wait for final looper task and make sure the counter increment task |
| // is executed expected amount of times. |
| looperDone.await(WAIT_TIMEOUT, TimeUnit.MILLISECONDS); |
| assertTrue (looperDone.getCount() == 0); |
| assertTrue (counter[0] == expectedCounter); |
| |
| Log.d(TAG, "testLooperExecutor done"); |
| } |
| } |