blob: 2a6b9fb7f633ecbf1c2c36e5fb0360e9563833f9 [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;});
}