Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(92)

Side by Side Diff: tests/language/asyncstar_throw_in_catch_test.dart

Issue 945783002: Dart2js async-await. Propagate stacktraces from futures. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Fix status file Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 import "dart:async"; 5 import "dart:async";
6 import "package:expect/expect.dart"; 6 import "package:expect/expect.dart";
7 import "package:async_helper/async_helper.dart"; 7 import "package:async_helper/async_helper.dart";
8 8
9 class Tracer { 9 class Tracer {
10 final String expected; 10 final String expected;
(...skipping 20 matching lines...) Expand all
31 tracer.trace("a"); 31 tracer.trace("a");
32 await new Future.value(3); 32 await new Future.value(3);
33 tracer.trace("b"); 33 tracer.trace("b");
34 throw "Error"; 34 throw "Error";
35 } catch (e) { 35 } catch (e) {
36 tracer.trace("c"); 36 tracer.trace("c");
37 yield 1; 37 yield 1;
38 tracer.trace("d"); 38 tracer.trace("d");
39 yield 2; 39 yield 2;
40 tracer.trace("e"); 40 tracer.trace("e");
41 await new Future.error("Error2");
42 } finally { 41 } finally {
43 tracer.trace("f"); 42 tracer.trace("f");
44 } 43 }
45 tracer.trace("g"); 44 tracer.trace("g");
46 } 45 }
47 46
47 foo2(Tracer tracer) async* {
48 try {
49 tracer.trace("a");
50 throw "Error";
51 } catch (error) {
52 Expect.equals("Error", error);
53 tracer.trace("b");
54 rethrow;
55 } finally {
56 tracer.trace("c");
57 }
58 }
59
60 foo3(Tracer tracer) async* {
61 try {
62 tracer.trace("a");
63 throw "Error";
64 } catch (error) {
65 Expect.equals("Error", error);
66 tracer.trace("b");
67 rethrow;
68 } finally {
69 tracer.trace("c");
70 yield 1;
71 }
72 }
73
74 runTest(test, expectedTrace, expectedError, shouldCancel) {
75 Tracer tracer = new Tracer(expectedTrace);;
76 Completer done = new Completer();
77 var subscription;
78 subscription = test(tracer).listen((event) async {
79 tracer.trace("Y");
80 if (shouldCancel) {
81 await subscription.cancel();
82 tracer.trace("C");
83 done.complete(null);
84 }
85 }, onError: (error) {
86 Expect.equals(expectedError, error);
87 tracer.trace("X");
88 }, onDone: () {
89 tracer.done();
90 done.complete(null);
91 });
92 return done.future.then((_) => tracer.done());
93 }
94
48 test() async { 95 test() async {
49 Tracer tracer; 96 await runTest(foo1, "abcdYfC", null, true);
floitsch 2015/02/20 12:36:05 This looks a change from a different CL.
sigurdm 2015/02/23 12:41:18 Yes it is - I must have made a mistake during uplo
50 97 await runTest(foo2, "abcX", "Error", false);
51 Completer foo1Done = new Completer(); 98 await runTest(foo3, "abcYX", "Error", false);
52 tracer = new Tracer("abcdf");
53 var subscription;
54 subscription = foo1(tracer).listen((event) async {
55 await subscription.cancel();
56 tracer.done();
57 foo1Done.complete(null);
58 });
59 await foo1Done.future;
60 } 99 }
61 100
62 101
63 void main() { 102 void main() {
64 asyncTest(test); 103 asyncTest(test);
65 } 104 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698