20
20
21
21
import android .app .Activity ;
22
22
import android .widget .EditText ;
23
+ import android .widget .TextView ;
23
24
import org .junit .Test ;
24
25
import org .junit .runner .RunWith ;
25
26
import org .mockito .InOrder ;
29
30
import rx .Observer ;
30
31
import rx .Subscription ;
31
32
import rx .android .observables .ViewObservable ;
33
+ import rx .functions .Func1 ;
32
34
import rx .observers .TestObserver ;
33
35
34
36
@ 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
+ }
36
49
37
50
private static EditText createEditText (final String value ) {
38
51
final Activity activity = Robolectric .buildActivity (Activity .class ).create ().get ();
@@ -48,27 +61,27 @@ private static EditText createEditText(final String value) {
48
61
@ Test
49
62
@ SuppressWarnings ("unchecked" )
50
63
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 ));
55
68
56
69
final InOrder inOrder = inOrder (observer );
57
70
58
- inOrder .verify (observer , never ()).onNext (anyString ( ));
71
+ inOrder .verify (observer , never ()).onNext (any ( TextView . class ));
59
72
60
73
input .setText ("1" );
61
- inOrder .verify (observer , times (1 )).onNext ("1" );
74
+ inOrder .verify (observer , times (1 )).onNext (input );
62
75
63
76
input .setText ("2" );
64
- inOrder .verify (observer , times (1 )).onNext ("2" );
77
+ inOrder .verify (observer , times (1 )).onNext (input );
65
78
66
79
input .setText ("3" );
67
- inOrder .verify (observer , times (1 )).onNext ("3" );
80
+ inOrder .verify (observer , times (1 )).onNext (input );
68
81
69
82
subscription .unsubscribe ();
70
83
input .setText ("4" );
71
- inOrder .verify (observer , never ()).onNext (anyString ( ));
84
+ inOrder .verify (observer , never ()).onNext (any ( TextView . class ));
72
85
73
86
inOrder .verify (observer , never ()).onError (any (Throwable .class ));
74
87
inOrder .verify (observer , never ()).onCompleted ();
@@ -77,27 +90,27 @@ public void testWithoutInitialValue() {
77
90
@ Test
78
91
@ SuppressWarnings ("unchecked" )
79
92
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 ));
84
97
85
98
final InOrder inOrder = inOrder (observer );
86
99
87
- inOrder .verify (observer , times (1 )).onNext ("initial" );
100
+ inOrder .verify (observer , times (1 )).onNext (input );
88
101
89
102
input .setText ("one" );
90
- inOrder .verify (observer , times (1 )).onNext ("one" );
103
+ inOrder .verify (observer , times (1 )).onNext (input );
91
104
92
105
input .setText ("two" );
93
- inOrder .verify (observer , times (1 )).onNext ("two" );
106
+ inOrder .verify (observer , times (1 )).onNext (input );
94
107
95
108
input .setText ("three" );
96
- inOrder .verify (observer , times (1 )).onNext ("three" );
109
+ inOrder .verify (observer , times (1 )).onNext (input );
97
110
98
111
subscription .unsubscribe ();
99
112
input .setText ("four" );
100
- inOrder .verify (observer , never ()).onNext (anyString ( ));
113
+ inOrder .verify (observer , never ()).onNext (any ( TextView . class ));
101
114
102
115
inOrder .verify (observer , never ()).onError (any (Throwable .class ));
103
116
inOrder .verify (observer , never ()).onCompleted ();
@@ -106,40 +119,86 @@ public void testWithInitialValue() {
106
119
@ Test
107
120
@ SuppressWarnings ("unchecked" )
108
121
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 );
111
124
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 );
114
127
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 ));
117
130
118
131
final InOrder inOrder1 = inOrder (observer1 );
119
132
final InOrder inOrder2 = inOrder (observer2 );
120
133
121
134
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 );
124
137
125
138
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 );
128
141
subscription1 .unsubscribe ();
129
142
130
143
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 );
133
146
subscription2 .unsubscribe ();
134
147
135
148
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 ));
138
151
139
152
inOrder1 .verify (observer1 , never ()).onError (any (Throwable .class ));
140
153
inOrder2 .verify (observer2 , never ()).onError (any (Throwable .class ));
141
154
142
155
inOrder1 .verify (observer1 , never ()).onCompleted ();
143
156
inOrder2 .verify (observer2 , never ()).onCompleted ();
144
157
}
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
+
145
204
}
0 commit comments