OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 package org.chromium.chromoting; | 5 package org.chromium.chromoting; |
6 | 6 |
| 7 import android.os.Handler; |
| 8 import android.os.Looper; |
7 import android.test.InstrumentationTestCase; | 9 import android.test.InstrumentationTestCase; |
8 import android.test.suitebuilder.annotation.MediumTest; | 10 import android.test.suitebuilder.annotation.MediumTest; |
9 import android.test.suitebuilder.annotation.SmallTest; | 11 import android.test.suitebuilder.annotation.SmallTest; |
10 | 12 |
11 import org.chromium.base.test.util.Feature; | 13 import org.chromium.base.test.util.Feature; |
12 import org.chromium.chromoting.test.util.MutableReference; | 14 import org.chromium.chromoting.test.util.MutableReference; |
13 | 15 |
| 16 import java.util.ArrayList; |
| 17 import java.util.List; |
| 18 |
14 /** | 19 /** |
15 * Tests for {@link Event}. | 20 * Tests for {@link Event}. |
16 */ | 21 */ |
17 public class EventTest extends InstrumentationTestCase { | 22 public class EventTest extends InstrumentationTestCase { |
18 @SmallTest | 23 @SmallTest |
19 @Feature({"Chromoting"}) | 24 @Feature({"Chromoting"}) |
20 public static void testBasicScenario() { | 25 public static void testBasicScenario() { |
21 Event.Raisable<Void> event = new Event.Raisable<>(); | 26 Event.Raisable<Void> event = new Event.Raisable<>(); |
22 final MutableReference<Integer> callTimes = new MutableReference<Integer
>(0); | 27 final MutableReference<Integer> callTimes = new MutableReference<Integer
>(0); |
23 Object eventId1 = event.add(new Event.ParameterRunnable<Void>() { | 28 Object eventId1 = event.add(new Event.ParameterRunnable<Void>() { |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
136 nextReturn.set(false); | 141 nextReturn.set(false); |
137 assertEquals(event.raise(null), 1); | 142 assertEquals(event.raise(null), 1); |
138 assertTrue(called.get()); | 143 assertTrue(called.get()); |
139 assertTrue(event.isEmpty()); | 144 assertTrue(event.isEmpty()); |
140 called.set(false); | 145 called.set(false); |
141 nextReturn.set(true); | 146 nextReturn.set(true); |
142 assertEquals(event.raise(null), 0); | 147 assertEquals(event.raise(null), 0); |
143 assertFalse(called.get()); | 148 assertFalse(called.get()); |
144 assertTrue(event.isEmpty()); | 149 assertTrue(event.isEmpty()); |
145 } | 150 } |
| 151 |
| 152 @SmallTest |
| 153 @Feature({"Chromoting"}) |
| 154 public static void testPromisedEvent() { |
| 155 Thread thread = new Thread(new Runnable() { |
| 156 @Override |
| 157 public void run() { |
| 158 assertNull(Looper.myLooper()); |
| 159 Event.Raisable<Object> event = new Event.PromisedRaisable<>(); |
| 160 final List<Object> called1 = new ArrayList<>(); |
| 161 final List<Object> called2 = new ArrayList<>(); |
| 162 final List<Object> called3 = new ArrayList<>(); |
| 163 final List<Object> called4 = new ArrayList<>(); |
| 164 final List<Object> parameters = new ArrayList<>(); |
| 165 event.add(new Event.ParameterRunnable<Object>() { |
| 166 @Override |
| 167 public void run(Object obj) { |
| 168 called1.add(obj); |
| 169 } |
| 170 }); |
| 171 Object parameter = new Object(); |
| 172 event.raise(parameter); |
| 173 parameters.add(parameter); |
| 174 event.add(new Event.ParameterRunnable<Object>() { |
| 175 @Override |
| 176 public void run(Object obj) { |
| 177 called2.add(obj); |
| 178 } |
| 179 }); |
| 180 parameter = new Object(); |
| 181 event.raise(parameter); |
| 182 parameters.add(parameter); |
| 183 event.add(new Event.ParameterRunnable<Object>() { |
| 184 @Override |
| 185 public void run(Object obj) { |
| 186 called3.add(obj); |
| 187 } |
| 188 }); |
| 189 parameter = new Object(); |
| 190 event.raise(parameter); |
| 191 parameters.add(parameter); |
| 192 event.add(new Event.ParameterRunnable<Object>() { |
| 193 @Override |
| 194 public void run(Object obj) { |
| 195 called4.add(obj); |
| 196 } |
| 197 }); |
| 198 |
| 199 assertEquals(called1.size(), 3); |
| 200 assertEquals(called2.size(), 3); |
| 201 assertEquals(called3.size(), 2); |
| 202 assertEquals(called4.size(), 1); |
| 203 |
| 204 for (int i = 0; i < 3; i++) { |
| 205 assertTrue(called1.get(i) == parameters.get(i)); |
| 206 assertTrue(called2.get(i) == parameters.get(i)); |
| 207 } |
| 208 for (int i = 0; i < 2; i++) { |
| 209 assertTrue(called3.get(i) == parameters.get(i + 1)); |
| 210 } |
| 211 assertTrue(called4.get(0) == parameters.get(2)); |
| 212 } |
| 213 }); |
| 214 thread.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler()
{ |
| 215 @Override |
| 216 public void uncaughtException(Thread t, Throwable e) { |
| 217 // Forward exceptions from test thread. |
| 218 assertFalse(true); |
| 219 } |
| 220 }); |
| 221 thread.start(); |
| 222 try { |
| 223 thread.join(); |
| 224 } catch (InterruptedException ex) { } |
| 225 } |
| 226 |
| 227 @SmallTest |
| 228 @Feature({"Chromoting"}) |
| 229 public static void testPromisedEventWithLooper() { |
| 230 assertNotNull(Looper.myLooper()); |
| 231 Event.Raisable<Object> event = new Event.PromisedRaisable<>(); |
| 232 final List<Object> called1 = new ArrayList<>(); |
| 233 final List<Object> called2 = new ArrayList<>(); |
| 234 final List<Object> called3 = new ArrayList<>(); |
| 235 final List<Object> called4 = new ArrayList<>(); |
| 236 final List<Object> parameters = new ArrayList<>(); |
| 237 event.add(new Event.ParameterRunnable<Object>() { |
| 238 @Override |
| 239 public void run(Object obj) { |
| 240 called1.add(obj); |
| 241 } |
| 242 }); |
| 243 Object parameter = new Object(); |
| 244 event.raise(parameter); |
| 245 parameters.add(parameter); |
| 246 event.add(new Event.ParameterRunnable<Object>() { |
| 247 @Override |
| 248 public void run(Object obj) { |
| 249 called2.add(obj); |
| 250 } |
| 251 }); |
| 252 parameter = new Object(); |
| 253 event.raise(parameter); |
| 254 parameters.add(parameter); |
| 255 event.add(new Event.ParameterRunnable<Object>() { |
| 256 @Override |
| 257 public void run(Object obj) { |
| 258 called3.add(obj); |
| 259 } |
| 260 }); |
| 261 parameter = new Object(); |
| 262 event.raise(parameter); |
| 263 parameters.add(parameter); |
| 264 event.add(new Event.ParameterRunnable<Object>() { |
| 265 @Override |
| 266 public void run(Object obj) { |
| 267 called4.add(obj); |
| 268 } |
| 269 }); |
| 270 |
| 271 Handler h = new Handler(Looper.myLooper()); |
| 272 h.post(new Runnable() { |
| 273 @Override |
| 274 public void run() { |
| 275 Looper.myLooper().quit(); |
| 276 } |
| 277 }); |
| 278 Looper.loop(); |
| 279 |
| 280 assertEquals(called1.size(), 3); |
| 281 assertEquals(called2.size(), 3); |
| 282 assertEquals(called3.size(), 2); |
| 283 assertEquals(called4.size(), 1); |
| 284 |
| 285 for (int i = 0; i < 3; i++) { |
| 286 assertTrue(called1.get(i) == parameters.get(i)); |
| 287 } |
| 288 assertTrue(called2.get(0) == parameters.get(1)); |
| 289 for (int i = 0; i < 2; i++) { |
| 290 assertTrue(called2.get(i + 1) == parameters.get(2)); |
| 291 assertTrue(called3.get(i) == parameters.get(2)); |
| 292 } |
| 293 assertTrue(called4.get(0) == parameters.get(2)); |
| 294 } |
146 } | 295 } |
OLD | NEW |