| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file | |
| 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. | |
| 4 | |
| 5 import 'package:unittest/unittest.dart'; | |
| 6 | |
| 7 foo3() async => throw "foo"; | |
| 8 bar3() async => throw "bar"; | |
| 9 | |
| 10 foo2() async => foo3(); | |
| 11 bar2() async => bar3(); | |
| 12 | |
| 13 foo() async => foo2(); | |
| 14 bar() async => bar2(); | |
| 15 | |
| 16 test1() async { | |
| 17 // test1 -> foo -> foo2 -> foo3 | |
| 18 // test1 -> bar -> bar2 -> bar3 | |
| 19 // These run interleaved, check their stack traces don't become mixed. | |
| 20 var a = foo(); | |
| 21 var b = bar(); | |
| 22 | |
| 23 try { | |
| 24 await a; | |
| 25 } catch(e, st) { | |
| 26 // st has foo,2,3 and not bar,2,3. | |
| 27 expect(st.toString(), stringContainsInOrder([ | |
| 28 'foo3', | |
| 29 '<asynchronous suspension>', | |
| 30 'foo2', | |
| 31 '<asynchronous suspension>', | |
| 32 'foo', | |
| 33 '<asynchronous suspension>', | |
| 34 'test1', | |
| 35 ])); | |
| 36 expect(st.toString().contains('bar'), isFalse); | |
| 37 } | |
| 38 | |
| 39 try { | |
| 40 await b; | |
| 41 } catch(e, st) { | |
| 42 // st has bar,2,3 but not foo,2,3 | |
| 43 expect(st.toString(), stringContainsInOrder([ | |
| 44 'bar3', | |
| 45 '<asynchronous suspension>', | |
| 46 'bar2', | |
| 47 '<asynchronous suspension>', | |
| 48 'bar', | |
| 49 '<asynchronous suspension>', | |
| 50 'test1', | |
| 51 ])); | |
| 52 expect(st.toString().contains('foo'), isFalse); | |
| 53 } | |
| 54 } | |
| 55 | |
| 56 test2() async { | |
| 57 // test2 -> foo -> foo2 -> foo3 | |
| 58 // test2 -> bar -> bar2 -> bar3 | |
| 59 // These run sequentially, check the former stack trace didn't get linked to | |
| 60 // from the latter stack trace. | |
| 61 | |
| 62 try { | |
| 63 await foo(); | |
| 64 } catch(e, st) { | |
| 65 // st has foo,2,3 but not bar,2,3 | |
| 66 expect(st.toString(), stringContainsInOrder([ | |
| 67 'foo3', | |
| 68 '<asynchronous suspension>', | |
| 69 'foo2', | |
| 70 '<asynchronous suspension>', | |
| 71 'foo', | |
| 72 '<asynchronous suspension>', | |
| 73 'test2', | |
| 74 ])); | |
| 75 expect(st.toString().contains('bar'), isFalse); | |
| 76 } | |
| 77 | |
| 78 try { | |
| 79 await bar(); | |
| 80 } catch(e, st) { | |
| 81 // st has bar,2,3 but not foo,2,3 | |
| 82 expect(st.toString(), stringContainsInOrder([ | |
| 83 'bar3', | |
| 84 '<asynchronous suspension>', | |
| 85 'bar2', | |
| 86 '<asynchronous suspension>', | |
| 87 'bar', | |
| 88 '<asynchronous suspension>', | |
| 89 'test2', | |
| 90 ])); | |
| 91 expect(st.toString().contains('foo'), isFalse); | |
| 92 } | |
| 93 } | |
| 94 | |
| 95 main() async { | |
| 96 await test1(); | |
| 97 await test2(); | |
| 98 } | |
| OLD | NEW |