| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 library error_group_test; | 5 library error_group_test; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 | 8 |
| 9 import '../../../pkg/unittest/lib/unittest.dart'; | 9 import '../../../pkg/unittest/lib/unittest.dart'; |
| 10 import '../../pub/error_group.dart'; | 10 import '../../pub/error_group.dart'; |
| (...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 211 expect(stream.elementAt(1), completion(equals(2))); | 211 expect(stream.elementAt(1), completion(equals(2))); |
| 212 expect(errorGroup.done, completes); | 212 expect(errorGroup.done, completes); |
| 213 | 213 |
| 214 controller..add(1)..add(2)..close(); | 214 controller..add(1)..add(2)..close(); |
| 215 }); | 215 }); |
| 216 | 216 |
| 217 test('should pass through an error from the stream if it has a ' | 217 test('should pass through an error from the stream if it has a ' |
| 218 'listener', () { | 218 'listener', () { |
| 219 expect(stream.first, throwsFormatException); | 219 expect(stream.first, throwsFormatException); |
| 220 // errorGroup shouldn't top-level the exception | 220 // errorGroup shouldn't top-level the exception |
| 221 controller.signalError(new AsyncError(new FormatException())); | 221 controller.addError(new AsyncError(new FormatException())); |
| 222 }); | 222 }); |
| 223 | 223 |
| 224 test('should notify the error group of an exception from the stream even ' | 224 test('should notify the error group of an exception from the stream even ' |
| 225 'if it has a listener', () { | 225 'if it has a listener', () { |
| 226 expect(stream.first, throwsFormatException); | 226 expect(stream.first, throwsFormatException); |
| 227 expect(errorGroup.done, throwsFormatException); | 227 expect(errorGroup.done, throwsFormatException); |
| 228 controller.signalError(new AsyncError(new FormatException())); | 228 controller.addError(new AsyncError(new FormatException())); |
| 229 }); | 229 }); |
| 230 | 230 |
| 231 test('should pass a signaled exception to the stream if it has a listener ' | 231 test('should pass a signaled exception to the stream if it has a listener ' |
| 232 'and should unsubscribe that stream', () { | 232 'and should unsubscribe that stream', () { |
| 233 expect(stream.first, throwsFormatException); | 233 expect(stream.first, throwsFormatException); |
| 234 // errorGroup shouldn't top-level the exception | 234 // errorGroup shouldn't top-level the exception |
| 235 errorGroup.signalError(new AsyncError(new FormatException())); | 235 errorGroup.signalError(new AsyncError(new FormatException())); |
| 236 | 236 |
| 237 expect(stream.first.catchError((_) { | 237 expect(stream.first.catchError((_) { |
| 238 controller.add('value'); | 238 controller.add('value'); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 255 | 255 |
| 256 // A listener added afterwards should see an empty stream, since it's not | 256 // A listener added afterwards should see an empty stream, since it's not |
| 257 // single-subscription | 257 // single-subscription |
| 258 expect(errorGroup.done.then((_) => stream.toList()), | 258 expect(errorGroup.done.then((_) => stream.toList()), |
| 259 completion(isEmpty)); | 259 completion(isEmpty)); |
| 260 }); | 260 }); |
| 261 | 261 |
| 262 test("should pipe an exception from the stream to .done if the stream " | 262 test("should pipe an exception from the stream to .done if the stream " |
| 263 "doesn't have a listener", () { | 263 "doesn't have a listener", () { |
| 264 expect(errorGroup.done, throwsFormatException); | 264 expect(errorGroup.done, throwsFormatException); |
| 265 controller.signalError(new AsyncError(new FormatException())); | 265 controller.addError(new AsyncError(new FormatException())); |
| 266 | 266 |
| 267 // A listener added afterwards should see an empty stream, since it's not | 267 // A listener added afterwards should see an empty stream, since it's not |
| 268 // single-subscription | 268 // single-subscription |
| 269 expect(errorGroup.done.catchError((_) { | 269 expect(errorGroup.done.catchError((_) { |
| 270 controller.add('value'); // should be ignored | 270 controller.add('value'); // should be ignored |
| 271 return stream.toList(); | 271 return stream.toList(); |
| 272 }), completion(isEmpty)); | 272 }), completion(isEmpty)); |
| 273 }); | 273 }); |
| 274 | 274 |
| 275 test("should pass a signaled exception to .done if the stream doesn't " | 275 test("should pass a signaled exception to .done if the stream doesn't " |
| (...skipping 27 matching lines...) Expand all Loading... |
| 303 controller.close(); | 303 controller.close(); |
| 304 | 304 |
| 305 // A listener added afterwards should receive the value | 305 // A listener added afterwards should receive the value |
| 306 expect(errorGroup.done.then((_) => stream.toList()), | 306 expect(errorGroup.done.then((_) => stream.toList()), |
| 307 completion(equals(['value']))); | 307 completion(equals(['value']))); |
| 308 }); | 308 }); |
| 309 | 309 |
| 310 test("should pipe an exception from the stream to .done if the stream " | 310 test("should pipe an exception from the stream to .done if the stream " |
| 311 "doesn't have a listener", () { | 311 "doesn't have a listener", () { |
| 312 expect(errorGroup.done, throwsFormatException); | 312 expect(errorGroup.done, throwsFormatException); |
| 313 controller.signalError(new AsyncError(new FormatException())); | 313 controller.addError(new AsyncError(new FormatException())); |
| 314 | 314 |
| 315 // A listener added afterwards should receive the exception | 315 // A listener added afterwards should receive the exception |
| 316 expect(errorGroup.done.catchError((_) { | 316 expect(errorGroup.done.catchError((_) { |
| 317 controller.add('value'); // should be ignored | 317 controller.add('value'); // should be ignored |
| 318 expect(stream.first, throwsFormatException); | 318 expect(stream.first, throwsFormatException); |
| 319 }), completes); | 319 }), completes); |
| 320 }); | 320 }); |
| 321 | 321 |
| 322 test("should pass a signaled exception to .done if the stream doesn't " | 322 test("should pass a signaled exception to .done if the stream doesn't " |
| 323 "have a listener", | 323 "have a listener", |
| (...skipping 22 matching lines...) Expand all Loading... |
| 346 stream1 = errorGroup.registerStream(controller1.stream); | 346 stream1 = errorGroup.registerStream(controller1.stream); |
| 347 stream2 = errorGroup.registerStream(controller2.stream); | 347 stream2 = errorGroup.registerStream(controller2.stream); |
| 348 }); | 348 }); |
| 349 | 349 |
| 350 test("should pipe exceptions from one stream to the other and to .done", | 350 test("should pipe exceptions from one stream to the other and to .done", |
| 351 () { | 351 () { |
| 352 expect(stream1.first, throwsFormatException); | 352 expect(stream1.first, throwsFormatException); |
| 353 expect(stream2.first, throwsFormatException); | 353 expect(stream2.first, throwsFormatException); |
| 354 expect(errorGroup.done, throwsFormatException); | 354 expect(errorGroup.done, throwsFormatException); |
| 355 | 355 |
| 356 controller1.signalError(new AsyncError(new FormatException())); | 356 controller1.addError(new AsyncError(new FormatException())); |
| 357 }); | 357 }); |
| 358 | 358 |
| 359 test("each future should be able to emit values independently", () { | 359 test("each future should be able to emit values independently", () { |
| 360 expect(stream1.toList(), completion(equals(['value1.1', 'value1.2']))); | 360 expect(stream1.toList(), completion(equals(['value1.1', 'value1.2']))); |
| 361 expect(stream2.toList(), completion(equals(['value2.1', 'value2.2']))); | 361 expect(stream2.toList(), completion(equals(['value2.1', 'value2.2']))); |
| 362 expect(errorGroup.done, completes); | 362 expect(errorGroup.done, completes); |
| 363 | 363 |
| 364 controller1..add('value1.1')..add('value1.2')..close(); | 364 controller1..add('value1.1')..add('value1.2')..close(); |
| 365 controller2..add('value2.1')..add('value2.2')..close(); | 365 controller2..add('value2.1')..add('value2.2')..close(); |
| 366 }); | 366 }); |
| 367 | 367 |
| 368 test("shouldn't throw a top-level exception if a stream receives an error " | 368 test("shouldn't throw a top-level exception if a stream receives an error " |
| 369 "after the other listened stream completes", () { | 369 "after the other listened stream completes", () { |
| 370 expect(stream1.toList(), completion(equals(['value1', 'value2']))); | 370 expect(stream1.toList(), completion(equals(['value1', 'value2']))); |
| 371 controller1..add('value1')..add('value2')..close(); | 371 controller1..add('value1')..add('value2')..close(); |
| 372 | 372 |
| 373 expect(stream1.toList().then((_) { | 373 expect(stream1.toList().then((_) { |
| 374 // shouldn't cause a top-level exception | 374 // shouldn't cause a top-level exception |
| 375 controller2.signalError(new AsyncError(new FormatException())); | 375 controller2.addError(new AsyncError(new FormatException())); |
| 376 }), completes); | 376 }), completes); |
| 377 }); | 377 }); |
| 378 | 378 |
| 379 test("shouldn't throw a top-level exception if an error is signaled after " | 379 test("shouldn't throw a top-level exception if an error is signaled after " |
| 380 "one listened stream completes", () { | 380 "one listened stream completes", () { |
| 381 expect(stream1.toList(), completion(equals(['value1', 'value2']))); | 381 expect(stream1.toList(), completion(equals(['value1', 'value2']))); |
| 382 controller1..add('value1')..add('value2')..close(); | 382 controller1..add('value1')..add('value2')..close(); |
| 383 | 383 |
| 384 expect(stream1.toList().then((_) { | 384 expect(stream1.toList().then((_) { |
| 385 // shouldn't cause a top-level exception | 385 // shouldn't cause a top-level exception |
| (...skipping 14 matching lines...) Expand all Loading... |
| 400 stream = errorGroup.registerStream(controller.stream); | 400 stream = errorGroup.registerStream(controller.stream); |
| 401 completer = new Completer(); | 401 completer = new Completer(); |
| 402 future = errorGroup.registerFuture(completer.future); | 402 future = errorGroup.registerFuture(completer.future); |
| 403 }); | 403 }); |
| 404 | 404 |
| 405 test("should pipe exceptions from the stream to the future", () { | 405 test("should pipe exceptions from the stream to the future", () { |
| 406 expect(stream.first, throwsFormatException); | 406 expect(stream.first, throwsFormatException); |
| 407 expect(future, throwsFormatException); | 407 expect(future, throwsFormatException); |
| 408 expect(errorGroup.done, throwsFormatException); | 408 expect(errorGroup.done, throwsFormatException); |
| 409 | 409 |
| 410 controller.signalError(new AsyncError(new FormatException())); | 410 controller.addError(new AsyncError(new FormatException())); |
| 411 }); | 411 }); |
| 412 | 412 |
| 413 test("should pipe exceptions from the future to the stream", () { | 413 test("should pipe exceptions from the future to the stream", () { |
| 414 expect(stream.first, throwsFormatException); | 414 expect(stream.first, throwsFormatException); |
| 415 expect(future, throwsFormatException); | 415 expect(future, throwsFormatException); |
| 416 expect(errorGroup.done, throwsFormatException); | 416 expect(errorGroup.done, throwsFormatException); |
| 417 | 417 |
| 418 completer.completeError(new FormatException()); | 418 completer.completeError(new FormatException()); |
| 419 }); | 419 }); |
| 420 | 420 |
| 421 test("the stream and the future should be able to complete/emit values " | 421 test("the stream and the future should be able to complete/emit values " |
| 422 "independently", () { | 422 "independently", () { |
| 423 expect(stream.toList(), completion(equals(['value1.1', 'value1.2']))); | 423 expect(stream.toList(), completion(equals(['value1.1', 'value1.2']))); |
| 424 expect(future, completion(equals('value2.0'))); | 424 expect(future, completion(equals('value2.0'))); |
| 425 expect(errorGroup.done, completes); | 425 expect(errorGroup.done, completes); |
| 426 | 426 |
| 427 controller..add('value1.1')..add('value1.2')..close(); | 427 controller..add('value1.1')..add('value1.2')..close(); |
| 428 completer.complete('value2.0'); | 428 completer.complete('value2.0'); |
| 429 }); | 429 }); |
| 430 | 430 |
| 431 test("shouldn't throw a top-level exception if the stream receives an error
" | 431 test("shouldn't throw a top-level exception if the stream receives an error
" |
| 432 "after the listened future completes", () { | 432 "after the listened future completes", () { |
| 433 expect(future, completion(equals('value'))); | 433 expect(future, completion(equals('value'))); |
| 434 completer.complete('value'); | 434 completer.complete('value'); |
| 435 | 435 |
| 436 expect(future.then((_) { | 436 expect(future.then((_) { |
| 437 // shouldn't cause a top-level exception | 437 // shouldn't cause a top-level exception |
| 438 controller.signalError(new AsyncError(new FormatException())); | 438 controller.addError(new AsyncError(new FormatException())); |
| 439 }), completes); | 439 }), completes); |
| 440 }); | 440 }); |
| 441 | 441 |
| 442 test("shouldn't throw a top-level exception if the future receives an " | 442 test("shouldn't throw a top-level exception if the future receives an " |
| 443 "error after the listened stream completes", () { | 443 "error after the listened stream completes", () { |
| 444 expect(stream.toList(), completion(equals(['value1', 'value2']))); | 444 expect(stream.toList(), completion(equals(['value1', 'value2']))); |
| 445 controller..add('value1')..add('value2')..close(); | 445 controller..add('value1')..add('value2')..close(); |
| 446 | 446 |
| 447 expect(stream.toList().then((_) { | 447 expect(stream.toList().then((_) { |
| 448 // shouldn't cause a top-level exception | 448 // shouldn't cause a top-level exception |
| 449 completer.completeError(new FormatException()); | 449 completer.completeError(new FormatException()); |
| 450 }), completes); | 450 }), completes); |
| 451 }); | 451 }); |
| 452 }); | 452 }); |
| 453 } | 453 } |
| OLD | NEW |