// 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; }