blob: d3f8c6bf100d0ce8bf49c102ac757dad76fe9cf7 [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:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
import 'context_collection_resolution.dart';
main() {
defineReflectiveSuite(() {
defineReflectiveTests(TryStatementTest);
defineReflectiveTests(TryStatementWithNullSafetyTest);
});
}
@reflectiveTest
class TryStatementTest extends PubPackageResolutionTest {
test_catch_withoutType() async {
await assertNoErrorsInCode(r'''
main() {
try {} catch (e, st) {
st;
}
}
''');
var e = findElement.localVar('e');
expect(e.isFinal, isTrue);
assertType(
e.type,
typeStringByNullability(nullable: 'Object', legacy: 'dynamic'),
);
var st = findElement.localVar('st');
expect(st.isFinal, isTrue);
assertType(st.type, 'StackTrace');
var node = findNode.catchClause('catch');
expect(node.exceptionParameter.staticElement, e);
expect(node.stackTraceParameter.staticElement, st);
}
test_catch_withType() async {
await assertNoErrorsInCode(r'''
main() {
try {} on int catch (e, st) {
st;
}
}
''');
var e = findElement.localVar('e');
expect(e.isFinal, isTrue);
assertType(e.type, 'int');
var st = findElement.localVar('st');
expect(st.isFinal, isTrue);
assertType(st.type, 'StackTrace');
var node = findNode.catchClause('catch');
expect(node.exceptionParameter.staticElement, e);
expect(node.stackTraceParameter.staticElement, st);
}
}
@reflectiveTest
class TryStatementWithNullSafetyTest extends TryStatementTest
with WithNullSafetyMixin {}