Skip to content

Commit

Permalink
#1959. Test valid combinations of modifiers. Part 3 (#2025)
Browse files Browse the repository at this point in the history
Test valid combinations of modifiers. Part 3
  • Loading branch information
sgrekhov authored Apr 25, 2023
1 parent 30e6be7 commit fc31789
Show file tree
Hide file tree
Showing 60 changed files with 2,914 additions and 0 deletions.
30 changes: 30 additions & 0 deletions LanguageFeatures/Class-modifiers/basic_restrictions_A04_t01.dart
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,26 @@ abstract interface class AbstractInterfaceExtendsBaseClass extends BaseClass {}
// [analyzer] unspecified
// [cfe] unspecified

class ExtendsBaseMixinClass extends BaseMixinClass {}
// ^^^^^^^^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified

interface class InterfaceExtendsBaseMixinClass extends BaseMixinClass {}
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified

abstract class AbstractExtendsBaseMixinClass extends BaseMixinClass {}
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified

abstract interface class AbstractInterfaceExtendsBaseMixinClass extends BaseMixinClass {}
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified

class ClassWithBaseMixin with BaseMixin {}
// ^^^^^^^^^^^^^^^^^^
// [analyzer] unspecified
Expand Down Expand Up @@ -81,6 +101,11 @@ mixin MixinOnBaseClass on BaseClass {}
// [analyzer] unspecified
// [cfe] unspecified

mixin MixinOnBaseMixin on BaseMixin {}
// ^^^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified

mixin MixinOnBaseMixinClass on BaseMixinClass {}
// ^^^^^^^^^^^^^^^^^^^^^
// [analyzer] unspecified
Expand All @@ -91,12 +116,17 @@ main() {
print(InterfaceExtendsBaseClass);
print(AbstractExtendsBaseClass);
print(AbstractInterfaceExtendsBaseClass);
print(ExtendsBaseMixinClass);
print(InterfaceExtendsBaseMixinClass);
print(AbstractExtendsBaseMixinClass);
print(AbstractInterfaceExtendsBaseMixinClass);
print(ClassWithBaseMixin);
print(ClassWithBaseMixinClass);
print(InterfaceClassWithBaseMixin);
print(InterfaceClassWithBaseMixinClass);
print(AbstractClassWithBaseMixin);
print(AbstractClassWithBaseMixinClass);
print(MixinOnBaseClass);
print(MixinOnBaseMixin);
print(MixinOnBaseMixinClass);
}
55 changes: 55 additions & 0 deletions LanguageFeatures/Class-modifiers/basic_restrictions_A04_t02.dart
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,27 @@ abstract interface class AbstractInterfaceExtendsBaseClass extends BaseClass {}
// [analyzer] unspecified
// [cfe] unspecified

class ExtendsBaseMixinClass extends BaseMixinClass {}
// ^^^^^^^^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified

interface class InterfaceExtendsBaseMixinClass extends BaseMixinClass {}
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified

abstract class AbstractExtendsBaseMixinClass extends BaseMixinClass {}
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified

abstract interface class AbstractInterfaceExtendsBaseMixinClass extends BaseMixinClass {}
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified


class ImplementsBaseClass implements BaseClass {}
// ^^^^^^^^^^^^^^^^^^^
// [analyzer] unspecified
Expand All @@ -58,6 +79,26 @@ abstract interface class AbstractInterfaceImplementsBaseClass implements BaseCla
// [analyzer] unspecified
// [cfe] unspecified

class ImplementsBaseMixinClass implements BaseMixinClass {}
// ^^^^^^^^^^^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified

interface class InterfaceImplementsBaseMixinClass implements BaseMixinClass {}
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified

abstract class AbstractImplementsBaseMixinClass implements BaseMixinClass {}
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified

abstract interface class AbstractInterfaceImplementsBaseMixinClass implements BaseMixinClass {}
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified

class ClassWithBaseMixin with BaseMixin {}
// ^^^^^^^^^^^^^^^^^^
// [analyzer] unspecified
Expand Down Expand Up @@ -103,6 +144,11 @@ mixin MixinOnBaseClass on BaseClass {}
// [analyzer] unspecified
// [cfe] unspecified

mixin MixinOnBaseMixin on BaseMixin {}
// ^^^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified

mixin MixinOnBaseMixinClass on BaseMixinClass {}
// ^^^^^^^^^^^^^^^^^^^^^
// [analyzer] unspecified
Expand Down Expand Up @@ -143,17 +189,26 @@ main() {
print(InterfaceExtendsBaseClass);
print(AbstractExtendsBaseClass);
print(AbstractInterfaceExtendsBaseClass);
print(ExtendsBaseMixinClass);
print(InterfaceExtendsBaseMixinClass);
print(AbstractExtendsBaseMixinClass);
print(AbstractInterfaceExtendsBaseMixinClass);
print(ImplementsBaseClass);
print(InterfaceImplementsBaseClass);
print(AbstractImplementsBaseClass);
print(AbstractInterfaceImplementsBaseClass);
print(ImplementsBaseMixinClass);
print(InterfaceImplementsBaseMixinClass);
print(AbstractImplementsBaseMixinClass);
print(AbstractInterfaceImplementsBaseMixinClass);
print(ClassWithBaseMixin);
print(ClassWithBaseMixinClass);
print(InterfaceClassWithBaseMixin);
print(InterfaceClassWithBaseMixinClass);
print(AbstractClassWithBaseMixin);
print(AbstractClassWithBaseMixinClass);
print(MixinOnBaseClass);
print(MixinOnBaseMixin);
print(MixinOnBaseMixinClass);
print(MixinImplementsBaseClass);
print(MixinImplementsBaseMixinClass);
Expand Down
24 changes: 24 additions & 0 deletions LanguageFeatures/Class-modifiers/basic_restrictions_A04_t03.dart
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,26 @@ abstract interface class AbstractInterfaceExtendsBaseClass extends AbstractBaseC
// [analyzer] unspecified
// [cfe] unspecified

class ExtendsBaseMixinClass extends AbstractBaseMixinClass {}
// ^^^^^^^^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified

interface class InterfaceExtendsBaseMixinClass extends AbstractBaseMixinClass {}
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified

abstract class AbstractExtendsBaseMixinClass extends AbstractBaseMixinClass {}
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified

abstract interface class AbstractInterfaceExtendsBaseMixinClass extends AbstractBaseMixinClass {}
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified

class ClassWithBaseMixinClass with AbstractBaseMixinClass {}
// ^^^^^^^^^^^^^^^^^^^^^^^
// [analyzer] unspecified
Expand Down Expand Up @@ -71,6 +91,10 @@ main() {
print(InterfaceExtendsBaseClass);
print(AbstractExtendsBaseClass);
print(AbstractInterfaceExtendsBaseClass);
print(ExtendsBaseMixinClass);
print(InterfaceExtendsBaseMixinClass);
print(AbstractExtendsBaseMixinClass);
print(AbstractInterfaceExtendsBaseMixinClass);
print(ClassWithBaseMixinClass);
print(InterfaceClassWithBaseMixinClass);
print(AbstractClassWithBaseMixinClass);
Expand Down
25 changes: 25 additions & 0 deletions LanguageFeatures/Class-modifiers/basic_restrictions_A04_t04.dart
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,27 @@ abstract interface class AbstractInterfaceExtendsBaseClass extends AbstractBaseC
// [analyzer] unspecified
// [cfe] unspecified

class ExtendsAbstractBaseMixinClass extends AbstractBaseMixinClass {}
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified

interface class InterfaceExtendsAbstractBaseMixinClass extends AbstractBaseMixinClass {}
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified

abstract class AbstractExtendsAbstractBaseMixinClass extends AbstractBaseMixinClass {}
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified

abstract interface class AbstractInterfaceExtendsAbstractBaseMixinClass extends AbstractBaseMixinClass {}
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified


class ImplementsBaseClass implements AbstractBaseClass {}
// ^^^^^^^^^^^^^^^^^^^
// [analyzer] unspecified
Expand Down Expand Up @@ -122,6 +143,10 @@ main() {
print(InterfaceExtendsBaseClass);
print(AbstractExtendsBaseClass);
print(AbstractInterfaceExtendsBaseClass);
print(ExtendsAbstractBaseMixinClass);
print(InterfaceExtendsAbstractBaseMixinClass);
print(AbstractExtendsAbstractBaseMixinClass);
print(AbstractInterfaceExtendsAbstractBaseMixinClass);
print(ImplementsBaseClass);
print(InterfaceImplementsBaseClass);
print(AbstractImplementsBaseClass);
Expand Down
22 changes: 22 additions & 0 deletions LanguageFeatures/Class-modifiers/class_modifiers_lib.dart
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,28 @@ class ExtendsSealedClass extends SealedClass {}
class ImplementsSealedClass implements SealedClass {}
mixin MixinOnSealed on SealedClass {}

class ExtendsMixinClass extends MixinClass {}
class ImplementsMixinClass implements MixinClass {}
class WithMixinClass with MixinClass {}

base class ExtendsBaseMixinClass extends BaseMixinClass {}
final class ImplementsBaseMixinClass implements BaseMixinClass {}
sealed class WithBaseMixinClass with BaseMixinClass {}

class ExtendsAbstractMixinClass extends AbstractMixinClass {}
class ImplementsAbstractMixinClass implements AbstractMixinClass {}
class WithAbstractMixinClass with AbstractMixinClass {}

base class ExtendsAbstractBaseMixinClass extends AbstractBaseMixinClass {}
final class ImplementsAbstractBaseMixinClass implements AbstractBaseMixinClass {}
sealed class WithAbstractBaseMixinClass with AbstractBaseMixinClass {}

class ImplementsMixin implements Mixin {}
class WithMixin with Mixin {}

base class ImplementsBaseMixin implements BaseMixin {}
final class WithBaseMixin with BaseMixin {}

class ExtendsAbstractClass1 extends AbstractClass {}
class ExtendsAbstractClass2 extends AbstractClass {}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
// 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.

/// @assertion Abstract base mixin class can be extended and mixed in but not
/// constructed, implemented and is not exhaustive
///
/// @description Checks that an `abstract base mixin class` cannot be
/// constructed
/// @author [email protected]
// SharedOptions=--enable-experiment=class-modifiers

import "class_modifiers_lib.dart";

abstract base mixin class LocalAbstractBaseMixinClass {}

main() {
AbstractBaseMixinClass();
//^^^^^^^^^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified

LocalAbstractBaseMixinClass();
//^^^^^^^^^^^^^^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
// 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.

/// @assertion Abstract base mixin class can be extended and mixed in but not
/// constructed, implemented and is not exhaustive
///
/// @description Checks that an `abstract base mixin class` can be extended by
/// `base/final/sealed` outside of the library where it is defined (other cases
/// are tested in `basic_restrictions_A04_t*`)
/// @author [email protected]
// SharedOptions=--enable-experiment=class-modifiers

import "class_modifiers_lib.dart";

base class BaseClassExtendsAbstractBaseMixinClass
extends AbstractBaseMixinClass {}

final class FinalClassExtendsAbstractBaseMixinClass
extends AbstractBaseMixinClass {}

sealed class SealedClassExtendsAbstractBaseMixinClass
extends AbstractBaseMixinClass {}

abstract base class AbstractBaseClassExtendsAbstractBaseMixinClass
extends AbstractBaseMixinClass {}

abstract final class AbstractFinalClassExtendsAbstractBaseMixinClass
extends AbstractBaseMixinClass {}

main() {
BaseMixinClass();
print(BaseClassExtendsAbstractBaseMixinClass);
print(FinalClassExtendsAbstractBaseMixinClass);
print(SealedClassExtendsAbstractBaseMixinClass);
print(AbstractBaseClassExtendsAbstractBaseMixinClass);
print(AbstractFinalClassExtendsAbstractBaseMixinClass);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
// 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.

/// @assertion Abstract base mixin class can be extended and mixed in but not
/// constructed, implemented and is not exhaustive
///
/// @description Checks that an `abstract base mixin class` can be extended by
/// `base/final/sealed` in the same library where it is defined (other cases
/// are tested in `basic_restrictions_A04_t*`)
/// @author [email protected]
// SharedOptions=--enable-experiment=class-modifiers

abstract base mixin class AbstractBaseMixinClass {}

base class BaseClassExtendsAbstractBaseMixinClass
extends AbstractBaseMixinClass {}

final class FinalClassExtendsAbstractBaseMixinClass
extends AbstractBaseMixinClass {}

sealed class SealedClassExtendsAbstractBaseMixinClass
extends AbstractBaseMixinClass {}

abstract base class AbstractBaseClassExtendsAbstractBaseMixinClass
extends AbstractBaseMixinClass {}

abstract final class AbstractFinalClassExtendsAbstractBaseMixinClass
extends AbstractBaseMixinClass {}

main() {
print(BaseClassExtendsAbstractBaseMixinClass);
print(FinalClassExtendsAbstractBaseMixinClass);
print(SealedClassExtendsAbstractBaseMixinClass);
print(AbstractBaseClassExtendsAbstractBaseMixinClass);
print(AbstractFinalClassExtendsAbstractBaseMixinClass);
}
Loading

0 comments on commit fc31789

Please sign in to comment.