Brion VIBBER has submitted this change and it was merged.
Change subject: Add tests for thread affinities of Safe AsyncTask
......................................................................
Add tests for thread affinities of Safe AsyncTask
This ensures that methods that shouls be running on the UI thread
are running on the UI Thread, and methods that should not be are
not running on the UI Thread.
The Test Cases class now inherits from ActivityUnitTestCase because
AsyncTask needs to be started from the UI thread, if not the
onPostExecute method is not run. Known semi-bug.
Change-Id: I816e8ba9cc77c3a36ac17b6eac18fa2d9ab03152
---
M wikipedia-it/AndroidManifest.xml
A wikipedia-it/src/main/java/org/wikimedia/wikipedia/test/TestDummyActivity.java
M
wikipedia-it/src/main/java/org/wikimedia/wikipedia/test/concurrency/AsyncTaskTest.java
3 files changed, 62 insertions(+), 4 deletions(-)
Approvals:
Brion VIBBER: Verified; Looks good to me, approved
diff --git a/wikipedia-it/AndroidManifest.xml b/wikipedia-it/AndroidManifest.xml
index 55499a5..71077e3 100644
--- a/wikipedia-it/AndroidManifest.xml
+++ b/wikipedia-it/AndroidManifest.xml
@@ -4,6 +4,7 @@
<application android:icon="@drawable/icon" android:label="@string/app_name">
<uses-library android:name="android.test.runner" />
+ <activity android:name=".TestDummyActivity"/>
</application>
<instrumentation android:targetPackage="org.wikimedia.wikipedia"
diff --git
a/wikipedia-it/src/main/java/org/wikimedia/wikipedia/test/TestDummyActivity.java
b/wikipedia-it/src/main/java/org/wikimedia/wikipedia/test/TestDummyActivity.java
new file mode 100644
index 0000000..c4efdeb
--- /dev/null
+++
b/wikipedia-it/src/main/java/org/wikimedia/wikipedia/test/TestDummyActivity.java
@@ -0,0 +1,15 @@
+package org.wikimedia.wikipedia.test;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+/**
+ * Dummy activity that does nothing and is happy about it.
+ *
+ * Used to do things on the UI thread in unit tests.
+ */
+public class TestDummyActivity extends Activity {
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ }
+}
\ No newline at end of file
diff --git
a/wikipedia-it/src/main/java/org/wikimedia/wikipedia/test/concurrency/AsyncTaskTest.java
b/wikipedia-it/src/main/java/org/wikimedia/wikipedia/test/concurrency/AsyncTaskTest.java
index ae845f5..bf268ee 100644
---
a/wikipedia-it/src/main/java/org/wikimedia/wikipedia/test/concurrency/AsyncTaskTest.java
+++
b/wikipedia-it/src/main/java/org/wikimedia/wikipedia/test/concurrency/AsyncTaskTest.java
@@ -1,19 +1,31 @@
package org.wikimedia.wikipedia.test.concurrency;
-import android.test.AndroidTestCase;
-import com.sun.corba.se.spi.orbutil.threadpool.ThreadPool;
+import android.content.Intent;
+import android.test.ActivityUnitTestCase;
import org.wikimedia.wikipedia.concurrency.ExceptionHandlingAsyncTask;
+import org.wikimedia.wikipedia.test.TestDummyActivity;
import java.util.concurrent.*;
-public class AsyncTaskTest extends AndroidTestCase {
- public static final int TASK_COMPLETION_TIMEOUT = 100;
+public class AsyncTaskTest extends ActivityUnitTestCase<TestDummyActivity> {
+ public static final int TASK_COMPLETION_TIMEOUT = 1000;
private Executor executor;
+
+ public AsyncTaskTest() {
+ super(TestDummyActivity.class);
+ }
+
private Executor getDefaultExecutor() {
if (executor == null) {
executor = new ScheduledThreadPoolExecutor(1);
}
return executor;
+ }
+
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
+ startActivity(new Intent(), null, null);
}
public void testFinishHandling() throws Exception {
@@ -61,4 +73,34 @@
}.execute();
assertTrue(exceptionLatch.await(TASK_COMPLETION_TIMEOUT,
TimeUnit.MILLISECONDS));
}
+
+ public void testAppropriateThreadFinish() throws Throwable {
+ final CountDownLatch completionLatch = new CountDownLatch(1);
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ final Thread callingThread = Thread.currentThread();
+ new ExceptionHandlingAsyncTask<Thread>(getDefaultExecutor()) {
+ @Override
+ public void onBeforeExecute() {
+ assertSame(callingThread, Thread.currentThread());
+ }
+
+ @Override
+ public void onFinish(Thread result) {
+ assertNotSame(result, Thread.currentThread());
+ assertSame(Thread.currentThread(), callingThread);
+ completionLatch.countDown();
+ }
+
+ @Override
+ public Thread performTask() throws Throwable {
+ assertNotSame(callingThread, Thread.currentThread());
+ return Thread.currentThread();
+ }
+ }.execute();
+ }
+ });
+ assertTrue(completionLatch.await(TASK_COMPLETION_TIMEOUT,
TimeUnit.MILLISECONDS));
+ }
}
--
To view, visit https://gerrit.wikimedia.org/r/92823
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I816e8ba9cc77c3a36ac17b6eac18fa2d9ab03152
Gerrit-PatchSet: 3
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Yuvipanda <[email protected]>
Gerrit-Reviewer: Brion VIBBER <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits