// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. // See: https://github.com/dart-lang/sdk/issues/42466 import 'dart:collection'; import 'package:expect/expect.dart'; String? caughtString; a() sync* { yield 3; throw 'Throw from a()'; yield 4; } b() sync* { yield 2; yield* a(); yield 5; } c() sync* { try { yield 1; yield* b(); yield 6; } catch (e, st) { caughtString = 'Caught in c()'; } } d() sync* { try { yield 0; yield* c(); yield 7; } catch (e, st) { caughtString = 'Caught in d()'; } } main() { List yields = []; try { for (final e in d()) { yields.add(e); } } catch (e, st) { caughtString = 'Caught in main()'; } Expect.equals('Caught in c()', caughtString); Expect.listEquals([0, 1, 2, 3, 7], yields); }