mirror of
https://github.com/dart-lang/sdk
synced 2024-09-20 07:41:29 +00:00
33ee69b3e4
The test change of '.nooooo()' -> '.field' mitigates a bunch of status file changes that would be required. Since this is an await, and not a strong mode/ ddc/ resolution test, this test was modified in this way. Change-Id: I54bb9ff51c2e86dd61eb41fdfc19c93bbdf22f7a Reviewed-on: https://dart-review.googlesource.com/4142 Commit-Queue: Jaime Wren <jwren@google.com> Reviewed-by: Janice Collins <jcollins@google.com>
237 lines
4.4 KiB
Dart
237 lines
4.4 KiB
Dart
// Copyright (c) 2014, 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.
|
|
|
|
// VMOptions=--optimization-counter-threshold=5
|
|
|
|
import 'package:expect/expect.dart';
|
|
import "package:async_helper/async_helper.dart";
|
|
|
|
import 'dart:async';
|
|
|
|
// It does not matter where a future is generated.
|
|
bar(p) async => p;
|
|
baz(p) => new Future(() => p);
|
|
|
|
foo() async {
|
|
var b = 0;
|
|
for (int i = 0; i < 10; i++) {
|
|
b += (await bar(1)) + (await baz(2));
|
|
}
|
|
return b;
|
|
}
|
|
|
|
faa() async => (await bar('faa')).length;
|
|
|
|
quaz(p) async {
|
|
var x = 0;
|
|
try {
|
|
for (var j = 0; j < 10; j++) {
|
|
x += await baz(j);
|
|
}
|
|
return x;
|
|
} finally {
|
|
Expect.equals(x, 45);
|
|
return p;
|
|
}
|
|
}
|
|
|
|
quazz() async {
|
|
var x = 0;
|
|
try {
|
|
try {
|
|
x = await bar(1);
|
|
throw x;
|
|
} catch (e1) {
|
|
var y = await baz(e1 + 1);
|
|
throw y;
|
|
}
|
|
} catch (e2) {
|
|
return e2;
|
|
}
|
|
}
|
|
|
|
nesting() async {
|
|
try {
|
|
try {
|
|
var x = 1;
|
|
var y = () async {
|
|
try {
|
|
var z = (await bar(3)) + x;
|
|
throw z;
|
|
} catch (e1) {
|
|
return e1;
|
|
}
|
|
};
|
|
var a = await y();
|
|
throw a;
|
|
} catch (e2) {
|
|
throw e2 + 1;
|
|
}
|
|
} catch (e3) {
|
|
return e3;
|
|
}
|
|
}
|
|
|
|
awaitAsUnary(a, b) async {
|
|
return await a + await b;
|
|
}
|
|
|
|
awaitIf(p) async {
|
|
if (p < (await bar(5))) {
|
|
return "p<5";
|
|
} else {
|
|
return "p>=5";
|
|
}
|
|
}
|
|
|
|
awaitNestedIf(p, q) async {
|
|
if (p == (await bar(5))) {
|
|
if (q < (await bar(7))) {
|
|
return "q<7";
|
|
} else {
|
|
return "q>=7";
|
|
}
|
|
} else {
|
|
return "p!=5";
|
|
}
|
|
return "!";
|
|
}
|
|
|
|
awaitElseIf(p) async {
|
|
if (p > (await bar(5))) {
|
|
return "p>5";
|
|
} else if (p < (await bar(5))) {
|
|
return "p<5";
|
|
} else {
|
|
return "p==5";
|
|
}
|
|
return "!";
|
|
}
|
|
|
|
awaitReturn() async {
|
|
return await bar(17);
|
|
}
|
|
|
|
awaitSwitch() async {
|
|
switch (await bar(3)) {
|
|
case 1:
|
|
return 1;
|
|
break;
|
|
case 3:
|
|
return 3;
|
|
break;
|
|
default:
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
awaitNestedWhile(int i, int j) async {
|
|
int savedJ = j;
|
|
var decI = () async {
|
|
return i--;
|
|
};
|
|
var decJ = () async {
|
|
return j--;
|
|
};
|
|
var k = 0;
|
|
while ((await decI()) > 0) {
|
|
j = savedJ;
|
|
while (0 < (await decJ())) {
|
|
k++;
|
|
}
|
|
}
|
|
return k;
|
|
}
|
|
|
|
awaitNestedDoWhile(int i, int j) async {
|
|
int savedJ = j;
|
|
var decI = () async {
|
|
return i--;
|
|
};
|
|
var decJ = () async {
|
|
return j--;
|
|
};
|
|
var k = 0;
|
|
do {
|
|
do {
|
|
k++;
|
|
} while (0 < (await decI()));
|
|
} while ((await decJ()) > 0);
|
|
return k;
|
|
}
|
|
|
|
awaitFor() async {
|
|
var asyncInc = (p) async => p + 1;
|
|
var k = 0;
|
|
for (int j = (await bar(0)), i = (await bar(1));
|
|
j < (await bar(5));
|
|
j = (await asyncInc(j)), i = (await asyncInc(i))) {
|
|
k += i;
|
|
k += j;
|
|
}
|
|
return k;
|
|
}
|
|
|
|
awaitForIn() async {
|
|
var list = ['a', 'b', 'c'];
|
|
var k = '';
|
|
for (var c in (await bar(list))) {
|
|
k += c;
|
|
}
|
|
return k;
|
|
}
|
|
|
|
test() async {
|
|
var result;
|
|
for (int i = 0; i < 10; i++) {
|
|
result = await foo();
|
|
Expect.equals(30, result);
|
|
result = await faa();
|
|
Expect.equals(3, result);
|
|
result = await quaz(17);
|
|
Expect.equals(17, result);
|
|
result = await quazz();
|
|
Expect.equals(2, result);
|
|
result = await nesting();
|
|
Expect.equals(5, result);
|
|
result = await awaitIf(3);
|
|
Expect.equals("p<5", result);
|
|
result = await awaitIf(5);
|
|
Expect.equals("p>=5", result);
|
|
result = await awaitNestedIf(5, 3);
|
|
Expect.equals("q<7", result);
|
|
result = await awaitNestedIf(5, 8);
|
|
Expect.equals("q>=7", result);
|
|
result = await awaitNestedIf(3, 8);
|
|
Expect.equals("p!=5", result);
|
|
result = await awaitReturn();
|
|
Expect.equals(17, result);
|
|
result = await awaitSwitch();
|
|
Expect.equals(3, result);
|
|
result = await awaitElseIf(6);
|
|
Expect.equals("p>5", result);
|
|
result = await awaitElseIf(4);
|
|
Expect.equals("p<5", result);
|
|
result = await awaitElseIf(5);
|
|
Expect.equals("p==5", result);
|
|
result = await awaitNestedWhile(5, 3);
|
|
Expect.equals(15, result);
|
|
result = await awaitNestedWhile(4, 6);
|
|
Expect.equals(24, result);
|
|
result = await awaitAsUnary(bar(1), bar(2));
|
|
Expect.equals(3, result);
|
|
result = await awaitFor();
|
|
Expect.equals(25, result);
|
|
result = await awaitForIn();
|
|
Expect.equals('abc', result);
|
|
}
|
|
}
|
|
|
|
main() {
|
|
asyncStart();
|
|
test().then((_) {
|
|
asyncEnd();
|
|
});
|
|
}
|