blob: 7320f028a1a7e483d4fd4d33ae5b3a3d491bdaea [file] [log] [blame]
// 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.
import 'package:async_helper/async_minitest.dart';
import 'utils.dart';
void main() {
test('plain', () {
f() async* {
yield 0;
}
return expectList(f(), [0]);
});
test('if-then-else', () {
f(b) async* {
if (b)
yield 0;
else
yield 1;
}
return expectList(f(true), [0]).whenComplete(() {
expectList(f(false), [1]);
});
});
test('block', () {
f() async* {
yield 0;
{
yield 1;
}
yield 2;
}
return expectList(f(), [0, 1, 2]);
});
test('labeled', () {
f() async* {
label1:
yield 0;
}
return expectList(f(), [0]);
});
test('two labels on same line', () {
f() async* {
// DO NOT RUN dartfmt on this file. The labels should be on the same.
// line. Originally VM issue #2238.
label1: label2: yield 0;
}
return expectList(f(), [0]);
});
test('for-loop', () {
f() async* {
for (int i = 0; i < 3; i++) yield i;
}
return expectList(f(), [0, 1, 2]);
});
test('for-in-loop', () {
f() async* {
for (var i in [0, 1, 2]) yield i;
}
return expectList(f(), [0, 1, 2]);
});
test('await for-in-loop', () {
f() async* {
await for (var i in Stream.fromIterable([0, 1, 2])) yield i;
}
return expectList(f(), [0, 1, 2]);
});
test('while-loop', () {
f() async* {
int i = 0;
while (i < 3) yield i++;
}
return expectList(f(), [0, 1, 2]);
});
test('do-while-loop', () {
f() async* {
int i = 0;
do yield i++; while (i < 3);
}
return expectList(f(), [0, 1, 2]);
});
test('try-catch-finally', () {
f() async* {
try {
yield 0;
} catch (e) {
yield 1;
} finally {
yield 2;
}
}
return expectList(f(), [0, 2]);
});
test('try-catch-finally 2', () {
f() async* {
try {
yield throw 0;
} catch (e) {
yield 1;
} finally {
yield 2;
}
}
return expectList(f(), [1, 2]);
});
test('switch-case', () {
f(v) async* {
switch (v) {
case 0:
yield 0;
continue label1;
label1:
case 1:
yield 1;
break;
default:
yield 2;
}
}
return expectList(f(0), [0, 1]).whenComplete(() {
return expectList(f(1), [1]);
}).whenComplete(() {
return expectList(f(2), [2]);
});
});
test('dead-code return', () {
f() async* {
return;
yield 1;
}
return expectList(f(), []);
});
test('dead-code throw', () {
f() async* {
try {
throw 0;
yield 1;
} catch (_) {}
}
return expectList(f(), []);
});
test('dead-code break', () {
f() async* {
while (true) {
break;
yield 1;
}
}
return expectList(f(), []);
});
test('dead-code break 2', () {
f() async* {
label:
{
break label;
yield 1;
}
}
return expectList(f(), []);
});
test('dead-code continue', () {
f() async* {
do {
continue;
yield 1;
} while (false);
}
return expectList(f(), []);
});
}