blob: 1422fff5c151fd962654a3ee476cb3a62f0ebd84 [file] [log] [blame] [edit]
// 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 class can be extended but not constructed,
/// implemented or mixed in and is not exhaustive
///
/// @description Check that it is not an error to implement an
/// `abstract base class` (by `base/final/sealed`), in the same library where it
/// is defined (other cases tested in `basic_restrictions_A03_t*`)
/// @author sgrekhov22@gmail.com
abstract base class AbstractBaseClass {}
base class BaseClassImplementsBaseClass implements AbstractBaseClass {}
final class FinalClassImplementsBaseClass implements AbstractBaseClass {}
sealed class SealedClassImplementsBaseClass implements AbstractBaseClass {}
abstract base class AbstractBaseClassImplementsBaseClass
implements AbstractBaseClass {}
abstract final class AbstractFinalClassImplementsBaseClass
implements AbstractBaseClass {}
base mixin class BaseMixinClassImplementsAbstractBaseClass
implements AbstractBaseClass {}
abstract base mixin class AbstractBaseMixinClassImplementsAbstractBaseClass
implements AbstractBaseClass {}
base mixin BaseMixinImplementsAbstractBaseClass implements AbstractBaseClass {}
enum EnumImplementsAbstractBaseClass implements AbstractBaseClass { e1, e2 }
main() {
print(BaseClassImplementsBaseClass);
print(FinalClassImplementsBaseClass);
print(SealedClassImplementsBaseClass);
print(AbstractBaseClassImplementsBaseClass);
print(AbstractFinalClassImplementsBaseClass);
print(BaseMixinClassImplementsAbstractBaseClass);
print(AbstractBaseMixinClassImplementsAbstractBaseClass);
print(BaseMixinImplementsAbstractBaseClass);
print(EnumImplementsAbstractBaseClass);
}