From 24d210a18c969ee2b07937d17aa67c066219c799 Mon Sep 17 00:00:00 2001 From: Kallen Tu Date: Fri, 24 Mar 2023 18:07:52 +0000 Subject: [PATCH] [tests] Fix existing on clause tests for final classes. Disallow using final classes on on-clauses outside of its library. Update tests to show this behaviour. (Or at least in a state where I can test out the implementation) Change-Id: I74306c873dbd047c6b94d8e8e75c215562dd9483 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/290915 Commit-Queue: Kallen Tu Reviewed-by: Leaf Petersen --- ...al_class_different_library_error_test.dart | 8 +++- .../final_class_different_library_test.dart | 13 ------ .../final/final_class_mixin_on_test.dart | 46 ------------------- 3 files changed, 7 insertions(+), 60 deletions(-) delete mode 100644 tests/language/class_modifiers/base_transitivity/final_class_different_library_test.dart delete mode 100644 tests/language/class_modifiers/final/final_class_mixin_on_test.dart diff --git a/tests/language/class_modifiers/base_transitivity/final_class_different_library_error_test.dart b/tests/language/class_modifiers/base_transitivity/final_class_different_library_error_test.dart index c7adc8f11e8..6aaab875c30 100644 --- a/tests/language/class_modifiers/base_transitivity/final_class_different_library_error_test.dart +++ b/tests/language/class_modifiers/base_transitivity/final_class_different_library_error_test.dart @@ -177,7 +177,8 @@ base mixin BaseMixinImplement implements FinalClass {} // [analyzer] COMPILE_TIME_ERROR.INVALID_USE_OF_TYPE_OUTSIDE_LIBRARY // [cfe] The class 'FinalClass' can't be implemented outside of its library because it's a final class. -/// It is an error if FinalClass is the `on` type of a mixin which is not marked base. +// It is an error if FinalClass is the `on` type of a mixin outside of +// FinalClass' library. mixin SimpleMixinOn on FinalClass {} // ^^^^^^^^^^^^^ @@ -194,4 +195,9 @@ mixin SimpleMixinOnSimpleFinal on SimpleClass, FinalClass {} // [analyzer] COMPILE_TIME_ERROR.SUBTYPE_OF_BASE_OR_FINAL_IS_NOT_BASE_FINAL_OR_SEALED // [cfe] The type 'SimpleMixinOnSimpleFinal' must be 'base', 'final' or 'sealed' because the supertype 'FinalClass' is 'final'. +base mixin BaseMixinOn on FinalClass {} +// ^ +// [analyzer] unspecified +// [cfe] unspecified + main() {} diff --git a/tests/language/class_modifiers/base_transitivity/final_class_different_library_test.dart b/tests/language/class_modifiers/base_transitivity/final_class_different_library_test.dart deleted file mode 100644 index 4d0ecc39dcc..00000000000 --- a/tests/language/class_modifiers/base_transitivity/final_class_different_library_test.dart +++ /dev/null @@ -1,13 +0,0 @@ -// 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. - -// SharedOptions=--enable-experiment=class-modifiers - -/// Test the valid uses of a final class defined in a different library - -import "shared_library_definitions.dart" show FinalClass; - -base mixin BaseMixinOn on FinalClass {} - -main() {} diff --git a/tests/language/class_modifiers/final/final_class_mixin_on_test.dart b/tests/language/class_modifiers/final/final_class_mixin_on_test.dart deleted file mode 100644 index ccf1d2d32d1..00000000000 --- a/tests/language/class_modifiers/final/final_class_mixin_on_test.dart +++ /dev/null @@ -1,46 +0,0 @@ -// 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. - -// SharedOptions=--enable-experiment=class-modifiers - -// Allow a final type to appear in the "on" clause of a mixin declaration. - -import 'package:expect/expect.dart'; - -final class FinalClass {} - -abstract final class A extends FinalClass {} - -final class B extends FinalClass {} - -final mixin FinalMixin {} - -final class C extends FinalClass with FinalMixin {} - -final class D with FinalMixin {} - -final mixin MA on FinalClass {} -final mixin MB on FinalClass {} - -final class ConcreteA extends A with MA, MB { - int foo = 0; -} - -final mixin MC on FinalClass, FinalMixin {} - -final class ConcreteC extends C with MC { - int foo = 0; -} - -final mixin MCSingular on FinalMixin {} - -final class ConcreteD extends D with MCSingular { - int foo = 0; -} - -main() { - Expect.equals(0, ConcreteA().foo); - Expect.equals(0, ConcreteC().foo); - Expect.equals(0, ConcreteD().foo); -}