Files
sdk/tests/language/patterns/switch_case_scope_test.dart
Robert Nystrom dbaf041ae4 Format tests/language/p*.
Change-Id: Ia3238c1781422ec5eb7a219a5cf8af645a4c5876
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/409000
Commit-Queue: Bob Nystrom <rnystrom@google.com>
Reviewed-by: Lasse Nielsen <lrn@google.com>
Auto-Submit: Bob Nystrom <rnystrom@google.com>
2025-02-11 15:31:25 -08:00

73 lines
1.9 KiB
Dart

// Copyright (c) 2022, 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.
import "package:expect/expect.dart";
main() {
switchStatementBodyScope();
ifCaseThenScope();
unsharedPatternVariableShadows();
sharedPatternVariableShadows(0);
sharedPatternVariableShadows(1);
}
var topLevel = 'top-level';
/// Pattern variables are in a scope surrounding the body scope.
void switchStatementBodyScope() {
switch ('pattern') {
case var x:
// Not a collision:
var x = 'local';
Expect.equals('local', x);
default: // ignore: unreachable_switch_default
Expect.fail('Should not reach this.');
}
}
/// Pattern variables are in a scope surrounding the if-case then scope.
void ifCaseThenScope() {
// Not an error: Then statement is in separate scope.
if ('pattern' case var x) var x = 'local';
}
/// Unshared variables shadow variables in outer scopes.
void unsharedPatternVariableShadows() {
var local = 'local';
switch (('pat', 'tern')) {
case (String topLevel, String local):
Expect.equals('pat tern', '$topLevel $local');
// Assign to pattern variable.
local = 'assigned';
default: // ignore: unreachable_switch_default
Expect.fail('Should not reach this.');
}
// Outer local is not assigned.
Expect.equals('local', local);
}
/// Shared variables shadow variables in outer scopes.
void sharedPatternVariableShadows(Object value) {
var local = 'local';
switch (('pat', 'tern')) {
case (String topLevel, String local) when value == 0:
case (String topLevel, String local) when value == 1:
Expect.equals('pat tern', '$topLevel $local');
// Assign to pattern variable.
local = 'assigned';
default:
Expect.fail('Should not reach this.');
}
// Outer local is not assigned.
Expect.equals('local', local);
}