dart-sdk/tests/web/switch_equals_test.dart
Robert Nystrom 56eaffb392 [flip-patterns] Enable "records" and "patterns" experiment flags.
This turns on the flags for these two language features and makes
them generally accessible.

Doing so causes a number of tests to fail, but the failures are
approved and there are filed issues for them. Most of the
failures are minor or only affect code using the new language
features.

This CL:

- Enables the features in experimental_features.yaml.
- Re-generates all of the various files generated from that.
- Makes some analyzer and front end changes that this CL
  inherited from Paul's original CL flipping all of the 3.0
  feature flags. I don't know what these changes are about, but
  I assume they are necessary.
- Pins a couple of tests to 2.19 since they deliberately test
  behavior that is specific to 2.19. (For most test changes, I've
  landed them separately, but there are a couple of stragglers
  in this CL.)

This doesn't enable "class-modifiers" or "sealed-types" and doesn't
include the core lib changes related to those.

TEST=On bots

Change-Id: Id387753772286a958e20a3589a6e983995f2e4a6
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/286344
Auto-Submit: Bob Nystrom <rnystrom@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Bob Nystrom <rnystrom@google.com>
Reviewed-by: Jake Macdonald <jakemac@google.com>
Reviewed-by: Nate Bosch <nbosch@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
2023-03-10 20:02:23 +00:00

52 lines
1.2 KiB
Dart

// Copyright (c) 2018, 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.
// @dart=2.19
class SuperClass {
const SuperClass();
bool operator ==(Object other);
}
class Class extends SuperClass {
const Class();
bool operator ==(Object other);
}
class SubClass extends Class {
const SubClass();
bool operator ==(Object other) => false;
}
main() {
// This test verifies that when overriding `==` it is a compile time error to
// use that class as a key in a switch, but only if the override provides a
// body. However, with NNBD, all of these switches became compile time errors
// so now we cast `null` as `dynamic` to get these first two switches past
// the compiler.
switch (null as dynamic) {
case const SuperClass():
break;
default:
}
switch (null as dynamic) {
case const Class():
break;
default:
}
switch (null as dynamic) {
case const SubClass(): //# 01: compile-time error
break; //# 01: continued
default:
}
switch (null) {
case null:
break;
default:
}
}