2020
2121import android .app .Activity ;
2222import android .widget .EditText ;
23+ import android .widget .TextView ;
2324import org .junit .Test ;
2425import org .junit .runner .RunWith ;
2526import org .mockito .InOrder ;
2930import rx .Observer ;
3031import rx .Subscription ;
3132import rx .android .observables .ViewObservable ;
33+ import rx .functions .Func1 ;
3234import rx .observers .TestObserver ;
3335
3436@ RunWith (RobolectricTestRunner .class )
35- public class OperatorEditTextInputTest {
37+ public class OperatorTextViewInputTest {
38+
39+ private static TextView createTextView (final String value ) {
40+ final Activity activity = Robolectric .buildActivity (Activity .class ).create ().get ();
41+ final TextView text = new TextView (activity );
42+
43+ if (value != null ) {
44+ text .setText (value );
45+ }
46+
47+ return text ;
48+ }
3649
3750 private static EditText createEditText (final String value ) {
3851 final Activity activity = Robolectric .buildActivity (Activity .class ).create ().get ();
@@ -48,27 +61,27 @@ private static EditText createEditText(final String value) {
4861 @ Test
4962 @ SuppressWarnings ("unchecked" )
5063 public void testWithoutInitialValue () {
51- final EditText input = createEditText ("initial" );
52- final Observable <String > observable = ViewObservable .input (input , false );
53- final Observer <String > observer = mock (Observer .class );
54- final Subscription subscription = observable .subscribe (new TestObserver <String >(observer ));
64+ final TextView input = createTextView ("initial" );
65+ final Observable <TextView > observable = ViewObservable .input (input , false );
66+ final Observer <TextView > observer = mock (Observer .class );
67+ final Subscription subscription = observable .subscribe (new TestObserver <TextView >(observer ));
5568
5669 final InOrder inOrder = inOrder (observer );
5770
58- inOrder .verify (observer , never ()).onNext (anyString ( ));
71+ inOrder .verify (observer , never ()).onNext (any ( TextView . class ));
5972
6073 input .setText ("1" );
61- inOrder .verify (observer , times (1 )).onNext ("1" );
74+ inOrder .verify (observer , times (1 )).onNext (input );
6275
6376 input .setText ("2" );
64- inOrder .verify (observer , times (1 )).onNext ("2" );
77+ inOrder .verify (observer , times (1 )).onNext (input );
6578
6679 input .setText ("3" );
67- inOrder .verify (observer , times (1 )).onNext ("3" );
80+ inOrder .verify (observer , times (1 )).onNext (input );
6881
6982 subscription .unsubscribe ();
7083 input .setText ("4" );
71- inOrder .verify (observer , never ()).onNext (anyString ( ));
84+ inOrder .verify (observer , never ()).onNext (any ( TextView . class ));
7285
7386 inOrder .verify (observer , never ()).onError (any (Throwable .class ));
7487 inOrder .verify (observer , never ()).onCompleted ();
@@ -77,27 +90,27 @@ public void testWithoutInitialValue() {
7790 @ Test
7891 @ SuppressWarnings ("unchecked" )
7992 public void testWithInitialValue () {
80- final EditText input = createEditText ("initial" );
81- final Observable <String > observable = ViewObservable .input (input , true );
82- final Observer <String > observer = mock (Observer .class );
83- final Subscription subscription = observable .subscribe (new TestObserver <String >(observer ));
93+ final TextView input = createTextView ("initial" );
94+ final Observable <TextView > observable = ViewObservable .input (input , true );
95+ final Observer <TextView > observer = mock (Observer .class );
96+ final Subscription subscription = observable .subscribe (new TestObserver <TextView >(observer ));
8497
8598 final InOrder inOrder = inOrder (observer );
8699
87- inOrder .verify (observer , times (1 )).onNext ("initial" );
100+ inOrder .verify (observer , times (1 )).onNext (input );
88101
89102 input .setText ("one" );
90- inOrder .verify (observer , times (1 )).onNext ("one" );
103+ inOrder .verify (observer , times (1 )).onNext (input );
91104
92105 input .setText ("two" );
93- inOrder .verify (observer , times (1 )).onNext ("two" );
106+ inOrder .verify (observer , times (1 )).onNext (input );
94107
95108 input .setText ("three" );
96- inOrder .verify (observer , times (1 )).onNext ("three" );
109+ inOrder .verify (observer , times (1 )).onNext (input );
97110
98111 subscription .unsubscribe ();
99112 input .setText ("four" );
100- inOrder .verify (observer , never ()).onNext (anyString ( ));
113+ inOrder .verify (observer , never ()).onNext (any ( TextView . class ));
101114
102115 inOrder .verify (observer , never ()).onError (any (Throwable .class ));
103116 inOrder .verify (observer , never ()).onCompleted ();
@@ -106,40 +119,86 @@ public void testWithInitialValue() {
106119 @ Test
107120 @ SuppressWarnings ("unchecked" )
108121 public void testMultipleSubscriptions () {
109- final EditText input = createEditText ("initial" );
110- final Observable <String > observable = ViewObservable .input (input , false );
122+ final TextView input = createTextView ("initial" );
123+ final Observable <TextView > observable = ViewObservable .input (input , false );
111124
112- final Observer <String > observer1 = mock (Observer .class );
113- final Observer <String > observer2 = mock (Observer .class );
125+ final Observer <TextView > observer1 = mock (Observer .class );
126+ final Observer <TextView > observer2 = mock (Observer .class );
114127
115- final Subscription subscription1 = observable .subscribe (new TestObserver <String >(observer1 ));
116- final Subscription subscription2 = observable .subscribe (new TestObserver <String >(observer2 ));
128+ final Subscription subscription1 = observable .subscribe (new TestObserver <TextView >(observer1 ));
129+ final Subscription subscription2 = observable .subscribe (new TestObserver <TextView >(observer2 ));
117130
118131 final InOrder inOrder1 = inOrder (observer1 );
119132 final InOrder inOrder2 = inOrder (observer2 );
120133
121134 input .setText ("1" );
122- inOrder1 .verify (observer1 , times (1 )).onNext ("1" );
123- inOrder2 .verify (observer2 , times (1 )).onNext ("1" );
135+ inOrder1 .verify (observer1 , times (1 )).onNext (input );
136+ inOrder2 .verify (observer2 , times (1 )).onNext (input );
124137
125138 input .setText ("2" );
126- inOrder1 .verify (observer1 , times (1 )).onNext ("2" );
127- inOrder2 .verify (observer2 , times (1 )).onNext ("2" );
139+ inOrder1 .verify (observer1 , times (1 )).onNext (input );
140+ inOrder2 .verify (observer2 , times (1 )).onNext (input );
128141 subscription1 .unsubscribe ();
129142
130143 input .setText ("3" );
131- inOrder1 .verify (observer1 , never ()).onNext (anyString ( ));
132- inOrder2 .verify (observer2 , times (1 )).onNext ("3" );
144+ inOrder1 .verify (observer1 , never ()).onNext (any ( TextView . class ));
145+ inOrder2 .verify (observer2 , times (1 )).onNext (input );
133146 subscription2 .unsubscribe ();
134147
135148 input .setText ("4" );
136- inOrder1 .verify (observer1 , never ()).onNext (anyString ( ));
137- inOrder2 .verify (observer2 , never ()).onNext (anyString ( ));
149+ inOrder1 .verify (observer1 , never ()).onNext (any ( TextView . class ));
150+ inOrder2 .verify (observer2 , never ()).onNext (any ( TextView . class ));
138151
139152 inOrder1 .verify (observer1 , never ()).onError (any (Throwable .class ));
140153 inOrder2 .verify (observer2 , never ()).onError (any (Throwable .class ));
141154
142155 inOrder1 .verify (observer1 , never ()).onCompleted ();
143156 inOrder2 .verify (observer2 , never ()).onCompleted ();
144157 }
158+
159+ @ Test
160+ @ SuppressWarnings ("unchecked" )
161+ public void testTextViewSubclass () {
162+ final EditText input = createEditText ("initial" );
163+ final Observable <EditText > observable = ViewObservable .input (input , false );
164+ final Observer <EditText > observer = mock (Observer .class );
165+ observable .subscribe (new TestObserver <EditText >(observer ));
166+
167+ final InOrder inOrder = inOrder (observer );
168+
169+ inOrder .verify (observer , never ()).onNext (any (EditText .class ));
170+
171+ input .setText ("1" );
172+ inOrder .verify (observer , times (1 )).onNext (input );
173+ }
174+
175+ @ Test
176+ @ SuppressWarnings ("unchecked" )
177+ public void testLegacyStringObservableCompatibility () {
178+ final EditText input = createEditText ("initial" );
179+ final Observable <String > observable = ViewObservable .input (input , false )
180+ .map (new Func1 <EditText , String >() {
181+
182+ @ Override
183+ public String call (EditText view ) {
184+ return view .getText ().toString ();
185+ }
186+ });
187+ final Observer <String > observer = mock (Observer .class );
188+ observable .subscribe (new TestObserver <String >(observer ));
189+
190+ final InOrder inOrder = inOrder (observer );
191+
192+ inOrder .verify (observer , never ()).onNext (anyString ());
193+
194+ input .setText ("1" );
195+ inOrder .verify (observer , times (1 )).onNext ("1" );
196+
197+ input .setText ("2" );
198+ inOrder .verify (observer , times (1 )).onNext ("2" );
199+
200+ input .setText ("3" );
201+ inOrder .verify (observer , times (1 )).onNext ("3" );
202+ }
203+
145204}
0 commit comments