| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 // TODO(nweiz): Get rid of this when https://codereview.chromium.org/1241723003/ | 5 // TODO(nweiz): Get rid of this when https://codereview.chromium.org/1241723003/ |
| 6 // lands. | 6 // lands. |
| 7 | 7 |
| 8 import 'dart:async'; | 8 import 'dart:async'; |
| 9 | 9 |
| 10 import 'package:test/test.dart'; | 10 import 'package:test/test.dart'; |
| (...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 206 | 206 |
| 207 for (var i = 0; i < 4; i++) { | 207 for (var i = 0; i < 4; i++) { |
| 208 controller.add(i); | 208 controller.add(i); |
| 209 | 209 |
| 210 var queue1Fired = false; | 210 var queue1Fired = false; |
| 211 var queue2Fired = false; | 211 var queue2Fired = false; |
| 212 var queue3Fired = false; | 212 var queue3Fired = false; |
| 213 var queue4Fired = false; | 213 var queue4Fired = false; |
| 214 var queue5Fired = false; | 214 var queue5Fired = false; |
| 215 | 215 |
| 216 queue5.next.then(expectAsync((_) { | 216 queue5.next.then(expectAsync1((_) { |
| 217 queue5Fired = true; | 217 queue5Fired = true; |
| 218 expect(queue1Fired, isTrue); | 218 expect(queue1Fired, isTrue); |
| 219 expect(queue2Fired, isTrue); | 219 expect(queue2Fired, isTrue); |
| 220 expect(queue3Fired, isTrue); | 220 expect(queue3Fired, isTrue); |
| 221 expect(queue4Fired, isTrue); | 221 expect(queue4Fired, isTrue); |
| 222 })); | 222 })); |
| 223 | 223 |
| 224 queue1.next.then(expectAsync((_) { | 224 queue1.next.then(expectAsync1((_) { |
| 225 queue1Fired = true; | 225 queue1Fired = true; |
| 226 expect(queue2Fired, isFalse); | 226 expect(queue2Fired, isFalse); |
| 227 expect(queue3Fired, isFalse); | 227 expect(queue3Fired, isFalse); |
| 228 expect(queue4Fired, isFalse); | 228 expect(queue4Fired, isFalse); |
| 229 expect(queue5Fired, isFalse); | 229 expect(queue5Fired, isFalse); |
| 230 })); | 230 })); |
| 231 | 231 |
| 232 queue4.next.then(expectAsync((_) { | 232 queue4.next.then(expectAsync1((_) { |
| 233 queue4Fired = true; | 233 queue4Fired = true; |
| 234 expect(queue1Fired, isTrue); | 234 expect(queue1Fired, isTrue); |
| 235 expect(queue2Fired, isTrue); | 235 expect(queue2Fired, isTrue); |
| 236 expect(queue3Fired, isTrue); | 236 expect(queue3Fired, isTrue); |
| 237 expect(queue5Fired, isFalse); | 237 expect(queue5Fired, isFalse); |
| 238 })); | 238 })); |
| 239 | 239 |
| 240 queue2.next.then(expectAsync((_) { | 240 queue2.next.then(expectAsync1((_) { |
| 241 queue2Fired = true; | 241 queue2Fired = true; |
| 242 expect(queue1Fired, isTrue); | 242 expect(queue1Fired, isTrue); |
| 243 expect(queue3Fired, isFalse); | 243 expect(queue3Fired, isFalse); |
| 244 expect(queue4Fired, isFalse); | 244 expect(queue4Fired, isFalse); |
| 245 expect(queue5Fired, isFalse); | 245 expect(queue5Fired, isFalse); |
| 246 })); | 246 })); |
| 247 | 247 |
| 248 queue3.next.then(expectAsync((_) { | 248 queue3.next.then(expectAsync1((_) { |
| 249 queue3Fired = true; | 249 queue3Fired = true; |
| 250 expect(queue1Fired, isTrue); | 250 expect(queue1Fired, isTrue); |
| 251 expect(queue2Fired, isTrue); | 251 expect(queue2Fired, isTrue); |
| 252 expect(queue4Fired, isFalse); | 252 expect(queue4Fired, isFalse); |
| 253 expect(queue5Fired, isFalse); | 253 expect(queue5Fired, isFalse); |
| 254 })); | 254 })); |
| 255 } | 255 } |
| 256 }); | 256 }); |
| 257 | 257 |
| 258 test("pauses the source when all forks are paused and/or not listening", | 258 test("pauses the source when all forks are paused and/or not listening", |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 304 expect(controller.hasListener, isTrue); | 304 expect(controller.hasListener, isTrue); |
| 305 | 305 |
| 306 expect(fork4.listen(null).cancel(), completion(equals(42))); | 306 expect(fork4.listen(null).cancel(), completion(equals(42))); |
| 307 await flushMicrotasks(); | 307 await flushMicrotasks(); |
| 308 expect(controller.hasListener, isFalse); | 308 expect(controller.hasListener, isFalse); |
| 309 }); | 309 }); |
| 310 }); | 310 }); |
| 311 | 311 |
| 312 group("modification during dispatch:", () { | 312 group("modification during dispatch:", () { |
| 313 test("forking during onCancel", () { | 313 test("forking during onCancel", () { |
| 314 controller = new StreamController<int>(onCancel: expectAsync(() { | 314 controller = new StreamController<int>(onCancel: expectAsync0(() { |
| 315 expect(stream.fork().toList(), completion(isEmpty)); | 315 expect(stream.fork().toList(), completion(isEmpty)); |
| 316 })); | 316 })); |
| 317 stream = new ForkableStream<int>(controller.stream); | 317 stream = new ForkableStream<int>(controller.stream); |
| 318 | 318 |
| 319 stream.listen(null).cancel(); | 319 stream.listen(null).cancel(); |
| 320 }); | 320 }); |
| 321 | 321 |
| 322 test("forking during onPause", () { | 322 test("forking during onPause", () { |
| 323 controller = new StreamController<int>(onPause: expectAsync(() { | 323 controller = new StreamController<int>(onPause: expectAsync0(() { |
| 324 stream.fork().listen(null); | 324 stream.fork().listen(null); |
| 325 })); | 325 })); |
| 326 stream = new ForkableStream<int>(controller.stream); | 326 stream = new ForkableStream<int>(controller.stream); |
| 327 | 327 |
| 328 stream.listen(null).pause(); | 328 stream.listen(null).pause(); |
| 329 | 329 |
| 330 // The fork created in onPause should have resumed the stream. | 330 // The fork created in onPause should have resumed the stream. |
| 331 expect(controller.isPaused, isFalse); | 331 expect(controller.isPaused, isFalse); |
| 332 }); | 332 }); |
| 333 | 333 |
| 334 test("forking during onData", () { | 334 test("forking during onData", () { |
| 335 var sub; | 335 var sub; |
| 336 sub = stream.listen(expectAsync((value1) { | 336 sub = stream.listen(expectAsync1((value1) { |
| 337 expect(value1, equals(1)); | 337 expect(value1, equals(1)); |
| 338 stream.fork().listen(expectAsync((value2) { | 338 stream.fork().listen(expectAsync1((value2) { |
| 339 expect(value2, equals(2)); | 339 expect(value2, equals(2)); |
| 340 })); | 340 })); |
| 341 sub.cancel(); | 341 sub.cancel(); |
| 342 })); | 342 })); |
| 343 | 343 |
| 344 controller.add(1); | 344 controller.add(1); |
| 345 controller.add(2); | 345 controller.add(2); |
| 346 }); | 346 }); |
| 347 | 347 |
| 348 test("canceling a fork during onData", () { | 348 test("canceling a fork during onData", () { |
| 349 var fork = stream.fork(); | 349 var fork = stream.fork(); |
| 350 var forkSub = fork.listen(expectAsync((_) {}, count: 0)); | 350 var forkSub = fork.listen(expectAsync1((_) {}, count: 0)); |
| 351 | 351 |
| 352 stream.listen(expectAsync((_) => forkSub.cancel())); | 352 stream.listen(expectAsync1((_) => forkSub.cancel())); |
| 353 controller.add(null); | 353 controller.add(null); |
| 354 }); | 354 }); |
| 355 | 355 |
| 356 test("forking during onError", () { | 356 test("forking during onError", () { |
| 357 var sub; | 357 var sub; |
| 358 sub = stream.listen(null, onError: expectAsync((error1) { | 358 sub = stream.listen(null, onError: expectAsync1((error1) { |
| 359 expect(error1, equals("error 1")); | 359 expect(error1, equals("error 1")); |
| 360 stream.fork().listen(null, onError: expectAsync((error2) { | 360 stream.fork().listen(null, onError: expectAsync1((error2) { |
| 361 expect(error2, equals("error 2")); | 361 expect(error2, equals("error 2")); |
| 362 })); | 362 })); |
| 363 sub.cancel(); | 363 sub.cancel(); |
| 364 })); | 364 })); |
| 365 | 365 |
| 366 controller.addError("error 1"); | 366 controller.addError("error 1"); |
| 367 controller.addError("error 2"); | 367 controller.addError("error 2"); |
| 368 }); | 368 }); |
| 369 | 369 |
| 370 test("canceling a fork during onError", () { | 370 test("canceling a fork during onError", () { |
| 371 var fork = stream.fork(); | 371 var fork = stream.fork(); |
| 372 var forkSub = fork.listen(expectAsync((_) {}, count: 0)); | 372 var forkSub = fork.listen(expectAsync1((_) {}, count: 0)); |
| 373 | 373 |
| 374 stream.listen(null, onError: expectAsync((_) => forkSub.cancel())); | 374 stream.listen(null, onError: expectAsync1((_) => forkSub.cancel())); |
| 375 controller.addError("error"); | 375 controller.addError("error"); |
| 376 }); | 376 }); |
| 377 | 377 |
| 378 test("forking during onDone", () { | 378 test("forking during onDone", () { |
| 379 stream.listen(null, onDone: expectAsync(() { | 379 stream.listen(null, onDone: expectAsync0(() { |
| 380 expect(stream.fork().toList(), completion(isEmpty)); | 380 expect(stream.fork().toList(), completion(isEmpty)); |
| 381 })); | 381 })); |
| 382 | 382 |
| 383 controller.close(); | 383 controller.close(); |
| 384 }); | 384 }); |
| 385 | 385 |
| 386 test("canceling a fork during onDone", () { | 386 test("canceling a fork during onDone", () { |
| 387 var fork = stream.fork(); | 387 var fork = stream.fork(); |
| 388 var forkSub = fork.listen(null, onDone: expectAsync(() {}, count: 0)); | 388 var forkSub = fork.listen(null, onDone: expectAsync0(() {}, count: 0)); |
| 389 | 389 |
| 390 stream.listen(null, onDone: expectAsync(() => forkSub.cancel())); | 390 stream.listen(null, onDone: expectAsync0(() => forkSub.cancel())); |
| 391 controller.close(); | 391 controller.close(); |
| 392 }); | 392 }); |
| 393 }); | 393 }); |
| 394 | 394 |
| 395 group("throws an error when", () { | 395 group("throws an error when", () { |
| 396 test("a cancelled stream is forked", () { | 396 test("a cancelled stream is forked", () { |
| 397 stream.listen(null).cancel(); | 397 stream.listen(null).cancel(); |
| 398 expect(stream.fork().toList(), completion(isEmpty)); | 398 expect(stream.fork().toList(), completion(isEmpty)); |
| 399 }); | 399 }); |
| 400 | 400 |
| 401 test("a cancelled stream is forked even when other forks are alive", () { | 401 test("a cancelled stream is forked even when other forks are alive", () { |
| 402 stream.fork().listen(null); | 402 stream.fork().listen(null); |
| 403 stream.listen(null).cancel(); | 403 stream.listen(null).cancel(); |
| 404 | 404 |
| 405 expect(controller.hasListener, isTrue); | 405 expect(controller.hasListener, isTrue); |
| 406 expect(stream.fork().toList(), completion(isEmpty)); | 406 expect(stream.fork().toList(), completion(isEmpty)); |
| 407 }); | 407 }); |
| 408 | 408 |
| 409 test("a closed stream is forked", () async { | 409 test("a closed stream is forked", () async { |
| 410 controller.close(); | 410 controller.close(); |
| 411 await stream.listen(null).asFuture(); | 411 await stream.listen(null).asFuture(); |
| 412 expect(stream.fork().toList(), completion(isEmpty)); | 412 expect(stream.fork().toList(), completion(isEmpty)); |
| 413 }); | 413 }); |
| 414 }); | 414 }); |
| 415 } | 415 } |
| 416 | 416 |
| 417 Future flushMicrotasks() => new Future.delayed(Duration.ZERO); | 417 Future flushMicrotasks() => new Future.delayed(Duration.ZERO); |
| OLD | NEW |