From 8df8e9a76f86a106f02019aabec14ac04bc04463 Mon Sep 17 00:00:00 2001 From: Matthias Kaeppler Date: Wed, 14 Aug 2013 10:37:51 +0200 Subject: [PATCH 01/10] Add rxjava-android build module + config Should this be shared with other contribs through the parent module? Lots of copy and paste here. --- rxjava-contrib/rxjava-android/build.gradle | 50 ++++++++++++++++++++++ settings.gradle | 3 +- 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 rxjava-contrib/rxjava-android/build.gradle diff --git a/rxjava-contrib/rxjava-android/build.gradle b/rxjava-contrib/rxjava-android/build.gradle new file mode 100644 index 0000000000..9b96bae71c --- /dev/null +++ b/rxjava-contrib/rxjava-android/build.gradle @@ -0,0 +1,50 @@ +apply plugin: 'java' +apply plugin: 'eclipse' +apply plugin: 'idea' +apply plugin: 'osgi' + +sourceCompatibility = JavaVersion.VERSION_1_6 +targetCompatibility = JavaVersion.VERSION_1_6 + +dependencies { + compile project(':rxjava-core') + provided 'junit:junit-dep:4.10' + provided 'org.mockito:mockito-core:1.8.5' + provided 'com.google.android:android:4.0.1.2' +} + +eclipse { + classpath { + // include 'provided' dependencies on the classpath + plusConfigurations += configurations.provided + + downloadSources = true + downloadJavadoc = true + } +} + +idea { + module { + // include 'provided' dependencies on the classpath + scopes.PROVIDED.plus += configurations.provided + } +} + +javadoc { + options { + doclet = "org.benjchristensen.doclet.DocletExclude" + docletpath = [rootProject.file('./gradle/doclet-exclude.jar')] + stylesheetFile = rootProject.file('./gradle/javadocStyleSheet.css') + windowTitle = "RxJava Javadoc ${project.version}" + } + options.addStringOption('top').value = '

RxJava

' +} + +jar { + manifest { + name = 'rxjava-android' + instruction 'Bundle-Vendor', 'Netflix' + instruction 'Bundle-DocURL', 'https://github.com/Netflix/RxJava' + instruction 'Import-Package', '!org.junit,!junit.framework,!org.mockito.*,*' + } +} diff --git a/settings.gradle b/settings.gradle index f07f904404..5d33717f7a 100644 --- a/settings.gradle +++ b/settings.gradle @@ -4,4 +4,5 @@ include 'rxjava-core', \ 'language-adaptors:rxjava-jruby', \ 'language-adaptors:rxjava-clojure', \ 'language-adaptors:rxjava-scala', \ -'rxjava-contrib:rxjava-swing' +'rxjava-contrib:rxjava-swing', \ +'rxjava-contrib:rxjava-android' From f5e3b5b3614bf8f6a28be4e42dea02ca1cdf639a Mon Sep 17 00:00:00 2001 From: Matthias Kaeppler Date: Wed, 14 Aug 2013 10:38:10 +0200 Subject: [PATCH 02/10] Add HandlerThreadScheduler which schedules actions on an Android Handler thread --- .../concurrency/HandlerThreadScheduler.java | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 rxjava-contrib/rxjava-android/src/main/java/rx/concurrency/HandlerThreadScheduler.java diff --git a/rxjava-contrib/rxjava-android/src/main/java/rx/concurrency/HandlerThreadScheduler.java b/rxjava-contrib/rxjava-android/src/main/java/rx/concurrency/HandlerThreadScheduler.java new file mode 100644 index 0000000000..067bd48e07 --- /dev/null +++ b/rxjava-contrib/rxjava-android/src/main/java/rx/concurrency/HandlerThreadScheduler.java @@ -0,0 +1,54 @@ +package rx.concurrency; + +import android.os.Handler; +import rx.Scheduler; +import rx.Subscription; +import rx.operators.AtomicObservableSubscription; +import rx.util.functions.Func2; + +import java.util.concurrent.TimeUnit; + +/** + * Schedules actions to run on an Android Handler thread. + */ +public class HandlerThreadScheduler extends Scheduler { + + private final Handler handler; + + public HandlerThreadScheduler(Handler handler) { + this.handler = handler; + } + + @Override + public Subscription schedule(final T state, final Func2 action) { + final AtomicObservableSubscription subscription = new AtomicObservableSubscription(); + final Scheduler _scheduler = this; + + handler.post(new Runnable() { + @Override + public void run() { + subscription.wrap(action.call(_scheduler, state)); + } + }); + return subscription; + } + + @Override + public Subscription schedule(final T state, final Func2 action, long delayTime, TimeUnit unit) { + if (delayTime == 0) { + return schedule(state, action); + } else { + final AtomicObservableSubscription subscription = new AtomicObservableSubscription(); + final Scheduler _scheduler = this; + handler.postDelayed(new Runnable() { + @Override + public void run() { + subscription.wrap(action.call(_scheduler, state)); + } + }, unit.toMillis(delayTime)); + return subscription; + } + } +} + + From 3919547f1e5f7940974e383f4f573e48cac7e09b Mon Sep 17 00:00:00 2001 From: Matthias Kaeppler Date: Wed, 14 Aug 2013 10:38:26 +0200 Subject: [PATCH 03/10] Expose main thread scheduler through AndroidSchedulers class --- .../rx/concurrency/AndroidSchedulers.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 rxjava-contrib/rxjava-android/src/main/java/rx/concurrency/AndroidSchedulers.java diff --git a/rxjava-contrib/rxjava-android/src/main/java/rx/concurrency/AndroidSchedulers.java b/rxjava-contrib/rxjava-android/src/main/java/rx/concurrency/AndroidSchedulers.java new file mode 100644 index 0000000000..a2ee157dfa --- /dev/null +++ b/rxjava-contrib/rxjava-android/src/main/java/rx/concurrency/AndroidSchedulers.java @@ -0,0 +1,19 @@ +package rx.concurrency; + +import android.os.Handler; +import android.os.Looper; +import rx.Scheduler; + +public class AndroidSchedulers { + + private static final Scheduler MAIN_THREAD_SCHEDULER = + new HandlerThreadScheduler(new Handler(Looper.getMainLooper())); + + public static Scheduler handlerThread(final Handler handler) { + return new HandlerThreadScheduler(handler); + } + + public static Scheduler mainThread() { + return MAIN_THREAD_SCHEDULER; + } +} From d34372ab43beb59ba9137996954b18a671d946ed Mon Sep 17 00:00:00 2001 From: Matthias Kaeppler Date: Wed, 14 Aug 2013 11:28:19 +0200 Subject: [PATCH 04/10] Add support for running Robolectric tests --- rxjava-contrib/rxjava-android/build.gradle | 1 + .../rx/android/testsupport/AndroidTestRunner.java | 14 ++++++++++++++ .../src/main/java/rx/android/testsupport/R.java | 5 +++++ .../src/test/resources/AndroidManifest.xml | 6 ++++++ 4 files changed, 26 insertions(+) create mode 100644 rxjava-contrib/rxjava-android/src/main/java/rx/android/testsupport/AndroidTestRunner.java create mode 100644 rxjava-contrib/rxjava-android/src/main/java/rx/android/testsupport/R.java create mode 100644 rxjava-contrib/rxjava-android/src/test/resources/AndroidManifest.xml diff --git a/rxjava-contrib/rxjava-android/build.gradle b/rxjava-contrib/rxjava-android/build.gradle index 9b96bae71c..96c423d4ca 100644 --- a/rxjava-contrib/rxjava-android/build.gradle +++ b/rxjava-contrib/rxjava-android/build.gradle @@ -10,6 +10,7 @@ dependencies { compile project(':rxjava-core') provided 'junit:junit-dep:4.10' provided 'org.mockito:mockito-core:1.8.5' + provided 'com.pivotallabs:robolectric:1.2' provided 'com.google.android:android:4.0.1.2' } diff --git a/rxjava-contrib/rxjava-android/src/main/java/rx/android/testsupport/AndroidTestRunner.java b/rxjava-contrib/rxjava-android/src/main/java/rx/android/testsupport/AndroidTestRunner.java new file mode 100644 index 0000000000..f44dede55c --- /dev/null +++ b/rxjava-contrib/rxjava-android/src/main/java/rx/android/testsupport/AndroidTestRunner.java @@ -0,0 +1,14 @@ +package rx.android.testsupport; + +import com.xtremelabs.robolectric.RobolectricConfig; +import com.xtremelabs.robolectric.RobolectricTestRunner; +import org.junit.runners.model.InitializationError; + +import java.io.File; + +public class AndroidTestRunner extends RobolectricTestRunner { + + public AndroidTestRunner(Class testClass) throws InitializationError { + super(testClass, new RobolectricConfig(new File("src/test/resources"))); + } +} diff --git a/rxjava-contrib/rxjava-android/src/main/java/rx/android/testsupport/R.java b/rxjava-contrib/rxjava-android/src/main/java/rx/android/testsupport/R.java new file mode 100644 index 0000000000..17ada879ce --- /dev/null +++ b/rxjava-contrib/rxjava-android/src/main/java/rx/android/testsupport/R.java @@ -0,0 +1,5 @@ +package rx.android.testsupport; + +public class R { + // resource stub for Robolectric +} diff --git a/rxjava-contrib/rxjava-android/src/test/resources/AndroidManifest.xml b/rxjava-contrib/rxjava-android/src/test/resources/AndroidManifest.xml new file mode 100644 index 0000000000..8ddf45aeee --- /dev/null +++ b/rxjava-contrib/rxjava-android/src/test/resources/AndroidManifest.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file From 0959aa599fa3089efb508b85ebd51bf634c5c02c Mon Sep 17 00:00:00 2001 From: Matthias Kaeppler Date: Wed, 14 Aug 2013 11:44:56 +0200 Subject: [PATCH 05/10] Add unit tests for HandlerThreadScheduler --- .../concurrency/HandlerThreadScheduler.java | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/rxjava-contrib/rxjava-android/src/main/java/rx/concurrency/HandlerThreadScheduler.java b/rxjava-contrib/rxjava-android/src/main/java/rx/concurrency/HandlerThreadScheduler.java index 067bd48e07..e077999647 100644 --- a/rxjava-contrib/rxjava-android/src/main/java/rx/concurrency/HandlerThreadScheduler.java +++ b/rxjava-contrib/rxjava-android/src/main/java/rx/concurrency/HandlerThreadScheduler.java @@ -1,13 +1,24 @@ package rx.concurrency; import android.os.Handler; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; import rx.Scheduler; import rx.Subscription; +import rx.android.testsupport.AndroidTestRunner; import rx.operators.AtomicObservableSubscription; import rx.util.functions.Func2; import java.util.concurrent.TimeUnit; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyLong; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; + /** * Schedules actions to run on an Android Handler thread. */ @@ -49,6 +60,61 @@ public void run() { return subscription; } } + + @RunWith(AndroidTestRunner.class) + public static final class UnitTest { + + @Test + public void shouldScheduleActionOnHandlerThread() { + final Handler handler = mock(Handler.class); + final Object state = new Object(); + final Func2 action = mock(Func2.class); + + Scheduler scheduler = new HandlerThreadScheduler(handler); + scheduler.schedule(state, action); + + // verify that we post to the given Handler + ArgumentCaptor runnable = ArgumentCaptor.forClass(Runnable.class); + verify(handler).post(runnable.capture()); + + // verify that the given handler delegates to our action + runnable.getValue().run(); + verify(action).call(scheduler, state); + } + + @Test + public void shouldScheduleDelayedActionOnHandlerThread() { + final Handler handler = mock(Handler.class); + final Object state = new Object(); + final Func2 action = mock(Func2.class); + + Scheduler scheduler = new HandlerThreadScheduler(handler); + scheduler.schedule(state, action, 1L, TimeUnit.SECONDS); + + // verify that we post to the given Handler + ArgumentCaptor runnable = ArgumentCaptor.forClass(Runnable.class); + verify(handler).postDelayed(runnable.capture(), eq(1000L)); + + // verify that the given handler delegates to our action + runnable.getValue().run(); + verify(action).call(scheduler, state); + } + + @Test + public void scheduleDelayedActionShouldForwardToNormalPostIfDelayIsZero() { + final Handler handler = mock(Handler.class); + final Object state = new Object(); + final Func2 action = mock(Func2.class); + + Scheduler scheduler = new HandlerThreadScheduler(handler); + scheduler.schedule(state, action, 0L, TimeUnit.SECONDS); + + // verify that we post to the given Handler + verify(handler).post(any(Runnable.class)); + verify(handler, never()).postDelayed(any(Runnable.class), anyLong()); + } + + } } From 35cf457bf5c487afb2d380be17956b3084a1e558 Mon Sep 17 00:00:00 2001 From: Matthias Kaeppler Date: Wed, 14 Aug 2013 12:01:09 +0200 Subject: [PATCH 06/10] Reduce duplication by making "schedule now" the special case Forwards to "schedule later" with delay of 0 now. --- .../concurrency/HandlerThreadScheduler.java | 49 ++++--------------- 1 file changed, 9 insertions(+), 40 deletions(-) diff --git a/rxjava-contrib/rxjava-android/src/main/java/rx/concurrency/HandlerThreadScheduler.java b/rxjava-contrib/rxjava-android/src/main/java/rx/concurrency/HandlerThreadScheduler.java index e077999647..bcf2d5066e 100644 --- a/rxjava-contrib/rxjava-android/src/main/java/rx/concurrency/HandlerThreadScheduler.java +++ b/rxjava-contrib/rxjava-android/src/main/java/rx/concurrency/HandlerThreadScheduler.java @@ -12,11 +12,8 @@ import java.util.concurrent.TimeUnit; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyLong; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; /** @@ -32,40 +29,27 @@ public HandlerThreadScheduler(Handler handler) { @Override public Subscription schedule(final T state, final Func2 action) { + return schedule(state, action, 0L, TimeUnit.MILLISECONDS); + } + + @Override + public Subscription schedule(final T state, final Func2 action, long delayTime, TimeUnit unit) { final AtomicObservableSubscription subscription = new AtomicObservableSubscription(); final Scheduler _scheduler = this; - - handler.post(new Runnable() { + handler.postDelayed(new Runnable() { @Override public void run() { subscription.wrap(action.call(_scheduler, state)); } - }); + }, unit.toMillis(delayTime)); return subscription; } - @Override - public Subscription schedule(final T state, final Func2 action, long delayTime, TimeUnit unit) { - if (delayTime == 0) { - return schedule(state, action); - } else { - final AtomicObservableSubscription subscription = new AtomicObservableSubscription(); - final Scheduler _scheduler = this; - handler.postDelayed(new Runnable() { - @Override - public void run() { - subscription.wrap(action.call(_scheduler, state)); - } - }, unit.toMillis(delayTime)); - return subscription; - } - } - @RunWith(AndroidTestRunner.class) public static final class UnitTest { @Test - public void shouldScheduleActionOnHandlerThread() { + public void shouldScheduleImmediateActionOnHandlerThread() { final Handler handler = mock(Handler.class); final Object state = new Object(); final Func2 action = mock(Func2.class); @@ -75,7 +59,7 @@ public void shouldScheduleActionOnHandlerThread() { // verify that we post to the given Handler ArgumentCaptor runnable = ArgumentCaptor.forClass(Runnable.class); - verify(handler).post(runnable.capture()); + verify(handler).postDelayed(runnable.capture(), eq(0L)); // verify that the given handler delegates to our action runnable.getValue().run(); @@ -99,21 +83,6 @@ public void shouldScheduleDelayedActionOnHandlerThread() { runnable.getValue().run(); verify(action).call(scheduler, state); } - - @Test - public void scheduleDelayedActionShouldForwardToNormalPostIfDelayIsZero() { - final Handler handler = mock(Handler.class); - final Object state = new Object(); - final Func2 action = mock(Func2.class); - - Scheduler scheduler = new HandlerThreadScheduler(handler); - scheduler.schedule(state, action, 0L, TimeUnit.SECONDS); - - // verify that we post to the given Handler - verify(handler).post(any(Runnable.class)); - verify(handler, never()).postDelayed(any(Runnable.class), anyLong()); - } - } } From 7d397a720b946b96e057a196d2f037d5274ed4b5 Mon Sep 17 00:00:00 2001 From: Matthias Kaeppler Date: Wed, 14 Aug 2013 13:06:02 +0200 Subject: [PATCH 07/10] Add empty .gitignore file so that git checks out the values folder --- .../rxjava-android/src/test/resources/res/values/.gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 rxjava-contrib/rxjava-android/src/test/resources/res/values/.gitignore diff --git a/rxjava-contrib/rxjava-android/src/test/resources/res/values/.gitignore b/rxjava-contrib/rxjava-android/src/test/resources/res/values/.gitignore new file mode 100644 index 0000000000..c98b8d2267 --- /dev/null +++ b/rxjava-contrib/rxjava-android/src/test/resources/res/values/.gitignore @@ -0,0 +1 @@ +# dummy so that git checks out this directory From b80de9378807f9b8128ae63c2aeba7d326eb045b Mon Sep 17 00:00:00 2001 From: Mustafa Sezgin Date: Sat, 17 Aug 2013 19:13:35 +0200 Subject: [PATCH 08/10] Moved sources under main android package. Excluded the test support package from being included when building a jar or generating javadoc Javadoc comments added --- rxjava-contrib/rxjava-android/build.gradle | 9 +++-- .../concurrency/AndroidSchedulers.java | 36 +++++++++++++++++++ .../concurrency/HandlerThreadScheduler.java | 24 ++++++++++++- .../rx/concurrency/AndroidSchedulers.java | 19 ---------- 4 files changed, 66 insertions(+), 22 deletions(-) create mode 100644 rxjava-contrib/rxjava-android/src/main/java/rx/android/concurrency/AndroidSchedulers.java rename rxjava-contrib/rxjava-android/src/main/java/rx/{ => android}/concurrency/HandlerThreadScheduler.java (76%) delete mode 100644 rxjava-contrib/rxjava-android/src/main/java/rx/concurrency/AndroidSchedulers.java diff --git a/rxjava-contrib/rxjava-android/build.gradle b/rxjava-contrib/rxjava-android/build.gradle index 96c423d4ca..84823b1251 100644 --- a/rxjava-contrib/rxjava-android/build.gradle +++ b/rxjava-contrib/rxjava-android/build.gradle @@ -32,16 +32,21 @@ idea { } javadoc { + exclude "rx/android/testsupport" + //Excluding the test support directory causes an error when generating docs + failOnError false; options { doclet = "org.benjchristensen.doclet.DocletExclude" docletpath = [rootProject.file('./gradle/doclet-exclude.jar')] stylesheetFile = rootProject.file('./gradle/javadocStyleSheet.css') - windowTitle = "RxJava Javadoc ${project.version}" + windowTitle = "RxJava Android Javadoc ${project.version}" } - options.addStringOption('top').value = '

RxJava

' + options.addStringOption('top').value = '

RxJava Android

' } jar { + exclude "rx/android/testsupport" + manifest { name = 'rxjava-android' instruction 'Bundle-Vendor', 'Netflix' diff --git a/rxjava-contrib/rxjava-android/src/main/java/rx/android/concurrency/AndroidSchedulers.java b/rxjava-contrib/rxjava-android/src/main/java/rx/android/concurrency/AndroidSchedulers.java new file mode 100644 index 0000000000..36a8154d16 --- /dev/null +++ b/rxjava-contrib/rxjava-android/src/main/java/rx/android/concurrency/AndroidSchedulers.java @@ -0,0 +1,36 @@ +package rx.android.concurrency; + +import android.os.Handler; +import android.os.Looper; +import rx.Scheduler; + +/** + * Schedulers that have Android specific functionality + */ +public class AndroidSchedulers { + + private static final Scheduler MAIN_THREAD_SCHEDULER = + new HandlerThreadScheduler(new Handler(Looper.getMainLooper())); + + private AndroidSchedulers(){ + + } + + /** + * {@link Scheduler} which uses the provided {@link Handler} to execute an action + * @param handler The handler that will be used when executing the action + * @return A handler based scheduler + */ + public static Scheduler handlerThread(final Handler handler) { + return new HandlerThreadScheduler(handler); + } + + /** + * {@link Scheduler} which will execute an action on the main Android UI thread. + * + * @return A Main {@link Looper} based scheduler + */ + public static Scheduler mainThread() { + return MAIN_THREAD_SCHEDULER; + } +} diff --git a/rxjava-contrib/rxjava-android/src/main/java/rx/concurrency/HandlerThreadScheduler.java b/rxjava-contrib/rxjava-android/src/main/java/rx/android/concurrency/HandlerThreadScheduler.java similarity index 76% rename from rxjava-contrib/rxjava-android/src/main/java/rx/concurrency/HandlerThreadScheduler.java rename to rxjava-contrib/rxjava-android/src/main/java/rx/android/concurrency/HandlerThreadScheduler.java index bcf2d5066e..1aba77186f 100644 --- a/rxjava-contrib/rxjava-android/src/main/java/rx/concurrency/HandlerThreadScheduler.java +++ b/rxjava-contrib/rxjava-android/src/main/java/rx/android/concurrency/HandlerThreadScheduler.java @@ -1,4 +1,4 @@ -package rx.concurrency; +package rx.android.concurrency; import android.os.Handler; import org.junit.Test; @@ -23,15 +23,37 @@ public class HandlerThreadScheduler extends Scheduler { private final Handler handler; + /** + * Constructs a {@link HandlerThreadScheduler} using the given {@link Handler} + * @param handler {@link Handler} to use when scheduling actions + */ public HandlerThreadScheduler(Handler handler) { this.handler = handler; } + /** + * Calls {@link HandlerThreadScheduler#schedule(Object, rx.util.functions.Func2, long, java.util.concurrent.TimeUnit)} + * with a delay of zero milliseconds. + * + * See {@link #schedule(Object, rx.util.functions.Func2, long, java.util.concurrent.TimeUnit)} + */ @Override public Subscription schedule(final T state, final Func2 action) { return schedule(state, action, 0L, TimeUnit.MILLISECONDS); } + /** + * Calls {@link Handler#postDelayed(Runnable, long)} with a runnable that executes the given action. + * @param state + * State to pass into the action. + * @param action + * Action to schedule. + * @param delayTime + * Time the action is to be delayed before executing. + * @param unit + * Time unit of the delay time. + * @return A Subscription from which one can unsubscribe from. + */ @Override public Subscription schedule(final T state, final Func2 action, long delayTime, TimeUnit unit) { final AtomicObservableSubscription subscription = new AtomicObservableSubscription(); diff --git a/rxjava-contrib/rxjava-android/src/main/java/rx/concurrency/AndroidSchedulers.java b/rxjava-contrib/rxjava-android/src/main/java/rx/concurrency/AndroidSchedulers.java deleted file mode 100644 index a2ee157dfa..0000000000 --- a/rxjava-contrib/rxjava-android/src/main/java/rx/concurrency/AndroidSchedulers.java +++ /dev/null @@ -1,19 +0,0 @@ -package rx.concurrency; - -import android.os.Handler; -import android.os.Looper; -import rx.Scheduler; - -public class AndroidSchedulers { - - private static final Scheduler MAIN_THREAD_SCHEDULER = - new HandlerThreadScheduler(new Handler(Looper.getMainLooper())); - - public static Scheduler handlerThread(final Handler handler) { - return new HandlerThreadScheduler(handler); - } - - public static Scheduler mainThread() { - return MAIN_THREAD_SCHEDULER; - } -} From 60fa75493c6fcecc323a2d58aed67455e4ef630e Mon Sep 17 00:00:00 2001 From: Mustafa Sezgin Date: Sat, 17 Aug 2013 20:01:25 +0200 Subject: [PATCH 09/10] Removed the exclude from the javadoc task as it was breaking javadoc generation from the projects root folder --- rxjava-contrib/rxjava-android/build.gradle | 11 ++++++++--- .../{main => test}/java/rx/android/testsupport/R.java | 0 2 files changed, 8 insertions(+), 3 deletions(-) rename rxjava-contrib/rxjava-android/src/{main => test}/java/rx/android/testsupport/R.java (100%) diff --git a/rxjava-contrib/rxjava-android/build.gradle b/rxjava-contrib/rxjava-android/build.gradle index 84823b1251..434369e965 100644 --- a/rxjava-contrib/rxjava-android/build.gradle +++ b/rxjava-contrib/rxjava-android/build.gradle @@ -32,9 +32,6 @@ idea { } javadoc { - exclude "rx/android/testsupport" - //Excluding the test support directory causes an error when generating docs - failOnError false; options { doclet = "org.benjchristensen.doclet.DocletExclude" docletpath = [rootProject.file('./gradle/doclet-exclude.jar')] @@ -54,3 +51,11 @@ jar { instruction 'Import-Package', '!org.junit,!junit.framework,!org.mockito.*,*' } } + +test { + testLogging { + exceptionFormat "full" + events "started" + displayGranularity 2 + } +} diff --git a/rxjava-contrib/rxjava-android/src/main/java/rx/android/testsupport/R.java b/rxjava-contrib/rxjava-android/src/test/java/rx/android/testsupport/R.java similarity index 100% rename from rxjava-contrib/rxjava-android/src/main/java/rx/android/testsupport/R.java rename to rxjava-contrib/rxjava-android/src/test/java/rx/android/testsupport/R.java From 6f18d8b1ce52d440ab104bb3f0f97b8b5262f8f7 Mon Sep 17 00:00:00 2001 From: Mustafa Sezgin Date: Sun, 18 Aug 2013 02:26:37 +0200 Subject: [PATCH 10/10] Upgrade to Robolectric 2.0 and remove all the things... --- rxjava-contrib/rxjava-android/build.gradle | 4 +--- .../concurrency/HandlerThreadScheduler.java | 6 ++++-- .../rx/android/testsupport/AndroidTestRunner.java | 14 -------------- .../src/test/java/rx/android/testsupport/R.java | 5 ----- .../src/test/resources/AndroidManifest.xml | 6 ------ .../src/test/resources/res/values/.gitignore | 1 - 6 files changed, 5 insertions(+), 31 deletions(-) delete mode 100644 rxjava-contrib/rxjava-android/src/main/java/rx/android/testsupport/AndroidTestRunner.java delete mode 100644 rxjava-contrib/rxjava-android/src/test/java/rx/android/testsupport/R.java delete mode 100644 rxjava-contrib/rxjava-android/src/test/resources/AndroidManifest.xml delete mode 100644 rxjava-contrib/rxjava-android/src/test/resources/res/values/.gitignore diff --git a/rxjava-contrib/rxjava-android/build.gradle b/rxjava-contrib/rxjava-android/build.gradle index 434369e965..96bbb27267 100644 --- a/rxjava-contrib/rxjava-android/build.gradle +++ b/rxjava-contrib/rxjava-android/build.gradle @@ -10,7 +10,7 @@ dependencies { compile project(':rxjava-core') provided 'junit:junit-dep:4.10' provided 'org.mockito:mockito-core:1.8.5' - provided 'com.pivotallabs:robolectric:1.2' + provided 'org.robolectric:robolectric:2.1.1' provided 'com.google.android:android:4.0.1.2' } @@ -42,8 +42,6 @@ javadoc { } jar { - exclude "rx/android/testsupport" - manifest { name = 'rxjava-android' instruction 'Bundle-Vendor', 'Netflix' diff --git a/rxjava-contrib/rxjava-android/src/main/java/rx/android/concurrency/HandlerThreadScheduler.java b/rxjava-contrib/rxjava-android/src/main/java/rx/android/concurrency/HandlerThreadScheduler.java index 1aba77186f..2a2b165bab 100644 --- a/rxjava-contrib/rxjava-android/src/main/java/rx/android/concurrency/HandlerThreadScheduler.java +++ b/rxjava-contrib/rxjava-android/src/main/java/rx/android/concurrency/HandlerThreadScheduler.java @@ -4,9 +4,10 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.annotation.Config; import rx.Scheduler; import rx.Subscription; -import rx.android.testsupport.AndroidTestRunner; import rx.operators.AtomicObservableSubscription; import rx.util.functions.Func2; @@ -67,7 +68,8 @@ public void run() { return subscription; } - @RunWith(AndroidTestRunner.class) + @RunWith(RobolectricTestRunner.class) + @Config(manifest=Config.NONE) public static final class UnitTest { @Test diff --git a/rxjava-contrib/rxjava-android/src/main/java/rx/android/testsupport/AndroidTestRunner.java b/rxjava-contrib/rxjava-android/src/main/java/rx/android/testsupport/AndroidTestRunner.java deleted file mode 100644 index f44dede55c..0000000000 --- a/rxjava-contrib/rxjava-android/src/main/java/rx/android/testsupport/AndroidTestRunner.java +++ /dev/null @@ -1,14 +0,0 @@ -package rx.android.testsupport; - -import com.xtremelabs.robolectric.RobolectricConfig; -import com.xtremelabs.robolectric.RobolectricTestRunner; -import org.junit.runners.model.InitializationError; - -import java.io.File; - -public class AndroidTestRunner extends RobolectricTestRunner { - - public AndroidTestRunner(Class testClass) throws InitializationError { - super(testClass, new RobolectricConfig(new File("src/test/resources"))); - } -} diff --git a/rxjava-contrib/rxjava-android/src/test/java/rx/android/testsupport/R.java b/rxjava-contrib/rxjava-android/src/test/java/rx/android/testsupport/R.java deleted file mode 100644 index 17ada879ce..0000000000 --- a/rxjava-contrib/rxjava-android/src/test/java/rx/android/testsupport/R.java +++ /dev/null @@ -1,5 +0,0 @@ -package rx.android.testsupport; - -public class R { - // resource stub for Robolectric -} diff --git a/rxjava-contrib/rxjava-android/src/test/resources/AndroidManifest.xml b/rxjava-contrib/rxjava-android/src/test/resources/AndroidManifest.xml deleted file mode 100644 index 8ddf45aeee..0000000000 --- a/rxjava-contrib/rxjava-android/src/test/resources/AndroidManifest.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/rxjava-contrib/rxjava-android/src/test/resources/res/values/.gitignore b/rxjava-contrib/rxjava-android/src/test/resources/res/values/.gitignore deleted file mode 100644 index c98b8d2267..0000000000 --- a/rxjava-contrib/rxjava-android/src/test/resources/res/values/.gitignore +++ /dev/null @@ -1 +0,0 @@ -# dummy so that git checks out this directory