Issue 50588. Test that EQUAL_KEYS_IN_MAP_PATTERN is reported for double(s).
Bug: https://github.com/dart-lang/sdk/issues/50588
Change-Id: I952d0ec59045c68f63a5f028083cf17c1b633f3f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/286522
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Samuel Rawlins <srawlins@google.com>
diff --git a/pkg/analyzer/test/src/diagnostics/equal_keys_in_map_pattern_test.dart b/pkg/analyzer/test/src/diagnostics/equal_keys_in_map_pattern_test.dart
index 6e46811..04f60a7 100644
--- a/pkg/analyzer/test/src/diagnostics/equal_keys_in_map_pattern_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/equal_keys_in_map_pattern_test.dart
@@ -15,7 +15,29 @@
@reflectiveTest
class EqualKeysInMapPatternTest extends PubPackageResolutionTest {
- test_identical_primitiveEqual_identifier() async {
+ test_identical_double() async {
+ await assertErrorsInCode('''
+void f(x) {
+ if (x case {3.14: 1, 3.14: 2}) {}
+}
+''', [
+ error(CompileTimeErrorCode.EQUAL_KEYS_IN_MAP_PATTERN, 35, 4,
+ contextMessages: [message('/home/test/lib/test.dart', 26, 4)]),
+ ]);
+ }
+
+ test_identical_int() async {
+ await assertErrorsInCode('''
+void f(x) {
+ if (x case {0: 1, 0: 2}) {}
+}
+''', [
+ error(CompileTimeErrorCode.EQUAL_KEYS_IN_MAP_PATTERN, 32, 1,
+ contextMessages: [message('/home/test/lib/test.dart', 26, 1)]),
+ ]);
+ }
+
+ test_identical_int_viaIdentifier() async {
await assertErrorsInCode('''
const a = 0;
const b = 0;
@@ -29,18 +51,23 @@
]);
}
- test_identical_primitiveEqual_integerLiteral() async {
- await assertErrorsInCode('''
+ test_notIdentical_double() async {
+ await assertNoErrorsInCode('''
void f(x) {
- if (x case {0: 1, 0: 2}) {}
+ if (x case {3.14: 1, 2.71: 2}) {}
}
-''', [
- error(CompileTimeErrorCode.EQUAL_KEYS_IN_MAP_PATTERN, 32, 1,
- contextMessages: [message('/home/test/lib/test.dart', 26, 1)]),
- ]);
+''');
}
- test_notIdentical_notPrimitiveEqual_alwaysFalse() async {
+ test_notIdentical_int() async {
+ await assertNoErrorsInCode('''
+void f(x) {
+ if (x case {0: 1, 2: 3}) {}
+}
+''');
+ }
+
+ test_notIdentical_userClass() async {
await assertNoErrorsInCode('''
void f(x) {
if (x case {const A(0): 1, const A(2): 3}) {}
@@ -54,32 +81,23 @@
''');
}
- test_notIdentical_notPrimitiveEqual_alwaysTrue() async {
+ test_recordType_notPrimitiveEqual_named() async {
await assertNoErrorsInCode('''
void f(x) {
- if (x case {const A(0): 1, const A(2): 3}) {}
+ if (x case {(a: const A()): 1, (a: const A()): 2}) {}
}
class A {
- final int field;
- const A(this.field);
+ const A();
bool operator ==(other) => true;
}
''');
}
- test_notIdentical_primitiveEqual_integerLiteral() async {
+ test_recordType_notPrimitiveEqual_positional() async {
await assertNoErrorsInCode('''
void f(x) {
- if (x case {0: 1, 2: 3}) {}
-}
-''');
- }
-
- test_recordType_notPrimitiveEqual_named() async {
- await assertNoErrorsInCode('''
-void f(x) {
- if (x case {(a: const A()): 1, (a: const A()): 2}) {}
+ if (x case {(0, const A()): 1, (0, const A()): 2}) {}
}
class A {