Add undefined identifier test for for loops
Change-Id: I590a76525c8f50b28dd3a4a4be448806e4b83027
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/97264
Commit-Queue: Mike Fairhurst <mfairhurst@google.com>
Auto-Submit: Mike Fairhurst <mfairhurst@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analyzer/test/src/diagnostics/test_all.dart b/pkg/analyzer/test/src/diagnostics/test_all.dart
index 1cabeb9..1383247 100644
--- a/pkg/analyzer/test/src/diagnostics/test_all.dart
+++ b/pkg/analyzer/test/src/diagnostics/test_all.dart
@@ -63,6 +63,7 @@
import 'unchecked_use_of_nullable_value_test.dart'
as unchecked_use_of_nullable_value;
import 'undefined_getter_test.dart' as undefined_getter;
+import 'undefined_identifier_test.dart' as undefined_identifier;
import 'undefined_hidden_name_test.dart' as undefined_hidden_name;
import 'undefined_operator_test.dart' as undefined_operator;
import 'undefined_prefixed_name_test.dart' as undefined_prefixed_name;
@@ -133,6 +134,7 @@
type_check_is_null.main();
unchecked_use_of_nullable_value.main();
undefined_getter.main();
+ undefined_identifier.main();
undefined_hidden_name.main();
undefined_operator.main();
undefined_prefixed_name.main();
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_identifier_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_identifier_test.dart
new file mode 100644
index 0000000..2df536e
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/undefined_identifier_test.dart
@@ -0,0 +1,63 @@
+// Copyright (c) 2019, 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:analyzer/src/dart/analysis/experiments.dart';
+import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/generated/engine.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/driver_resolution.dart';
+
+main() {
+ defineReflectiveSuite(() {
+ defineReflectiveTests(UndefinedIdentifierTest);
+ defineReflectiveTests(UndefinedIdentifierWithControlFlowCollectionsTest);
+ });
+}
+
+@reflectiveTest
+class UndefinedIdentifierTest extends DriverResolutionTest {
+ test_forStatement_inBody() async {
+ await assertNoErrorsInCode('''
+f() {
+ for (int x in []) {
+ x;
+ }
+}
+''');
+ }
+
+ test_forStatement_outsideBody() async {
+ await assertErrorsInCode('''
+f() {
+ for (int x in []) {}
+ x;
+}
+''', [StaticWarningCode.UNDEFINED_IDENTIFIER]);
+ }
+}
+
+@reflectiveTest
+class UndefinedIdentifierWithControlFlowCollectionsTest
+ extends DriverResolutionTest {
+ @override
+ AnalysisOptionsImpl get analysisOptions => AnalysisOptionsImpl()
+ ..enabledExperiments = [EnableString.control_flow_collections];
+
+ test_forElement_inList_insideElement() async {
+ await assertNoErrorsInCode('''
+f(Object x) {
+ return [for(int x in []) x, null];
+}
+''');
+ }
+
+ test_forElement_inList_outsideElement() async {
+ await assertErrorsInCode('''
+f() {
+ return [for (int x in []) null, x];
+}
+''', [StaticWarningCode.UNDEFINED_IDENTIFIER]);
+ }
+}