| // Copyright (c) 2023, 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. |
| |
| /// Tests that guarded patterns of the form `identifier when !condition` can be |
| /// properly parsed. See https://github.com/dart-lang/sdk/issues/52199. |
| |
| import 'package:expect/expect.dart'; |
| |
| import 'identifier_when_not_test.dart' as self; |
| |
| main() { |
| { |
| // Switch statement: const in scope |
| switch (1) { |
| case one when !false: |
| break; |
| default: |
| Expect.fail('Should have matched'); |
| } |
| } |
| |
| { |
| // Switch statement: prefixed identifier |
| switch (1) { |
| case self.one when !false: |
| break; |
| default: |
| Expect.fail('Should have matched'); |
| } |
| } |
| |
| { |
| // Switch statement: static const |
| switch (1) { |
| case Values.one when !false: |
| break; |
| default: |
| Expect.fail('Should have matched'); |
| } |
| } |
| |
| { |
| // Switch statement: prefixed static const |
| switch (1) { |
| case self.Values.one when !false: |
| break; |
| default: |
| Expect.fail('Should have matched'); |
| } |
| } |
| |
| { |
| // Switch expression: const in scope |
| (switch (1) { one when !false => 0, _ => throw 'Should have matched' }); |
| } |
| |
| { |
| // Switch expression: prefixed identifier |
| (switch (1) { |
| self.one when !false => 0, |
| _ => throw 'Should have matched' |
| }); |
| } |
| |
| { |
| // Switch expression: static const |
| (switch (1) { |
| Values.one when !false => 0, |
| _ => throw 'Should have matched' |
| }); |
| } |
| |
| { |
| // Switch expression: prefixed static const |
| (switch (1) { |
| self.Values.one when !false => 0, |
| _ => throw 'Should have matched' |
| }); |
| } |
| |
| { |
| // If-case statement: const in scope |
| if (1 case one when !false) { |
| } else { |
| Expect.fail('Should have matched'); |
| } |
| } |
| |
| { |
| // If-case statement: prefixed identifier |
| if (1 case self.one when !false) { |
| } else { |
| Expect.fail('Should have matched'); |
| } |
| } |
| |
| { |
| // If-case statement: static const |
| if (1 case Values.one when !false) { |
| } else { |
| Expect.fail('Should have matched'); |
| } |
| } |
| |
| { |
| // If-case statement: prefixed static const |
| if (1 case self.Values.one when !false) { |
| } else { |
| Expect.fail('Should have matched'); |
| } |
| } |
| |
| { |
| // If-case in list: const in scope |
| Expect.listEquals( |
| [''], [if (1 case one when !false) '' else 'Should have matched']); |
| } |
| |
| { |
| // If-case in list: prefixed identifier |
| Expect.listEquals( |
| [''], [if (1 case self.one when !false) '' else 'Should have matched']); |
| } |
| |
| { |
| // If-case in list: static const |
| Expect.listEquals([''], |
| [if (1 case Values.one when !false) '' else 'Should have matched']); |
| } |
| |
| { |
| // If-case in list: prefixed static const |
| Expect.listEquals([ |
| '' |
| ], [ |
| if (1 case self.Values.one when !false) '' else 'Should have matched' |
| ]); |
| } |
| |
| { |
| // If-case in map: const in scope |
| Expect.mapEquals({'': ''}, |
| {if (1 case one when !false) '': '' else '': 'Should have matched'}); |
| } |
| |
| { |
| // If-case in map: prefixed identifier |
| Expect.mapEquals({ |
| '': '' |
| }, { |
| if (1 case self.one when !false) '': '' else '': 'Should have matched' |
| }); |
| } |
| |
| { |
| // If-case in map: static const |
| Expect.mapEquals({ |
| '': '' |
| }, { |
| if (1 case Values.one when !false) '': '' else '': 'Should have matched' |
| }); |
| } |
| |
| { |
| // If-case in map: prefixed static const |
| Expect.mapEquals({ |
| '': '' |
| }, { |
| if (1 case self.Values.one when !false) |
| '': '' |
| else |
| '': 'Should have matched' |
| }); |
| } |
| |
| { |
| // If-case in set: const in scope |
| Expect.setEquals( |
| {''}, {if (1 case one when !false) '' else 'Should have matched'}); |
| } |
| |
| { |
| // If-case in set: prefixed identifier |
| Expect.setEquals( |
| {''}, {if (1 case self.one when !false) '' else 'Should have matched'}); |
| } |
| |
| { |
| // If-case in set: static const |
| Expect.setEquals({''}, |
| {if (1 case Values.one when !false) '' else 'Should have matched'}); |
| } |
| |
| { |
| // If-case in set: prefixed static const |
| Expect.setEquals({ |
| '' |
| }, { |
| if (1 case self.Values.one when !false) '' else 'Should have matched' |
| }); |
| } |
| } |
| |
| const one = 1; |
| |
| class Values { |
| static const one = 1; |
| } |