diff --git a/language-adaptors/rxjava-clojure/build.gradle b/language-adaptors/rxjava-clojure/build.gradle index 7332fb350e..bfbcf395b6 100644 --- a/language-adaptors/rxjava-clojure/build.gradle +++ b/language-adaptors/rxjava-clojure/build.gradle @@ -7,11 +7,11 @@ dependencies { // clojure compile 'org.clojure:clojure:1.4.+' - // this should be 'compile' for the 'examples' module ... can't figure that out right now so making 'provided' - provided 'clj-http:clj-http:0.6.4' // https://clojars.org/clj-http + // this should be 'compile' for the 'examples' module + testCompile 'clj-http:clj-http:0.6.4' // https://clojars.org/clj-http } -tasks.compileExamplesClojure.classpath = files(tasks.compileClojure.destinationDir) + tasks.compileClojure.classpath +tasks.compileExamplesClojure.classpath = files(tasks.compileClojure.destinationDir) + tasks.compileClojure.classpath + configurations.testCompile /* * Clojure @@ -29,7 +29,7 @@ repositories { } /* - * Add Counterclockwise and include 'provided' dependencies + * Add Counterclockwise and include 'testCompile' dependencies */ eclipse { project { @@ -38,7 +38,7 @@ eclipse { } tasks.clojureTest { - classpath = classpath + configurations.provided + classpath = classpath + configurations.testCompile } jar { diff --git a/language-adaptors/rxjava-groovy/build.gradle b/language-adaptors/rxjava-groovy/build.gradle index c26a383a34..62388bb60a 100644 --- a/language-adaptors/rxjava-groovy/build.gradle +++ b/language-adaptors/rxjava-groovy/build.gradle @@ -4,8 +4,8 @@ apply plugin: 'osgi' dependencies { compile project(':rxjava-core') compile 'org.codehaus.groovy:groovy-all:2.+' - provided 'junit:junit-dep:4.10' - provided 'org.mockito:mockito-core:1.8.5' + testCompile 'junit:junit-dep:4.10' + testCompile 'org.mockito:mockito-core:1.8.5' } jar { @@ -16,4 +16,4 @@ jar { instruction 'Import-Package', '!org.junit,!junit.framework,!org.mockito.*,*' instruction 'Fragment-Host', 'com.netflix.rxjava.core' } -} \ No newline at end of file +} diff --git a/language-adaptors/rxjava-jruby/build.gradle b/language-adaptors/rxjava-jruby/build.gradle index 0369d6e36e..383194c758 100644 --- a/language-adaptors/rxjava-jruby/build.gradle +++ b/language-adaptors/rxjava-jruby/build.gradle @@ -22,8 +22,8 @@ sourceSets { dependencies { compile project(':rxjava-core') compile 'org.jruby:jruby:1.7+' - provided 'junit:junit-dep:4.10' - provided 'org.mockito:mockito-core:1.8.5' + testCompile 'junit:junit-dep:4.10' + testCompile 'org.mockito:mockito-core:1.8.5' rspec 'org.jruby:jruby-complete:1.7.4' rspec 'org.rubygems:rspec:2.14.1' } diff --git a/language-adaptors/rxjava-kotlin/build.gradle b/language-adaptors/rxjava-kotlin/build.gradle index 06f4a4f46f..e64b9e3801 100644 --- a/language-adaptors/rxjava-kotlin/build.gradle +++ b/language-adaptors/rxjava-kotlin/build.gradle @@ -14,8 +14,8 @@ apply plugin: 'osgi' dependencies { compile project(':rxjava-core') compile 'org.jetbrains.kotlin:kotlin-stdlib:0.8.11' - provided 'junit:junit-dep:4.10' - provided 'org.mockito:mockito-core:1.8.5' + testCompile 'junit:junit-dep:4.10' + testCompile 'org.mockito:mockito-core:1.8.5' } jar { @@ -26,4 +26,4 @@ jar { instruction 'Import-Package', '!org.junit,!junit.framework,!org.mockito.*,*' instruction 'Fragment-Host', 'com.netflix.rxjava.core' } -} \ No newline at end of file +} diff --git a/language-adaptors/rxjava-scala/build.gradle b/language-adaptors/rxjava-scala/build.gradle index 8083feaf37..7c4b9f72f4 100644 --- a/language-adaptors/rxjava-scala/build.gradle +++ b/language-adaptors/rxjava-scala/build.gradle @@ -45,17 +45,17 @@ dependencies { compile project(':rxjava-core') - provided 'junit:junit-dep:4.10' - provided 'org.mockito:mockito-core:1.8.5' - provided 'org.scalatest:scalatest_2.10:1.9.1' + testCompile 'junit:junit-dep:4.10' + testCompile 'org.mockito:mockito-core:1.8.5' + testCompile 'org.scalatest:scalatest_2.10:1.9.1' } tasks.compileScala { - classpath = classpath + (configurations.compile + configurations.provided) + classpath = classpath + configurations.compile } tasks.compileExamplesScala { - classpath = classpath + files(compileScala.destinationDir) + (configurations.compile + configurations.provided) + classpath = classpath + files(compileScala.destinationDir) + (configurations.compile + configurations.testCompile) } // Add RxJava core to Scaladoc input: @@ -66,7 +66,7 @@ tasks.compileExamplesScala { task test(overwrite: true, dependsOn: testClasses) << { ant.taskdef(name: 'scalatest', classname: 'org.scalatest.tools.ScalaTestAntTask', - classpath: configurations.provided.asPath + ':' + configurations.testRuntime.asPath + ":" + compileScala.destinationDir + classpath: configurations.testCompile.asPath + ':' + configurations.testRuntime.asPath + ":" + compileScala.destinationDir ) ant.scalatest(runpath: sourceSets.test.output.classesDir, haltonfailure: 'true', diff --git a/rxjava-contrib/rxjava-android/build.gradle b/rxjava-contrib/rxjava-android/build.gradle index d3bc3e2e8d..f81a248f96 100644 --- a/rxjava-contrib/rxjava-android/build.gradle +++ b/rxjava-contrib/rxjava-android/build.gradle @@ -6,9 +6,9 @@ dependencies { provided 'com.google.android:support-v4:r7' // testing - provided 'junit:junit-dep:4.10' - provided 'org.mockito:mockito-core:1.8.5' - provided 'org.robolectric:robolectric:2.2' + testCompile 'junit:junit-dep:4.10' + testCompile 'org.mockito:mockito-core:1.8.5' + testCompile 'org.robolectric:robolectric:2.2' } javadoc { diff --git a/rxjava-contrib/rxjava-async-util/build.gradle b/rxjava-contrib/rxjava-async-util/build.gradle index 7acd6a856d..cd2396634d 100644 --- a/rxjava-contrib/rxjava-async-util/build.gradle +++ b/rxjava-contrib/rxjava-async-util/build.gradle @@ -6,8 +6,8 @@ targetCompatibility = JavaVersion.VERSION_1_6 dependencies { compile project(':rxjava-core') testCompile project(":rxjava-core").sourceSets.test.output - provided 'junit:junit-dep:4.10' - provided 'org.mockito:mockito-core:1.8.5' + testCompile 'junit:junit-dep:4.10' + testCompile 'org.mockito:mockito-core:1.8.5' } jar { diff --git a/rxjava-contrib/rxjava-computation-expressions/build.gradle b/rxjava-contrib/rxjava-computation-expressions/build.gradle index 049cf185d4..ae225f0c11 100644 --- a/rxjava-contrib/rxjava-computation-expressions/build.gradle +++ b/rxjava-contrib/rxjava-computation-expressions/build.gradle @@ -6,8 +6,8 @@ targetCompatibility = JavaVersion.VERSION_1_6 dependencies { compile project(':rxjava-core') testCompile project(":rxjava-core").sourceSets.test.output - provided 'junit:junit-dep:4.10' - provided 'org.mockito:mockito-core:1.8.5' + testCompile 'junit:junit-dep:4.10' + testCompile 'org.mockito:mockito-core:1.8.5' } jar { diff --git a/rxjava-contrib/rxjava-debug/build.gradle b/rxjava-contrib/rxjava-debug/build.gradle index 6f8a913177..19195b7074 100644 --- a/rxjava-contrib/rxjava-debug/build.gradle +++ b/rxjava-contrib/rxjava-debug/build.gradle @@ -6,8 +6,8 @@ targetCompatibility = JavaVersion.VERSION_1_6 dependencies { compile project(':rxjava-core') testCompile project(":rxjava-core").sourceSets.test.output - provided 'junit:junit-dep:4.10' - provided 'org.mockito:mockito-core:1.8.5' + testCompile 'junit:junit-dep:4.10' + testCompile 'org.mockito:mockito-core:1.8.5' } javadoc { diff --git a/rxjava-contrib/rxjava-ios/build.gradle b/rxjava-contrib/rxjava-ios/build.gradle index b48ed50413..fd6da85c8e 100644 --- a/rxjava-contrib/rxjava-ios/build.gradle +++ b/rxjava-contrib/rxjava-ios/build.gradle @@ -2,12 +2,12 @@ apply plugin: 'osgi' dependencies { compile project(':rxjava-core') - - // testing - provided 'junit:junit-dep:4.10' compile 'org.robovm:robovm-rt:0.0.12' compile 'org.robovm:robovm-objc:0.0.12' compile 'org.robovm:robovm-cocoatouch:0.0.12' + + // testing + testCompile 'junit:junit-dep:4.10' } javadoc { diff --git a/rxjava-contrib/rxjava-javafx/build.gradle b/rxjava-contrib/rxjava-javafx/build.gradle index 2b08a63150..1f820839a4 100644 --- a/rxjava-contrib/rxjava-javafx/build.gradle +++ b/rxjava-contrib/rxjava-javafx/build.gradle @@ -5,8 +5,8 @@ targetCompatibility = JavaVersion.VERSION_1_6 dependencies { compile project(':rxjava-core') - provided 'junit:junit-dep:4.10' - provided 'org.mockito:mockito-core:1.8.5' + testCompile 'junit:junit-dep:4.10' + testCompile 'org.mockito:mockito-core:1.8.5' } javadoc { diff --git a/rxjava-contrib/rxjava-joins/build.gradle b/rxjava-contrib/rxjava-joins/build.gradle index d27e105d0a..8bb98f6f80 100644 --- a/rxjava-contrib/rxjava-joins/build.gradle +++ b/rxjava-contrib/rxjava-joins/build.gradle @@ -6,8 +6,8 @@ targetCompatibility = JavaVersion.VERSION_1_6 dependencies { compile project(':rxjava-core') testCompile project(":rxjava-core").sourceSets.test.output - provided 'junit:junit-dep:4.10' - provided 'org.mockito:mockito-core:1.8.5' + testCompile 'junit:junit-dep:4.10' + testCompile 'org.mockito:mockito-core:1.8.5' } jar { diff --git a/rxjava-contrib/rxjava-math/build.gradle b/rxjava-contrib/rxjava-math/build.gradle index cbc8cca804..5e7aa72ec2 100644 --- a/rxjava-contrib/rxjava-math/build.gradle +++ b/rxjava-contrib/rxjava-math/build.gradle @@ -6,8 +6,8 @@ targetCompatibility = JavaVersion.VERSION_1_6 dependencies { compile project(':rxjava-core') testCompile project(":rxjava-core").sourceSets.test.output - provided 'junit:junit-dep:4.10' - provided 'org.mockito:mockito-core:1.8.5' + testCompile 'junit:junit-dep:4.10' + testCompile 'org.mockito:mockito-core:1.8.5' } javadoc { diff --git a/rxjava-contrib/rxjava-quasar/build.gradle b/rxjava-contrib/rxjava-quasar/build.gradle index 67e65d91f0..5e4fdd5eec 100644 --- a/rxjava-contrib/rxjava-quasar/build.gradle +++ b/rxjava-contrib/rxjava-quasar/build.gradle @@ -18,8 +18,8 @@ dependencies { compile 'co.paralleluniverse:quasar-core:0.5.0' quasar 'co.paralleluniverse:quasar-core:0.5.0' testCompile project(":rxjava-core").sourceSets.test.output - provided 'junit:junit-dep:4.10' - provided 'org.mockito:mockito-core:1.8.5' + testCompile 'junit:junit-dep:4.10' + testCompile 'org.mockito:mockito-core:1.8.5' } jar { diff --git a/rxjava-contrib/rxjava-scalaz/build.gradle b/rxjava-contrib/rxjava-scalaz/build.gradle index 96a3d59a88..874b64cc12 100644 --- a/rxjava-contrib/rxjava-scalaz/build.gradle +++ b/rxjava-contrib/rxjava-scalaz/build.gradle @@ -35,10 +35,6 @@ dependencies { testCompile 'junit:junit-dep:4.10' } -tasks.compileScala { - classpath = classpath + (configurations.compile + configurations.provided) -} - task repl(type: Exec) { commandLine 'scala', '-cp', sourceSets.test.runtimeClasspath.asPath standardInput = System.in diff --git a/rxjava-contrib/rxjava-string/build.gradle b/rxjava-contrib/rxjava-string/build.gradle index a3423a5173..9ba2b35715 100644 --- a/rxjava-contrib/rxjava-string/build.gradle +++ b/rxjava-contrib/rxjava-string/build.gradle @@ -6,8 +6,8 @@ targetCompatibility = JavaVersion.VERSION_1_6 dependencies { compile project(':rxjava-core') testCompile project(":rxjava-core").sourceSets.test.output - provided 'junit:junit-dep:4.10' - provided 'org.mockito:mockito-core:1.8.5' + testCompile 'junit:junit-dep:4.10' + testCompile 'org.mockito:mockito-core:1.8.5' } javadoc { diff --git a/rxjava-contrib/rxjava-swing/build.gradle b/rxjava-contrib/rxjava-swing/build.gradle index 87c04c3b53..ba92461bc3 100644 --- a/rxjava-contrib/rxjava-swing/build.gradle +++ b/rxjava-contrib/rxjava-swing/build.gradle @@ -5,8 +5,8 @@ targetCompatibility = JavaVersion.VERSION_1_6 dependencies { compile project(':rxjava-core') - provided 'junit:junit-dep:4.10' - provided 'org.mockito:mockito-core:1.8.5' + testCompile 'junit:junit-dep:4.10' + testCompile 'org.mockito:mockito-core:1.8.5' } javadoc { diff --git a/rxjava-contrib/rxjava-swing/src/main/java/rx/swing/sources/AbstractButtonSource.java b/rxjava-contrib/rxjava-swing/src/main/java/rx/swing/sources/AbstractButtonSource.java index b88bace482..5f6b2aabf5 100644 --- a/rxjava-contrib/rxjava-swing/src/main/java/rx/swing/sources/AbstractButtonSource.java +++ b/rxjava-contrib/rxjava-swing/src/main/java/rx/swing/sources/AbstractButtonSource.java @@ -15,25 +15,15 @@ */ package rx.swing.sources; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; - import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.AbstractButton; -import org.junit.Test; -import org.mockito.Matchers; - import rx.Observable; import rx.Observable.OnSubscribe; import rx.Subscriber; -import rx.Subscription; import rx.functions.Action0; -import rx.functions.Action1; import rx.observables.SwingObservable; import rx.subscriptions.SwingSubscriptions; @@ -64,49 +54,4 @@ public void call() { }); } - public static class UnitTest { - @Test - public void testObservingActionEvents() throws Throwable { - SwingTestHelper.create().runInEventDispatchThread(new Action0() { - - @Override - public void call() { - @SuppressWarnings("unchecked") - Action1 action = mock(Action1.class); - @SuppressWarnings("unchecked") - Action1 error = mock(Action1.class); - Action0 complete = mock(Action0.class); - - final ActionEvent event = new ActionEvent(this, 1, "command"); - - @SuppressWarnings("serial") - class TestButton extends AbstractButton { - void testAction() { - fireActionPerformed(event); - } - } - - TestButton button = new TestButton(); - Subscription sub = fromActionOf(button).subscribe(action, error, complete); - - verify(action, never()).call(Matchers. any()); - verify(error, never()).call(Matchers. any()); - verify(complete, never()).call(); - - button.testAction(); - verify(action, times(1)).call(Matchers. any()); - - button.testAction(); - verify(action, times(2)).call(Matchers. any()); - - sub.unsubscribe(); - button.testAction(); - verify(action, times(2)).call(Matchers. any()); - verify(error, never()).call(Matchers. any()); - verify(complete, never()).call(); - } - - }).awaitTerminal(); - } - } } diff --git a/rxjava-contrib/rxjava-swing/src/main/java/rx/swing/sources/KeyEventSource.java b/rxjava-contrib/rxjava-swing/src/main/java/rx/swing/sources/KeyEventSource.java index 0d7b93d293..5a356952b7 100644 --- a/rxjava-contrib/rxjava-swing/src/main/java/rx/swing/sources/KeyEventSource.java +++ b/rxjava-contrib/rxjava-swing/src/main/java/rx/swing/sources/KeyEventSource.java @@ -15,13 +15,6 @@ */ package rx.swing.sources; -import static java.util.Arrays.asList; -import static org.mockito.Mockito.inOrder; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; - import java.awt.Component; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; @@ -29,18 +22,10 @@ import java.util.HashSet; import java.util.Set; -import javax.swing.JPanel; - -import org.junit.Test; -import org.mockito.InOrder; -import org.mockito.Matchers; - import rx.Observable; import rx.Observable.OnSubscribe; import rx.Subscriber; -import rx.Subscription; import rx.functions.Action0; -import rx.functions.Action1; import rx.functions.Func1; import rx.functions.Func2; import rx.observables.SwingObservable; @@ -117,101 +102,4 @@ public Boolean call(KeyEvent event) { return filteredKeyEvents.scan(Collections.emptySet(), new CollectKeys()); } - public static class UnitTest { - private Component comp = new JPanel(); - - @Test - public void testObservingKeyEvents() throws Throwable { - SwingTestHelper.create().runInEventDispatchThread(new Action0(){ - - @Override - public void call() { - @SuppressWarnings("unchecked") - Action1 action = mock(Action1.class); - @SuppressWarnings("unchecked") - Action1 error = mock(Action1.class); - Action0 complete = mock(Action0.class); - - final KeyEvent event = mock(KeyEvent.class); - - Subscription sub = fromKeyEventsOf(comp).subscribe(action, error, complete); - - verify(action, never()).call(Matchers. any()); - verify(error, never()).call(Matchers. any()); - verify(complete, never()).call(); - - fireKeyEvent(event); - verify(action, times(1)).call(Matchers. any()); - - fireKeyEvent(event); - verify(action, times(2)).call(Matchers. any()); - - sub.unsubscribe(); - fireKeyEvent(event); - verify(action, times(2)).call(Matchers. any()); - verify(error, never()).call(Matchers. any()); - verify(complete, never()).call(); - } - - }).awaitTerminal(); - } - - @Test - public void testObservingPressedKeys() throws Throwable { - SwingTestHelper.create().runInEventDispatchThread(new Action0() { - - @Override - public void call() { - @SuppressWarnings("unchecked") - Action1> action = mock(Action1.class); - @SuppressWarnings("unchecked") - Action1 error = mock(Action1.class); - Action0 complete = mock(Action0.class); - - Subscription sub = currentlyPressedKeysOf(comp).subscribe(action, error, complete); - - InOrder inOrder = inOrder(action); - inOrder.verify(action, times(1)).call(Collections. emptySet()); - verify(error, never()).call(Matchers. any()); - verify(complete, never()).call(); - - fireKeyEvent(keyEvent(1, KeyEvent.KEY_PRESSED)); - inOrder.verify(action, times(1)).call(new HashSet(asList(1))); - verify(error, never()).call(Matchers. any()); - verify(complete, never()).call(); - - fireKeyEvent(keyEvent(2, KeyEvent.KEY_PRESSED)); - fireKeyEvent(keyEvent(KeyEvent.VK_UNDEFINED, KeyEvent.KEY_TYPED)); - inOrder.verify(action, times(1)).call(new HashSet(asList(1, 2))); - - fireKeyEvent(keyEvent(2, KeyEvent.KEY_RELEASED)); - inOrder.verify(action, times(1)).call(new HashSet(asList(1))); - - fireKeyEvent(keyEvent(3, KeyEvent.KEY_RELEASED)); - inOrder.verify(action, times(1)).call(new HashSet(asList(1))); - - fireKeyEvent(keyEvent(1, KeyEvent.KEY_RELEASED)); - inOrder.verify(action, times(1)).call(Collections. emptySet()); - - sub.unsubscribe(); - - fireKeyEvent(keyEvent(1, KeyEvent.KEY_PRESSED)); - inOrder.verify(action, never()).call(Matchers.> any()); - verify(error, never()).call(Matchers. any()); - verify(complete, never()).call(); - } - - }).awaitTerminal(); - } - - private KeyEvent keyEvent(int keyCode, int id) { - return new KeyEvent(comp, id, -1L, 0, keyCode, ' '); - } - - private void fireKeyEvent(KeyEvent event) { - for (KeyListener listener: comp.getKeyListeners()) { - listener.keyTyped(event); - } - } - } } diff --git a/rxjava-contrib/rxjava-swing/src/main/java/rx/swing/sources/MouseEventSource.java b/rxjava-contrib/rxjava-swing/src/main/java/rx/swing/sources/MouseEventSource.java index cf4367eeca..2ce5ca81a3 100644 --- a/rxjava-contrib/rxjava-swing/src/main/java/rx/swing/sources/MouseEventSource.java +++ b/rxjava-contrib/rxjava-swing/src/main/java/rx/swing/sources/MouseEventSource.java @@ -15,30 +15,16 @@ */ package rx.swing.sources; -import static org.mockito.Mockito.inOrder; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; - import java.awt.Component; import java.awt.Point; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; -import javax.swing.JPanel; - -import org.junit.Test; -import org.mockito.InOrder; -import org.mockito.Matchers; - import rx.Observable; import rx.Observable.OnSubscribe; import rx.Subscriber; -import rx.Subscription; import rx.functions.Action0; -import rx.functions.Action1; import rx.functions.Func2; import rx.observables.SwingObservable; import rx.subscriptions.SwingSubscriptions; @@ -136,56 +122,4 @@ public Point call(MouseEvent ev1, MouseEvent ev2) { }); } - public static class UnitTest { - private Component comp = new JPanel(); - - @Test - public void testRelativeMouseMotion() throws Throwable { - SwingTestHelper.create().runInEventDispatchThread(new Action0() { - - @Override - public void call() { - @SuppressWarnings("unchecked") - Action1 action = mock(Action1.class); - @SuppressWarnings("unchecked") - Action1 error = mock(Action1.class); - Action0 complete = mock(Action0.class); - - Subscription sub = fromRelativeMouseMotion(comp).subscribe(action, error, complete); - - InOrder inOrder = inOrder(action); - - verify(action, never()).call(Matchers. any()); - verify(error, never()).call(Matchers. any()); - verify(complete, never()).call(); - - fireMouseEvent(mouseEvent(0, 0)); - verify(action, never()).call(Matchers. any()); - - fireMouseEvent(mouseEvent(10, -5)); - inOrder.verify(action, times(1)).call(new Point(10, -5)); - - fireMouseEvent(mouseEvent(6, 10)); - inOrder.verify(action, times(1)).call(new Point(-4, 15)); - - sub.unsubscribe(); - fireMouseEvent(mouseEvent(0, 0)); - inOrder.verify(action, never()).call(Matchers. any()); - verify(error, never()).call(Matchers. any()); - verify(complete, never()).call(); - } - - }).awaitTerminal(); - } - - private MouseEvent mouseEvent(int x, int y) { - return new MouseEvent(comp, MouseEvent.MOUSE_MOVED, 1L, 0, x, y, 0, false); - } - - private void fireMouseEvent(MouseEvent event) { - for (MouseMotionListener listener : comp.getMouseMotionListeners()) { - listener.mouseMoved(event); - } - } - } } diff --git a/rxjava-contrib/rxjava-swing/src/test/java/rx/swing/sources/AbstractButtonSourceTest.java b/rxjava-contrib/rxjava-swing/src/test/java/rx/swing/sources/AbstractButtonSourceTest.java new file mode 100644 index 0000000000..1ebb3615ba --- /dev/null +++ b/rxjava-contrib/rxjava-swing/src/test/java/rx/swing/sources/AbstractButtonSourceTest.java @@ -0,0 +1,79 @@ +/** + * Copyright 2014 Netflix, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package rx.swing.sources; + +import java.awt.event.ActionEvent; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +import org.junit.Test; +import org.mockito.Matchers; + +import javax.swing.AbstractButton; + +import rx.Subscription; +import rx.functions.Action0; +import rx.functions.Action1; + +public class AbstractButtonSourceTest { + @Test + public void testObservingActionEvents() throws Throwable { + SwingTestHelper.create().runInEventDispatchThread(new Action0() { + + @Override + public void call() { + @SuppressWarnings("unchecked") + Action1 action = mock(Action1.class); + @SuppressWarnings("unchecked") + Action1 error = mock(Action1.class); + Action0 complete = mock(Action0.class); + + final ActionEvent event = new ActionEvent(this, 1, "command"); + + @SuppressWarnings("serial") + class TestButton extends AbstractButton { + void testAction() { + fireActionPerformed(event); + } + } + + TestButton button = new TestButton(); + Subscription sub = AbstractButtonSource.fromActionOf(button).subscribe(action, + error, complete); + + verify(action, never()).call(Matchers. any()); + verify(error, never()).call(Matchers. any()); + verify(complete, never()).call(); + + button.testAction(); + verify(action, times(1)).call(Matchers. any()); + + button.testAction(); + verify(action, times(2)).call(Matchers. any()); + + sub.unsubscribe(); + button.testAction(); + verify(action, times(2)).call(Matchers. any()); + verify(error, never()).call(Matchers. any()); + verify(complete, never()).call(); + } + + }).awaitTerminal(); + } +} diff --git a/rxjava-contrib/rxjava-swing/src/test/java/rx/swing/sources/KeyEventSourceTest.java b/rxjava-contrib/rxjava-swing/src/test/java/rx/swing/sources/KeyEventSourceTest.java new file mode 100644 index 0000000000..a00c55a38a --- /dev/null +++ b/rxjava-contrib/rxjava-swing/src/test/java/rx/swing/sources/KeyEventSourceTest.java @@ -0,0 +1,147 @@ +/** + * Copyright 2014 Netflix, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package rx.swing.sources; + +import static java.util.Arrays.asList; +import static org.mockito.Mockito.inOrder; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +import javax.swing.JPanel; + +import java.awt.Component; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + +import org.junit.Test; +import org.mockito.InOrder; +import org.mockito.Matchers; + +import rx.Subscription; +import rx.functions.Action0; +import rx.functions.Action1; + +public class KeyEventSourceTest { + private Component comp = new JPanel(); + + @Test + public void testObservingKeyEvents() throws Throwable { + SwingTestHelper.create().runInEventDispatchThread(new Action0() { + + @Override + public void call() { + @SuppressWarnings("unchecked") + Action1 action = mock(Action1.class); + @SuppressWarnings("unchecked") + Action1 error = mock(Action1.class); + Action0 complete = mock(Action0.class); + + final KeyEvent event = mock(KeyEvent.class); + + Subscription sub = KeyEventSource.fromKeyEventsOf(comp) + .subscribe(action, error, complete); + + verify(action, never()).call(Matchers. any()); + verify(error, never()).call(Matchers. any()); + verify(complete, never()).call(); + + fireKeyEvent(event); + verify(action, times(1)).call(Matchers. any()); + + fireKeyEvent(event); + verify(action, times(2)).call(Matchers. any()); + + sub.unsubscribe(); + fireKeyEvent(event); + verify(action, times(2)).call(Matchers. any()); + verify(error, never()).call(Matchers. any()); + verify(complete, never()).call(); + } + + }).awaitTerminal(); + } + + @Test + public void testObservingPressedKeys() throws Throwable { + SwingTestHelper.create().runInEventDispatchThread(new Action0() { + + @Override + public void call() { + @SuppressWarnings("unchecked") + Action1> action = mock(Action1.class); + @SuppressWarnings("unchecked") + Action1 error = mock(Action1.class); + Action0 complete = mock(Action0.class); + + Subscription sub = KeyEventSource.currentlyPressedKeysOf(comp) + .subscribe(action, error, complete); + + InOrder inOrder = inOrder(action); + inOrder.verify(action, times(1)).call( + Collections. emptySet()); + verify(error, never()).call(Matchers. any()); + verify(complete, never()).call(); + + fireKeyEvent(keyEvent(1, KeyEvent.KEY_PRESSED)); + inOrder.verify(action, times(1)).call( + new HashSet(asList(1))); + verify(error, never()).call(Matchers. any()); + verify(complete, never()).call(); + + fireKeyEvent(keyEvent(2, KeyEvent.KEY_PRESSED)); + fireKeyEvent(keyEvent(KeyEvent.VK_UNDEFINED, KeyEvent.KEY_TYPED)); + inOrder.verify(action, times(1)).call( + new HashSet(asList(1, 2))); + + fireKeyEvent(keyEvent(2, KeyEvent.KEY_RELEASED)); + inOrder.verify(action, times(1)).call( + new HashSet(asList(1))); + + fireKeyEvent(keyEvent(3, KeyEvent.KEY_RELEASED)); + inOrder.verify(action, times(1)).call( + new HashSet(asList(1))); + + fireKeyEvent(keyEvent(1, KeyEvent.KEY_RELEASED)); + inOrder.verify(action, times(1)).call( + Collections. emptySet()); + + sub.unsubscribe(); + + fireKeyEvent(keyEvent(1, KeyEvent.KEY_PRESSED)); + inOrder.verify(action, never()).call( + Matchers.> any()); + verify(error, never()).call(Matchers. any()); + verify(complete, never()).call(); + } + + }).awaitTerminal(); + } + + private KeyEvent keyEvent(int keyCode, int id) { + return new KeyEvent(comp, id, -1L, 0, keyCode, ' '); + } + + private void fireKeyEvent(KeyEvent event) { + for (KeyListener listener : comp.getKeyListeners()) { + listener.keyTyped(event); + } + } +} diff --git a/rxjava-contrib/rxjava-swing/src/test/java/rx/swing/sources/MouseEventSourceTest.java b/rxjava-contrib/rxjava-swing/src/test/java/rx/swing/sources/MouseEventSourceTest.java new file mode 100644 index 0000000000..fc46ff05bd --- /dev/null +++ b/rxjava-contrib/rxjava-swing/src/test/java/rx/swing/sources/MouseEventSourceTest.java @@ -0,0 +1,92 @@ +/** + * Copyright 2014 Netflix, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package rx.swing.sources; + +import static org.mockito.Mockito.inOrder; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +import java.awt.Component; +import java.awt.Point; +import java.awt.event.MouseEvent; +import java.awt.event.MouseMotionListener; + +import javax.swing.JPanel; + +import org.junit.Test; +import org.mockito.InOrder; +import org.mockito.Matchers; + +import rx.Subscription; +import rx.functions.Action0; +import rx.functions.Action1; + +public class MouseEventSourceTest { + private Component comp = new JPanel(); + + @Test + public void testRelativeMouseMotion() throws Throwable { + SwingTestHelper.create().runInEventDispatchThread(new Action0() { + + @Override + public void call() { + @SuppressWarnings("unchecked") + Action1 action = mock(Action1.class); + @SuppressWarnings("unchecked") + Action1 error = mock(Action1.class); + Action0 complete = mock(Action0.class); + + Subscription sub = MouseEventSource.fromRelativeMouseMotion(comp).subscribe( + action, error, complete); + + InOrder inOrder = inOrder(action); + + verify(action, never()).call(Matchers. any()); + verify(error, never()).call(Matchers. any()); + verify(complete, never()).call(); + + fireMouseEvent(mouseEvent(0, 0)); + verify(action, never()).call(Matchers. any()); + + fireMouseEvent(mouseEvent(10, -5)); + inOrder.verify(action, times(1)).call(new Point(10, -5)); + + fireMouseEvent(mouseEvent(6, 10)); + inOrder.verify(action, times(1)).call(new Point(-4, 15)); + + sub.unsubscribe(); + fireMouseEvent(mouseEvent(0, 0)); + inOrder.verify(action, never()).call(Matchers. any()); + verify(error, never()).call(Matchers. any()); + verify(complete, never()).call(); + } + + }).awaitTerminal(); + } + + private MouseEvent mouseEvent(int x, int y) { + return new MouseEvent(comp, MouseEvent.MOUSE_MOVED, 1L, 0, x, y, 0, + false); + } + + private void fireMouseEvent(MouseEvent event) { + for (MouseMotionListener listener : comp.getMouseMotionListeners()) { + listener.mouseMoved(event); + } + } +}