blob: 91ccf58d259f9090c061f6fac3e76c7f40a13813 [file] [log] [blame]
// Copyright (c) 2016, 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';
testSimpleBreak() {
var x = 1;
while (true) {
try {
x++;
break;
} finally {
x++;
break;
}
}
return x;
}
testReturnFinally() {
try {
return 1;
} finally {
return 42;
}
}
testNestedReturnFinally() {
try {
try {
return 1;
} finally {
return 2;
}
} finally {
return 42;
}
}
testReturnInsideLoop() {
while (true) {
try {
print("hello");
} finally {
return 42;
}
}
}
testStopContinueInsideLoop() {
while (true) {
try {
continue;
} finally {
return 42;
}
}
}
testStopBreakInsideLoop() {
var foo = 1;
while (true) {
try {
if (foo == 1) {
// 1st iteration we break.
break;
} else if (foo == 2) {
// 2nd iteration we return.
return 42;
}
} finally {
// 1st iteration we overrwrite break with continue.
if (foo == 1) {
foo++;
continue;
} else {
// Let return work
}
}
}
return foo;
}
testStopBreakInsideLoop2() {
var foo = 1;
while (true) {
try {
if (foo == 1) {
// 1st iteration we break.
break;
} else if (foo == 2) {
// 2nd iteration we return.
return -1;
}
} finally {
// 1st iteration we overrwrite break with continue.
if (foo == 1) {
foo++;
continue;
} else {
// 2nd iteration we overrwrite return with break.
foo = 42;
break;
}
}
}
return foo;
}
testStopContinueInsideSwitch() {
var foo = 1;
switch (foo) {
jump5:
case 5:
return -1;
case 1:
try {
continue jump5;
} finally {
return 42;
}
}
}
testStopContinueInsideSwitch2() {
var foo = 1;
switch (foo) {
jump5:
case 5:
return -1;
jump42:
case 5:
return 42;
case 1:
try {
continue jump5;
} finally {
continue jump42;
}
}
}
testNestedFinally() {
var events = '';
try {
try {
events = '$events|start';
} finally {
events = '$events|start-catch';
}
try {
try {
return;
} finally {
events = '$events|inner';
throw 0;
}
} finally {
events = '$events|middle';
}
} catch (e) {
events = '$events|outer-catch';
} finally {
events = '$events|outer-finally';
}
Expect.equals(
events, '|start|start-catch|inner|middle|outer-catch|outer-finally');
}
main() {
Expect.isTrue(testSimpleBreak() == 3);
Expect.isTrue(testReturnFinally() == 42);
Expect.isTrue(testNestedReturnFinally() == 42);
Expect.isTrue(testReturnInsideLoop() == 42);
Expect.isTrue(testStopContinueInsideLoop() == 42);
Expect.isTrue(testStopBreakInsideLoop() == 42);
Expect.isTrue(testStopBreakInsideLoop2() == 42);
Expect.isTrue(testStopContinueInsideLoop() == 42);
Expect.isTrue(testStopContinueInsideSwitch() == 42);
Expect.isTrue(testStopContinueInsideSwitch2() == 42);
testNestedFinally();
}