[tests] Cascade tests for static member and constructor enum shorthands.

Similar cascade-related tests for testing static member and constructor shorthands.

Bug: https://github.com/dart-lang/sdk/issues/57038
Change-Id: I0c0f5121bbfc60473a1c757ee07462a2047e1fa0
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/401240
Reviewed-by: Erik Ernst <eernst@google.com>
Commit-Queue: Kallen Tu <kallentu@google.com>
diff --git a/tests/language/enum_shorthands/constructor/constructor_cascade_test.dart b/tests/language/enum_shorthands/constructor/constructor_cascade_test.dart
new file mode 100644
index 0000000..13917f6
--- /dev/null
+++ b/tests/language/enum_shorthands/constructor/constructor_cascade_test.dart
@@ -0,0 +1,103 @@
+// Copyright (c) 2024, 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.
+
+// Context type is propagated down in cascades for constructor enum shorthands.
+
+// SharedOptions=--enable-experiment=enum-shorthands
+
+import '../enum_shorthand_helper.dart';
+
+class Cascade {
+  late ConstructorClass ctor;
+  late ConstructorExt ctorExt;
+}
+
+class CascadeCollection {
+  late List<ConstructorClass> ctorList;
+  late Set<ConstructorClass> ctorSet;
+  late Map<ConstructorClass, ConstructorClass> ctorMap;
+  late Map<ConstructorClass, (ConstructorClass, ConstructorClass)> ctorMap2;
+
+  late List<ConstructorExt> ctorExtList;
+  late Set<ConstructorExt> ctorExtSet;
+  late Map<ConstructorExt, ConstructorExt> ctorExtMap;
+  late Map<ConstructorExt, (ConstructorExt, ConstructorExt)> ctorExtMap2;
+}
+
+class CascadeMethod {
+  void ctor(ConstructorClass ctor) => print(ctor);
+  void ctorExt(ConstructorExt ctor) => print(ctor);
+}
+
+void main() {
+  Cascade()
+    ..ctor = .new(1)
+    ..ctor = .regular(1)
+    ..ctor = .named(x: 1)
+    ..ctor = .optional(1)
+    ..ctorExt = .new(1)
+    ..ctorExt = .regular(1)
+    ..ctorExt = .named(x: 1)
+    ..ctorExt = .optional(1);
+
+  dynamic mayBeNull = null;
+  Cascade()
+    ..ctor = mayBeNull ?? .new(1)
+    ..ctor = mayBeNull ?? .regular(1)
+    ..ctor = mayBeNull ?? .named(x: 1)
+    ..ctor = mayBeNull ?? .optional(1)
+    ..ctorExt = mayBeNull ?? .new(1)
+    ..ctorExt = mayBeNull ?? .regular(1)
+    ..ctorExt = mayBeNull ?? .named(x: 1)
+    ..ctorExt = mayBeNull ?? .optional(1);
+
+  CascadeCollection()
+    ..ctorList = [.new(1), .regular(1), .named(x: 1), .optional(1)]
+    ..ctorSet = {.new(1), .regular(1), .named(x: 1), .optional(1)}
+    ..ctorMap = {
+      .new(1): .new(1),
+      .regular(1): .regular(1),
+      .named(x: 1): .named(x: 1),
+      .optional(1): .optional(1),
+    }
+    ..ctorMap2 = {
+      .new(1): (.new(1), .new(1)),
+      .regular(1): (.regular(1), .regular(1)),
+      .named(x: 1): (.named(x: 1), .named(x: 1)),
+      .optional(1): (.optional(1), .optional(1)),
+    }
+    ..ctorExtList = [.new(1), .regular(1), .named(x: 1), .optional(1)]
+    ..ctorExtSet = {.new(1), .regular(1), .named(x: 1), .optional(1)}
+    ..ctorExtMap = {
+      .new(1): .new(1),
+      .regular(1): .regular(1),
+      .named(x: 1): .named(x: 1),
+      .optional(1): .optional(1),
+    }
+    ..ctorExtMap2 = {
+      .new(1): (.new(1), .new(1)),
+      .regular(1): (.regular(1), .regular(1)),
+      .named(x: 1): (.named(x: 1), .named(x: 1)),
+      .optional(1): (.optional(1), .optional(1)),
+    };
+
+  CascadeMethod()
+    ..ctor(.new(1))
+    ..ctor(.regular(1))
+    ..ctor(.named(x: 1))
+    ..ctor(.optional(1))
+    ..ctorExt(.new(1))
+    ..ctorExt(.regular(1))
+    ..ctorExt(.named(x: 1))
+    ..ctorExt(.optional(1));
+
+  ConstructorClass ctor = .new(1)..toString();
+  ConstructorClass ctorRegular = .regular(1)..toString();
+  ConstructorClass ctorNamed = .named(x: 1)..toString();
+  ConstructorClass ctorOptional = .optional(1)..toString();
+  ConstructorExt ctorExt = .new(1)..toString();
+  ConstructorExt ctorExtRegular = .regular(1)..toString();
+  ConstructorExt ctorExtNamed = .named(x: 1)..toString();
+  ConstructorExt ctorExtOptional = .optional(1)..toString();
+}
diff --git a/tests/language/enum_shorthands/member/static_method_cascade_test.dart b/tests/language/enum_shorthands/member/static_method_cascade_test.dart
new file mode 100644
index 0000000..930a180
--- /dev/null
+++ b/tests/language/enum_shorthands/member/static_method_cascade_test.dart
@@ -0,0 +1,92 @@
+// Copyright (c) 2024, 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.
+
+// Context type is propagated down in cascades for static member enum
+// shorthands.
+
+// SharedOptions=--enable-experiment=enum-shorthands
+
+import '../enum_shorthand_helper.dart';
+
+class Cascade {
+  late StaticMember member;
+  late StaticMemberExt memberExt;
+}
+
+class CascadeCollection {
+  late List<StaticMember> memberList;
+  late Set<StaticMember> memberSet;
+  late Map<StaticMember, StaticMember> memberMap;
+  late Map<StaticMember, (StaticMember, StaticMember)> memberMap2;
+
+  late List<StaticMemberExt> memberExtList;
+  late Set<StaticMemberExt> memberExtSet;
+  late Map<StaticMemberExt, StaticMemberExt> memberExtMap;
+  late Map<StaticMemberExt, (StaticMemberExt, StaticMemberExt)> memberExtMap2;
+}
+
+class CascadeMethod {
+  void member(StaticMember member) => print(member);
+  void memberExt(StaticMemberExt member) => print(member);
+}
+
+void main() {
+  Cascade()
+    ..member = .member()
+    ..member = .memberType<String, int>('s')
+    ..memberExt = .member()
+    ..memberExt = .memberType<String, int>('s');
+
+  dynamic mayBeNull = null;
+  Cascade()
+    ..member = mayBeNull ?? .member()
+    ..member = mayBeNull ?? .memberType<String, int>('s')
+    ..memberExt = mayBeNull ?? .member()
+    ..memberExt = mayBeNull ?? .memberType<String, int>('s');
+
+  CascadeCollection()
+    ..memberList = [.member(), .memberType<String, int>('s')]
+    ..memberSet = {.member(), .memberType<String, int>('s')}
+    ..memberMap = {
+      .member(): .member(),
+      .memberType<String, int>(
+        's',
+      ): .memberType<String, int>('s'),
+    }
+    ..memberMap2 = {
+      .member(): (.member(), .member()),
+      .memberType<String, int>('s'): (
+        .memberType<String, int>('s'),
+        .memberType<String, int>('s'),
+      ),
+    }
+    ..memberExtList = [.member(), .memberType<String, int>('s')]
+    ..memberExtSet = {.member(), .memberType<String, int>('s')}
+    ..memberExtMap = {
+      .member(): .member(),
+      .memberType<String, int>(
+        's',
+      ): .memberType<String, int>('s'),
+    }
+    ..memberExtMap2 = {
+      .member(): (.member(), .member()),
+      .memberType<String, int>('s'): (
+        .memberType<String, int>('s'),
+        .memberType<String, int>('s'),
+      ),
+    };
+
+  CascadeMethod()
+    ..member(.member())
+    ..member(.memberType<String, int>('s'))
+    ..memberExt(.member())
+    ..memberExt(.memberType<String, int>('s'));
+
+  StaticMember member = .member()..toString();
+  StaticMember memberType = .memberType<String, int>('s')
+    ..toString();
+  StaticMemberExt memberExt = .member()..toString();
+  StaticMemberExt memberTypeExt = .memberType<String, int>('s')
+    ..toString();
+}