| Index: pkg/analyzer/test/generated/resolver_test.dart
|
| diff --git a/pkg/analyzer/test/generated/resolver_test.dart b/pkg/analyzer/test/generated/resolver_test.dart
|
| index 9c305940ab13b5c77efe722fc726d5cee48f324c..6463a7bd24ad53f3825021b6dca2585fc3d6a10d 100644
|
| --- a/pkg/analyzer/test/generated/resolver_test.dart
|
| +++ b/pkg/analyzer/test/generated/resolver_test.dart
|
| @@ -8054,6 +8054,17 @@ class ResolverTestCase extends EngineTestCase {
|
| }
|
|
|
| /**
|
| + * @param code the code that iterates using variable "v". We check that
|
| + * "v" has expected static and propagated type.
|
| + */
|
| + void _assertPropagatedIterationType(String code, DartType expectedStaticType,
|
| + DartType expectedPropagatedType) {
|
| + SimpleIdentifier identifier = _findMarkedIdentifier(code, "v in ");
|
| + expect(identifier.staticType, same(expectedStaticType));
|
| + expect(identifier.propagatedType, same(expectedPropagatedType));
|
| + }
|
| +
|
| + /**
|
| * @param code the code that assigns the value to the variable "v", no matter how. We check that
|
| * "v" has expected static and propagated type.
|
| */
|
| @@ -13738,6 +13749,72 @@ main() {
|
| _assertTypeOfMarkedExpression(
|
| code, typeProvider.dynamicType, typeProvider.intType);
|
| }
|
| +
|
| + void test_foreachInference_var() {
|
| + String code = r'''
|
| +main() {
|
| + var list = <int>[];
|
| + for (var v in list) {
|
| + v; // marker
|
| + }
|
| +}''';
|
| + _assertPropagatedIterationType(code, typeProvider.intType, null);
|
| + _assertTypeOfMarkedExpression(code, typeProvider.intType, null);
|
| + }
|
| +
|
| + void test_foreachInference_var_iterable() {
|
| + String code = r'''
|
| +main() {
|
| + Iterable<int> list = <int>[];
|
| + for (var v in list) {
|
| + v; // marker
|
| + }
|
| +}''';
|
| + _assertPropagatedIterationType(code, typeProvider.intType, null);
|
| + _assertTypeOfMarkedExpression(code, typeProvider.intType, null);
|
| + }
|
| +
|
| + void test_foreachInference_var_stream() {
|
| + String code = r'''
|
| +import 'dart:async';
|
| +main() async {
|
| + Stream<int> stream = null;
|
| + await for (var v in stream) {
|
| + v; // marker
|
| + }
|
| +}''';
|
| + _assertPropagatedIterationType(code, typeProvider.intType, null);
|
| + _assertTypeOfMarkedExpression(code, typeProvider.intType, null);
|
| + }
|
| +
|
| + void test_foreachInference_dynamic_disabled() {
|
| + String code = r'''
|
| +main() {
|
| + var list = <int>[];
|
| + for (dynamic v in list) {
|
| + v; // marker
|
| + }
|
| +}''';
|
| + _assertPropagatedIterationType(
|
| + code, typeProvider.dynamicType, typeProvider.intType);
|
| + _assertTypeOfMarkedExpression(
|
| + code, typeProvider.dynamicType, typeProvider.intType);
|
| + }
|
| +
|
| + void test_foreachInference_reusedVar_disabled() {
|
| + String code = r'''
|
| +main() {
|
| + var list = <int>[];
|
| + var v;
|
| + for (v in list) {
|
| + v; // marker
|
| + }
|
| +}''';
|
| + _assertPropagatedIterationType(
|
| + code, typeProvider.dynamicType, typeProvider.intType);
|
| + _assertTypeOfMarkedExpression(
|
| + code, typeProvider.dynamicType, typeProvider.intType);
|
| + }
|
| }
|
|
|
| @reflectiveTest
|
|
|