| // 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. |
| |
| /// Variables declared by a pattern are in scope in the guard. |
| import "package:expect/expect.dart"; |
| |
| var a = 'outer'; |
| |
| void main() { |
| testSwitchStatement(); |
| testSwitchExpression(); |
| testIfCaseStatement(); |
| testIfCaseElement(); |
| } |
| |
| void testSwitchStatement() { |
| switch ('value') { |
| case var a when _guard(a): |
| break; |
| } |
| |
| _expectGuard('value'); |
| } |
| |
| void testSwitchExpression() { |
| (switch ('value') { var a when _guard(a) => 'body', _ => 'other' }); |
| |
| _expectGuard('value'); |
| } |
| |
| void testIfCaseStatement() { |
| if ('value' case var a when _guard(a)) {} |
| |
| _expectGuard('value'); |
| } |
| |
| void testIfCaseElement() { |
| var list = [if ('value' case var a when _guard(a)) 'element']; |
| |
| _expectGuard('value'); |
| } |
| |
| String _guardArg = ''; |
| |
| bool _guard(String arg) { |
| _guardArg = arg; |
| return true; |
| } |
| |
| void _expectGuard(String expected) { |
| Expect.equals(expected, _guardArg); |
| _guardArg = ''; |
| } |