blob: 8575da4b2c87a38837a2e0ecc000966cad336edf [file] [log] [blame]
// Copyright (c) 2011, 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.
/**
* @assertion A try statement of the form try s1 on−catch1 ... on−catchn; is
* equivalent to the statement try s1 on−catch1 ... on−catchn finally {};
* @description checks that both forms are equivalent as far as execution of
* the on-catch clauses is concerned.
* @author kaigorodov
*/
import '../../../Utils/expect.dart';
class E0 implements Exception {}
class E1 implements Exception {}
class E2 extends E1 {}
class E3 extends E1 {}
int test1(void f()) {
int log = 0;
void append(int digit) { log = log * 10 + digit; }
try {
append(1);
f();
append(2);
} on E2 catch (e) {
append(3);
} on E1 catch (e) {
append(4);
} catch (e) {
append(5);
}
return log;
}
int test2(void f()) {
int log = 0;
void append(int digit) { log = log * 10 + digit; }
try {
append(1);
f();
append(2);
} on E2 catch (e) {
append(3);
} on E1 catch (e) {
append(4);
} catch (e) {
append(5);
}
finally {}
return log;
}
void test(void f()) {
Expect.equals(test1(f), test2(f));
}
void main() {
test(() {});
test(() {throw new E0();});
test(() {throw new E1();});
test(() {throw new E2();});
test(() {throw new E3();});
test(() {throw 1;});
}