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 scheduled_test_test; | 5 library scheduled_test_test; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 | 8 |
9 import 'package:scheduled_test/scheduled_test.dart'; | 9 import 'package:scheduled_test/scheduled_test.dart'; |
10 import 'package:scheduled_test/src/mock_clock.dart' as mock_clock; | 10 import 'package:scheduled_test/src/mock_clock.dart' as mock_clock; |
(...skipping 632 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
643 throw 'in-band'; | 643 throw 'in-band'; |
644 })); | 644 })); |
645 }); | 645 }); |
646 | 646 |
647 test('test 2', () { | 647 test('test 2', () { |
648 expect(errors, everyElement(new isInstanceOf<ScheduleError>())); | 648 expect(errors, everyElement(new isInstanceOf<ScheduleError>())); |
649 expect(errors.map((e) => e.error), equals(['out-of-band', 'in-band'])); | 649 expect(errors.map((e) => e.error), equals(['out-of-band', 'in-band'])); |
650 }); | 650 }); |
651 }, passing: ['test 2']); | 651 }, passing: ['test 2']); |
652 | 652 |
653 expectTestsPass('currentSchedule.errors contains both an error raised in a ' | |
654 'task and an error raised afterwards out-of-band', () { | |
655 mock_clock.mock().run(); | |
656 var errors; | |
657 test('test 1', () { | |
658 currentSchedule.onComplete.schedule(() { | |
659 errors = currentSchedule.errors; | |
660 }); | |
661 | |
662 sleep(2).then(wrapAsync((_) { | |
663 throw 'out-of-band'; | |
664 })); | |
665 | |
666 schedule(() => sleep(1).then((_) { | |
667 throw 'in-band'; | |
668 })); | |
669 }); | |
670 | |
671 test('test 2', () { | |
672 expect(errors, everyElement(new isInstanceOf<ScheduleError>())); | |
673 expect(errors.map((e) => e.error), equals(['in-band', 'out-of-band'])); | |
674 }); | |
675 }, passing: ['test 2']); | |
676 | |
653 expectTestsPass('currentSchedule.currentTask returns the current task while ' | 677 expectTestsPass('currentSchedule.currentTask returns the current task while ' |
654 'executing a task', () { | 678 'executing a task', () { |
655 test('test', () { | 679 test('test', () { |
656 schedule(() => expect('foo', equals('foo')), 'task 1'); | 680 schedule(() => expect('foo', equals('foo')), 'task 1'); |
657 | 681 |
658 schedule(() { | 682 schedule(() { |
659 expect(currentSchedule.currentTask.description, equals('task 2')); | 683 expect(currentSchedule.currentTask.description, equals('task 2')); |
660 }, 'task 2'); | 684 }, 'task 2'); |
661 | 685 |
662 schedule(() => expect('bar', equals('bar')), 'task 3'); | 686 schedule(() => expect('bar', equals('bar')), 'task 3'); |
(...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
996 | 1020 |
997 test('test 2', () { | 1021 test('test 2', () { |
998 expect(errors, everyElement(new isInstanceOf<ScheduleError>())); | 1022 expect(errors, everyElement(new isInstanceOf<ScheduleError>())); |
999 expect(errors.map((e) => e.error), equals([ | 1023 expect(errors.map((e) => e.error), equals([ |
1000 "out-of-band", | 1024 "out-of-band", |
1001 "The schedule timed out after 0:00:00.002000 of inactivity." | 1025 "The schedule timed out after 0:00:00.002000 of inactivity." |
1002 ])); | 1026 ])); |
1003 }); | 1027 }); |
1004 }, passing: ['test 2']); | 1028 }, passing: ['test 2']); |
1005 | 1029 |
1030 expectTestsPass("a task that has an error then times out waiting for an " | |
1031 "out-of-band callback records both", () { | |
1032 mock_clock.mock().run(); | |
1033 var errors; | |
1034 test('test 1', () { | |
1035 currentSchedule.timeout = new Duration(milliseconds: 2); | |
1036 | |
1037 currentSchedule.onException.schedule(() { | |
1038 errors = currentSchedule.errors; | |
1039 }); | |
1040 | |
1041 schedule(() { | |
1042 throw 'error'; | |
1043 }); | |
1044 wrapFuture(sleep(3)); | |
1045 }); | |
1046 | |
1047 test('test 2', () { | |
1048 expect(errors, everyElement(new isInstanceOf<ScheduleError>())); | |
1049 expect(errors.map((e) => e.error), equals([ | |
1050 "error", | |
1051 "The schedule timed out after 0:00:00.002000 of inactivity." | |
1052 ])); | |
1053 }); | |
1054 }, passing: ['test 2']); | |
1055 | |
1006 expectTestsPass("currentSchedule.heartbeat resets the timeout timer", () { | 1056 expectTestsPass("currentSchedule.heartbeat resets the timeout timer", () { |
1007 mock_clock.mock().run(); | 1057 mock_clock.mock().run(); |
1008 test('test', () { | 1058 test('test', () { |
1009 currentSchedule.timeout = new Duration(milliseconds: 3); | 1059 currentSchedule.timeout = new Duration(milliseconds: 3); |
1010 | 1060 |
1011 schedule(() { | 1061 schedule(() { |
1012 return sleep(2).then((_) { | 1062 return sleep(2).then((_) { |
1013 currentSchedule.heartbeat(); | 1063 currentSchedule.heartbeat(); |
1014 return sleep(2); | 1064 return sleep(2); |
1015 }); | 1065 }); |
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1166 return sleep(1).then((_) { | 1216 return sleep(1).then((_) { |
1167 parentTaskFinished = true; | 1217 parentTaskFinished = true; |
1168 }); | 1218 }); |
1169 }); | 1219 }); |
1170 }); | 1220 }); |
1171 | 1221 |
1172 test('test 2', () { | 1222 test('test 2', () { |
1173 expect(parentTaskFinishedBeforeOnComplete, isTrue); | 1223 expect(parentTaskFinishedBeforeOnComplete, isTrue); |
1174 }); | 1224 }); |
1175 }, passing: ['test 2']); | 1225 }, passing: ['test 2']); |
1226 | |
1227 expectTestsPass("an error thrown in a scheduled task should be piped to that " | |
1228 "task's return value", () { | |
1229 var error; | |
1230 test('test 1', () { | |
1231 schedule(() { | |
1232 throw 'error'; | |
1233 }).catchError((e) { | |
1234 error = e; | |
1235 }); | |
1236 }); | |
1237 | |
1238 test('test 2', () { | |
1239 expect(error, new isInstanceOf<ScheduleError>()); | |
1240 expect(error.error, equals('error')); | |
1241 }); | |
1242 }, passing: ['test 2']); | |
1243 | |
1244 expectTestsPass("an error thrown in a scheduled task should be piped to " | |
1245 "future tasks' return values", () { | |
1246 var error; | |
1247 test('test 1', () { | |
1248 schedule(() { | |
1249 throw 'error'; | |
1250 }); | |
1251 | |
1252 schedule(() => null).catchError((e) { | |
1253 error = e; | |
1254 }); | |
Bob Nystrom
2013/03/04 23:52:00
What's the motivation for this?
nweiz
2013/03/05 02:16:09
It's catching the error thrown by the return value
| |
1255 }); | |
1256 | |
1257 test('test 2', () { | |
1258 expect(error, new isInstanceOf<ScheduleError>()); | |
1259 expect(error.error, equals('error')); | |
1260 }); | |
1261 }, passing: ['test 2']); | |
1262 | |
1263 expectTestsPass("an out-of-band error should be piped to future tasks' " | |
1264 "return values, but not the current task's", () { | |
1265 mock_clock.mock().run(); | |
1266 var error; | |
1267 var firstTaskError = false; | |
1268 var secondTaskRun = false; | |
1269 test('test 1', () { | |
1270 schedule(() => sleep(2)).catchError((_) { | |
1271 firstTaskError = true; | |
1272 }); | |
1273 | |
1274 sleep(1).then(wrapAsync((_) { | |
1275 throw 'error'; | |
1276 })); | |
1277 | |
1278 schedule(() { | |
1279 secondTaskRun = true; | |
1280 }).catchError((e) { | |
1281 error = e; | |
1282 }); | |
1283 }); | |
1284 | |
1285 test('test 2', () { | |
1286 expect(firstTaskError, isFalse); | |
1287 expect(secondTaskRun, isFalse); | |
1288 expect(error, new isInstanceOf<ScheduleError>()); | |
1289 expect(error.error, equals('error')); | |
1290 }); | |
1291 }, passing: ['test 2']); | |
1292 | |
1293 expectTestsPass("expect(..., completes) with a completing future should pass", | |
1294 () { | |
1295 test('test', () { | |
1296 expect(pumpEventQueue(), completes); | |
1297 }); | |
1298 }); | |
1299 | |
1300 expectTestsPass("expect(..., completes) with a failing future should signal " | |
1301 "an out-of-band error", () { | |
1302 var errors; | |
1303 test('test 1', () { | |
1304 currentSchedule.onException.schedule(() { | |
1305 errors = currentSchedule.errors; | |
1306 }); | |
1307 | |
1308 expect(pumpEventQueue().then((_) { | |
1309 throw 'error'; | |
1310 }), completes); | |
1311 }); | |
1312 | |
1313 test('test 2', () { | |
1314 expect(errors, everyElement(new isInstanceOf<ScheduleError>())); | |
1315 expect(errors.map((e) => e.error), equals(['error'])); | |
1316 }); | |
1317 }, passing: ['test 2']); | |
1318 | |
1319 expectTestsPass("expect(..., completion(...)) with a matching future should " | |
1320 "pass", () { | |
1321 test('test', () { | |
1322 expect(pumpEventQueue().then((_) => 'foo'), completion(equals('foo'))); | |
1323 }); | |
1324 }); | |
1325 | |
1326 expectTestsPass("expect(..., completion(...)) with a non-matching future " | |
1327 "should signal an out-of-band error", () { | |
1328 var errors; | |
1329 test('test 1', () { | |
1330 currentSchedule.onException.schedule(() { | |
1331 errors = currentSchedule.errors; | |
1332 }); | |
1333 | |
1334 expect(pumpEventQueue().then((_) => 'foo'), completion(equals('bar'))); | |
1335 }); | |
1336 | |
1337 test('test 2', () { | |
1338 expect(errors, everyElement(new isInstanceOf<ScheduleError>())); | |
1339 expect(errors.length, equals(1)); | |
1340 expect(errors.first.error, new isInstanceOf<TestFailure>()); | |
1341 }); | |
1342 }, passing: ['test 2']); | |
1343 | |
1344 expectTestsPass("expect(..., completion(...)) with a failing future should " | |
1345 "signal an out-of-band error", () { | |
1346 var errors; | |
1347 test('test 1', () { | |
1348 currentSchedule.onException.schedule(() { | |
1349 errors = currentSchedule.errors; | |
1350 }); | |
1351 | |
1352 expect(pumpEventQueue().then((_) { | |
1353 throw 'error'; | |
1354 }), completion(equals('bar'))); | |
1355 }); | |
1356 | |
1357 test('test 2', () { | |
1358 expect(errors, everyElement(new isInstanceOf<ScheduleError>())); | |
1359 expect(errors.map((e) => e.error), equals(['error'])); | |
1360 }); | |
1361 }, passing: ['test 2']); | |
1176 } | 1362 } |
OLD | NEW |