-
Notifications
You must be signed in to change notification settings - Fork 28
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fixes #1207. Implementing Enum tests added
- Loading branch information
sgrekhov
committed
Oct 13, 2021
1 parent
2447a57
commit 3ef7888
Showing
9 changed files
with
482 additions
and
0 deletions.
There are no files selected for viewing
43 changes: 43 additions & 0 deletions
43
LanguageFeatures/Enhanced-Enum/implementing_enum_A01_t01.dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
// Copyright (c) 2021, 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 It’s currently a compile-time error for a class to implement, | ||
/// extend or mix-in the Enum class. | ||
/// | ||
/// Because we want to allow interfaces and mixins that are intended to be | ||
/// applied to enum declarations, and therefore to assume Enum to be a | ||
/// superclass, we loosen that restriction to: | ||
/// | ||
/// It’s a compile-time error if a non-abstract class implements Enum unless it | ||
/// is the implicit class of an enum declaration. | ||
/// | ||
/// It is a compile-time error if a class implements, extends or mixes-in a | ||
/// class declared by an enum declaration. | ||
/// | ||
/// That allows abstract classes (interfaces) which implements Enum in order to | ||
/// have the int index; getter member available, and it allows mixin | ||
/// declarations to use Enum as an on type because mixin declarations cannot be | ||
/// instantiated directly. | ||
/// | ||
/// This restriction still ensure enum values are the only object instances | ||
/// which implements Enum, while making it valid to declare abstract class | ||
/// MyInterface implements Enum and mixin MyMixin on Enum for interfaces and | ||
/// mixins intended to be used in declaring enum classes. | ||
/// | ||
/// @description Check that it’s a compile-time error if a non-abstract class | ||
/// implements Enum and it is not the implicit class of an enum declaration. | ||
/// @author [email protected] | ||
// SharedOptions=--enable-experiment=enhanced-enums | ||
|
||
class C implements Enum { | ||
// ^^^^ | ||
// [analyzer] unspecified | ||
// [cfe] unspecified | ||
int get index => 42; | ||
} | ||
|
||
main() { | ||
C? c; | ||
} |
49 changes: 49 additions & 0 deletions
49
LanguageFeatures/Enhanced-Enum/implementing_enum_A01_t02.dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
// Copyright (c) 2021, 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 It’s currently a compile-time error for a class to implement, | ||
/// extend or mix-in the Enum class. | ||
/// | ||
/// Because we want to allow interfaces and mixins that are intended to be | ||
/// applied to enum declarations, and therefore to assume Enum to be a | ||
/// superclass, we loosen that restriction to: | ||
/// | ||
/// It’s a compile-time error if a non-abstract class implements Enum unless it | ||
/// is the implicit class of an enum declaration. | ||
/// | ||
/// It is a compile-time error if a class implements, extends or mixes-in a | ||
/// class declared by an enum declaration. | ||
/// | ||
/// That allows abstract classes (interfaces) which implements Enum in order to | ||
/// have the int index; getter member available, and it allows mixin | ||
/// declarations to use Enum as an on type because mixin declarations cannot be | ||
/// instantiated directly. | ||
/// | ||
/// This restriction still ensure enum values are the only object instances | ||
/// which implements Enum, while making it valid to declare abstract class | ||
/// MyInterface implements Enum and mixin MyMixin on Enum for interfaces and | ||
/// mixins intended to be used in declaring enum classes. | ||
/// | ||
/// @description Check that abstract classes may implement enum | ||
/// @author [email protected] | ||
// SharedOptions=--enable-experiment=enhanced-enums | ||
|
||
import "../../Utils/expect.dart"; | ||
|
||
abstract class C implements Enum { | ||
int foo(); | ||
} | ||
|
||
enum E implements C { | ||
e1, | ||
e2; | ||
|
||
int foo() => this.index; | ||
} | ||
|
||
main() { | ||
Expect.equals(0, E.e1.foo()); | ||
Expect.equals(1, E.e2.foo()); | ||
} |
50 changes: 50 additions & 0 deletions
50
LanguageFeatures/Enhanced-Enum/implementing_enum_A01_t03.dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
// Copyright (c) 2021, 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 It’s currently a compile-time error for a class to implement, | ||
/// extend or mix-in the Enum class. | ||
/// | ||
/// Because we want to allow interfaces and mixins that are intended to be | ||
/// applied to enum declarations, and therefore to assume Enum to be a | ||
/// superclass, we loosen that restriction to: | ||
/// | ||
/// It’s a compile-time error if a non-abstract class implements Enum unless it | ||
/// is the implicit class of an enum declaration. | ||
/// | ||
/// It is a compile-time error if a class implements, extends or mixes-in a | ||
/// class declared by an enum declaration. | ||
/// | ||
/// That allows abstract classes (interfaces) which implements Enum in order to | ||
/// have the int index; getter member available, and it allows mixin | ||
/// declarations to use Enum as an on type because mixin declarations cannot be | ||
/// instantiated directly. | ||
/// | ||
/// This restriction still ensure enum values are the only object instances | ||
/// which implements Enum, while making it valid to declare abstract class | ||
/// MyInterface implements Enum and mixin MyMixin on Enum for interfaces and | ||
/// mixins intended to be used in declaring enum classes. | ||
/// | ||
/// @description Check that implicit class of enum declaration implements Enum | ||
/// @author [email protected] | ||
// SharedOptions=--enable-experiment=enhanced-enums | ||
|
||
import "../../Utils/expect.dart"; | ||
|
||
enum E1 { | ||
e1, | ||
e2 | ||
} | ||
|
||
enum E2 { | ||
e1(42), | ||
e2(0); | ||
|
||
const E2(int i); | ||
} | ||
|
||
main() { | ||
Expect.isTrue(E1.e1 is Enum); | ||
Expect.isTrue(E2.e1 is Enum); | ||
} |
54 changes: 54 additions & 0 deletions
54
LanguageFeatures/Enhanced-Enum/implementing_enum_A02_t01.dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
// Copyright (c) 2021, 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 It’s currently a compile-time error for a class to implement, | ||
/// extend or mix-in the Enum class. | ||
/// | ||
/// Because we want to allow interfaces and mixins that are intended to be | ||
/// applied to enum declarations, and therefore to assume Enum to be a | ||
/// superclass, we loosen that restriction to: | ||
/// | ||
/// It’s a compile-time error if a non-abstract class implements Enum unless it | ||
/// is the implicit class of an enum declaration. | ||
/// | ||
/// It is a compile-time error if a class implements, extends or mixes-in a | ||
/// class declared by an enum declaration. | ||
/// | ||
/// That allows abstract classes (interfaces) which implements Enum in order to | ||
/// have the int index; getter member available, and it allows mixin | ||
/// declarations to use Enum as an on type because mixin declarations cannot be | ||
/// instantiated directly. | ||
/// | ||
/// This restriction still ensure enum values are the only object instances | ||
/// which implements Enum, while making it valid to declare abstract class | ||
/// MyInterface implements Enum and mixin MyMixin on Enum for interfaces and | ||
/// mixins intended to be used in declaring enum classes. | ||
/// | ||
/// @description Check that it is a compile-time error if a class extends | ||
/// a class declared by an enum declaration. | ||
/// @author [email protected] | ||
// SharedOptions=--enable-experiment=enhanced-enums | ||
|
||
enum E { | ||
e1, | ||
e2 | ||
} | ||
|
||
abstract class E1 extends E { | ||
// ^ | ||
// [analyzer] unspecified | ||
// [cfe] unspecified | ||
} | ||
|
||
class E2 extends E { | ||
// ^ | ||
// [analyzer] unspecified | ||
// [cfe] unspecified | ||
} | ||
|
||
main() { | ||
E1? e1; | ||
E2? e2; | ||
} |
56 changes: 56 additions & 0 deletions
56
LanguageFeatures/Enhanced-Enum/implementing_enum_A02_t02.dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
// Copyright (c) 2021, 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 It’s currently a compile-time error for a class to implement, | ||
/// extend or mix-in the Enum class. | ||
/// | ||
/// Because we want to allow interfaces and mixins that are intended to be | ||
/// applied to enum declarations, and therefore to assume Enum to be a | ||
/// superclass, we loosen that restriction to: | ||
/// | ||
/// It’s a compile-time error if a non-abstract class implements Enum unless it | ||
/// is the implicit class of an enum declaration. | ||
/// | ||
/// It is a compile-time error if a class implements, extends or mixes-in a | ||
/// class declared by an enum declaration. | ||
/// | ||
/// That allows abstract classes (interfaces) which implements Enum in order to | ||
/// have the int index; getter member available, and it allows mixin | ||
/// declarations to use Enum as an on type because mixin declarations cannot be | ||
/// instantiated directly. | ||
/// | ||
/// This restriction still ensure enum values are the only object instances | ||
/// which implements Enum, while making it valid to declare abstract class | ||
/// MyInterface implements Enum and mixin MyMixin on Enum for interfaces and | ||
/// mixins intended to be used in declaring enum classes. | ||
/// | ||
/// @description Check that it is a compile-time error if a class extends | ||
/// a class declared by an enum declaration. | ||
/// @author [email protected] | ||
// SharedOptions=--enable-experiment=enhanced-enums | ||
|
||
enum E { | ||
e1(42), | ||
e2(0); | ||
|
||
const E(int i); | ||
} | ||
|
||
abstract class E1 extends E { | ||
// ^ | ||
// [analyzer] unspecified | ||
// [cfe] unspecified | ||
} | ||
|
||
class E2 extends E { | ||
// ^ | ||
// [analyzer] unspecified | ||
// [cfe] unspecified | ||
} | ||
|
||
main() { | ||
E1? e1; | ||
E2? e2; | ||
} |
54 changes: 54 additions & 0 deletions
54
LanguageFeatures/Enhanced-Enum/implementing_enum_A02_t03.dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
// Copyright (c) 2021, 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 It’s currently a compile-time error for a class to implement, | ||
/// extend or mix-in the Enum class. | ||
/// | ||
/// Because we want to allow interfaces and mixins that are intended to be | ||
/// applied to enum declarations, and therefore to assume Enum to be a | ||
/// superclass, we loosen that restriction to: | ||
/// | ||
/// It’s a compile-time error if a non-abstract class implements Enum unless it | ||
/// is the implicit class of an enum declaration. | ||
/// | ||
/// It is a compile-time error if a class implements, extends or mixes-in a | ||
/// class declared by an enum declaration. | ||
/// | ||
/// That allows abstract classes (interfaces) which implements Enum in order to | ||
/// have the int index; getter member available, and it allows mixin | ||
/// declarations to use Enum as an on type because mixin declarations cannot be | ||
/// instantiated directly. | ||
/// | ||
/// This restriction still ensure enum values are the only object instances | ||
/// which implements Enum, while making it valid to declare abstract class | ||
/// MyInterface implements Enum and mixin MyMixin on Enum for interfaces and | ||
/// mixins intended to be used in declaring enum classes. | ||
/// | ||
/// @description Check that it is a compile-time error if a class implements | ||
/// a class declared by an enum declaration. | ||
/// @author [email protected] | ||
// SharedOptions=--enable-experiment=enhanced-enums | ||
|
||
enum E { | ||
e1, | ||
e2 | ||
} | ||
|
||
abstract class E1 implements E { | ||
// ^ | ||
// [analyzer] unspecified | ||
// [cfe] unspecified | ||
} | ||
|
||
class E2 implements E { | ||
// ^ | ||
// [analyzer] unspecified | ||
// [cfe] unspecified | ||
} | ||
|
||
main() { | ||
E1? e1; | ||
E2? e2; | ||
} |
56 changes: 56 additions & 0 deletions
56
LanguageFeatures/Enhanced-Enum/implementing_enum_A02_t04.dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
// Copyright (c) 2021, 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 It’s currently a compile-time error for a class to implement, | ||
/// extend or mix-in the Enum class. | ||
/// | ||
/// Because we want to allow interfaces and mixins that are intended to be | ||
/// applied to enum declarations, and therefore to assume Enum to be a | ||
/// superclass, we loosen that restriction to: | ||
/// | ||
/// It’s a compile-time error if a non-abstract class implements Enum unless it | ||
/// is the implicit class of an enum declaration. | ||
/// | ||
/// It is a compile-time error if a class implements, extends or mixes-in a | ||
/// class declared by an enum declaration. | ||
/// | ||
/// That allows abstract classes (interfaces) which implements Enum in order to | ||
/// have the int index; getter member available, and it allows mixin | ||
/// declarations to use Enum as an on type because mixin declarations cannot be | ||
/// instantiated directly. | ||
/// | ||
/// This restriction still ensure enum values are the only object instances | ||
/// which implements Enum, while making it valid to declare abstract class | ||
/// MyInterface implements Enum and mixin MyMixin on Enum for interfaces and | ||
/// mixins intended to be used in declaring enum classes. | ||
/// | ||
/// @description Check that it is a compile-time error if a class implements | ||
/// a class declared by an enum declaration. | ||
/// @author [email protected] | ||
// SharedOptions=--enable-experiment=enhanced-enums | ||
|
||
enum E { | ||
e1(42), | ||
e2(0); | ||
|
||
const E(int i); | ||
} | ||
|
||
abstract class E1 implements E { | ||
// ^ | ||
// [analyzer] unspecified | ||
// [cfe] unspecified | ||
} | ||
|
||
class E2 implements E { | ||
// ^ | ||
// [analyzer] unspecified | ||
// [cfe] unspecified | ||
} | ||
|
||
main() { | ||
E1? e1; | ||
E2? e2; | ||
} |
Oops, something went wrong.