| Index: tests/language/regress_26175_test.dart
|
| diff --git a/tests/language/regress_26175_test.dart b/tests/language/regress_26175_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..619afeb01da82b5a5c766b6632e7ceec8fc40a68
|
| --- /dev/null
|
| +++ b/tests/language/regress_26175_test.dart
|
| @@ -0,0 +1,72 @@
|
| +// Copyright (c) 2015, 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.
|
| +
|
| +import "package:expect/expect.dart";
|
| +import "package:async_helper/async_helper.dart";
|
| +
|
| +// Test that local variable reads and writes are sequenced correctly with
|
| +// respect to reads and writes in an awaited Future. See issue 26175.
|
| +
|
| +// Reads are sequenced correctly with respect to writes in a Future.
|
| +Future test1() async {
|
| + var x = 'a';
|
| + f() async => x = 'b';
|
| + Expect.equals('abb', '${x}${await f()}${x}');
|
| +}
|
| +
|
| +// Writes are sequenced correctly with respect to writes in a Future.
|
| +Future test2(ignore) async {
|
| + var x;
|
| + f() async => x = 'b';
|
| + Expect.equals('abb', '${x = 'a'}${await f()}${x}');
|
| +}
|
| +
|
| +// Writes are sequenced correctly with respect to reads in a Future.
|
| +Future test3(ignore) async {
|
| + var x = 'a';
|
| + f() async => x;
|
| + Expect.equals('bbb', '${x = 'b'}${await f()}${x}');
|
| +}
|
| +
|
| +// Repeat the same tests for static variables.
|
| +var cell = 'a';
|
| +
|
| +asyncReadCell() async => cell;
|
| +asyncWriteCell(value) async => cell = value;
|
| +
|
| +Future test4(ignore) async {
|
| + // This test assumes that it can read the initial value of cell.
|
| + Expect.equals('abb', '${cell}${await asyncWriteCell('b')}${cell}');
|
| +}
|
| +
|
| +Future test5(ignore) async {
|
| + Expect.equals('abb', '${cell = 'a'}${await asyncWriteCell('b')}${cell}');
|
| +}
|
| +
|
| +Future test6(ignore) async {
|
| + Expect.equals('bbb', '${cell = 'b'}${await asyncReadCell()}${cell}');
|
| +}
|
| +
|
| +// Test that throwing is sequenced correctly with respect to other effects.
|
| +Future test7(ignore) async {
|
| + cell = 'a';
|
| + try {
|
| + Expect.equals('unreachable',
|
| + '${throw 0}${await asyncWriteCell('b')}${cell}');
|
| + } catch (_) {
|
| + Expect.equals('a', cell);
|
| + }
|
| +}
|
| +
|
| +main() {
|
| + asyncStart();
|
| + test1()
|
| + .then(test2)
|
| + .then(test3)
|
| + .then(test4)
|
| + .then(test5)
|
| + .then(test6)
|
| + .then(test7)
|
| + .then((_) => asyncEnd());
|
| +}
|
|
|