Tests for invalid Map literal type arguments resolution.

R=brianwilkerson@google.com, paulberry@google.com

Change-Id: I4e1e78b9c5497b1399a8a5ca3f600cdbbe86cf23
Reviewed-on: https://dart-review.googlesource.com/65029
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analyzer/test/generated/static_type_warning_code_kernel_test.dart b/pkg/analyzer/test/generated/static_type_warning_code_kernel_test.dart
index 367a85e..408d787 100644
--- a/pkg/analyzer/test/generated/static_type_warning_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/static_type_warning_code_kernel_test.dart
@@ -43,20 +43,6 @@
 
   @override
   @failingTest
-  test_expectedTwoMapTypeArguments_one() async {
-    // Bad state: Found 2 argument types for 1 type arguments
-    await super.test_expectedTwoMapTypeArguments_one();
-  }
-
-  @override
-  @failingTest
-  test_expectedTwoMapTypeArguments_three() async {
-    // Bad state: Found 2 argument types for 3 type arguments
-    await super.test_expectedTwoMapTypeArguments_three();
-  }
-
-  @override
-  @failingTest
   test_illegalAsyncGeneratorReturnType_function_nonStream() async {
     // Expected 1 errors of type StaticTypeWarningCode.ILLEGAL_ASYNC_GENERATOR_RETURN_TYPE, found 0
     await super.test_illegalAsyncGeneratorReturnType_function_nonStream();
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
index 8e06650..fdfdd7c 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
@@ -44,6 +44,8 @@
   FindNode findNode;
   FindElement findElement;
 
+  ClassElement get boolElement => typeProvider.boolType.element;
+
   ClassElement get doubleElement => typeProvider.doubleType.element;
 
   InterfaceType get doubleType => typeProvider.doubleType;
@@ -4724,6 +4726,48 @@
     }
   }
 
+  test_mapLiteral_1() async {
+    addTestFile(r'''
+main() {
+  var v = <int>{};
+}
+''');
+    await resolveTestFile();
+    expect(result.errors, isNotEmpty);
+
+    var literal = findNode.mapLiteral('<int>{}');
+    assertType(literal, 'Map<dynamic, dynamic>');
+
+    var intRef = findNode.simple('int>{}');
+    assertElement(intRef, intElement);
+    assertType(intRef, 'int');
+  }
+
+  test_mapLiteral_3() async {
+    addTestFile(r'''
+main() {
+  var v = <bool, int, double>{};
+}
+''');
+    await resolveTestFile();
+    expect(result.errors, isNotEmpty);
+
+    var literal = findNode.mapLiteral('<bool, int, double>{}');
+    assertType(literal, 'Map<dynamic, dynamic>');
+
+    var boolRef = findNode.simple('bool, ');
+    assertElement(boolRef, boolElement);
+    assertType(boolRef, 'bool');
+
+    var intRef = findNode.simple('int, ');
+    assertElement(intRef, intElement);
+    assertType(intRef, 'int');
+
+    var doubleRef = findNode.simple('double>');
+    assertElement(doubleRef, doubleElement);
+    assertType(doubleRef, 'double');
+  }
+
   test_method_namedParameters() async {
     addTestFile(r'''
 class C {
@@ -8558,6 +8602,10 @@
     return _node(search).getAncestor((n) => n is ListLiteral);
   }
 
+  MapLiteral mapLiteral(String search) {
+    return _node(search).getAncestor((n) => n is MapLiteral);
+  }
+
   MethodInvocation methodInvocation(String search) {
     return _node(search).getAncestor((n) => n is MethodInvocation);
   }
diff --git a/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart b/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
index ebef208..7f3e404 100644
--- a/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
+++ b/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
@@ -4297,16 +4297,6 @@
     message: r"""List literal requires exactly one type argument.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Null> codeListLiteralTypeArgumentMismatch =
-    messageListLiteralTypeArgumentMismatch;
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const MessageCode messageListLiteralTypeArgumentMismatch = const MessageCode(
-    "ListLiteralTypeArgumentMismatch",
-    severity: Severity.errorLegacyWarning,
-    message: r"""Map literal requires two type arguments.""");
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
     Message Function(Uri uri_)> templateLoadLibraryHidesMember = const Template<
         Message Function(Uri uri_)>(
@@ -4390,6 +4380,18 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeMapLiteralTypeArgumentMismatch =
+    messageMapLiteralTypeArgumentMismatch;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageMapLiteralTypeArgumentMismatch = const MessageCode(
+    "MapLiteralTypeArgumentMismatch",
+    analyzerCode: "EXPECTED_TWO_MAP_TYPE_ARGUMENTS",
+    dart2jsCode: "*fatal*",
+    severity: Severity.errorLegacyWarning,
+    message: r"""Map literal requires exactly two type arguments.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeMemberWithSameNameAsClass =
     messageMemberWithSameNameAsClass;
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index 67ea0c0..74a8d46 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -2128,7 +2128,7 @@
     if (typeArguments != null) {
       if (forest.getTypeCount(typeArguments) != 2) {
         addProblem(
-            fasta.messageListLiteralTypeArgumentMismatch,
+            fasta.messageMapLiteralTypeArgumentMismatch,
             offsetForToken(leftBrace),
             lengthOfSpan(leftBrace, leftBrace.endGroup));
       } else {
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status
index 43e7f0b..5d23994 100644
--- a/pkg/front_end/messages.status
+++ b/pkg/front_end/messages.status
@@ -215,9 +215,8 @@
 LibraryDirectiveNotFirst/script2: Fail
 LibraryDirectiveNotFirst/script3: Fail
 ListLiteralTooManyTypeArguments/example: Fail
-ListLiteralTypeArgumentMismatch/analyzerCode: Fail
-ListLiteralTypeArgumentMismatch/example: Fail
 LoadLibraryTakesNoArguments/example: Fail
+MapLiteralTypeArgumentMismatch/example: Fail
 MemberWithSameNameAsClass/analyzerCode: Fail
 MemberWithSameNameAsClass/example: Fail
 MetadataTypeArguments/analyzerCode: Fail
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index 60f4061..ccacf893 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -1223,9 +1223,11 @@
   analyzerCode: EXPECTED_ONE_LIST_TYPE_ARGUMENTS
   dart2jsCode: "*fatal*"
 
-ListLiteralTypeArgumentMismatch:
-  template: "Map literal requires two type arguments."
+MapLiteralTypeArgumentMismatch:
+  template: "Map literal requires exactly two type arguments."
   severity: ERROR_LEGACY_WARNING
+  analyzerCode: EXPECTED_TWO_MAP_TYPE_ARGUMENTS
+  dart2jsCode: "*fatal*"
 
 LoadLibraryTakesNoArguments:
   template: "'loadLibrary' takes no arguments."