#1207. Some grammar tests added
diff --git a/LanguageFeatures/Enhanced-Enum/grammar_A01_t01.dart b/LanguageFeatures/Enhanced-Enum/grammar_A01_t01.dart
new file mode 100644
index 0000000..e9ff9e3
--- /dev/null
+++ b/LanguageFeatures/Enhanced-Enum/grammar_A01_t01.dart
@@ -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 We propose the following to also be allowed:
+///
+/// enum Name<T> with Mixin1, Mixin2 implements Interface1, Interface2 {
+///   id1<int>(args1), id2<String>(args2), id3<bool>(args3);
+///   memberDeclaration*
+///   const Name(params) : initList;
+/// }
+/// where memberDeclaration* is any sequence of static and instance member
+/// declarations and/or an unnamed generative const constructor declaration.
+///
+/// The ; after the identifier list is optional if there is nothing else in the
+/// declaration, required if there is any member declaration after it. The
+/// identifier list may have a trailing comma (like now).
+///
+/// @description Check that the ; after the identifier list is optional if there
+/// is nothing else in the declaration or the identifier list may have a
+/// trailing comma.
+/// @author sgrekhov@unipro.ru
+
+import "../../Utils/expect.dart";
+
+enum Time<T> {
+  hour<int>(),
+  day<String>(),
+  week<bool>()
+}
+
+enum Time2<T> {
+  hour<int>(),
+  day<String>(),
+  week<bool>(),
+}
+
+main() {
+  Time1 t1 = Time1.week;
+  Expect.equals(t1.week, Time1.week);
+  Time2 t2 = Time2.week;
+  Expect.equals(t2.week, Time2.week);
+}
diff --git a/LanguageFeatures/Enhanced-Enum/grammar_A01_t02.dart b/LanguageFeatures/Enhanced-Enum/grammar_A01_t02.dart
new file mode 100644
index 0000000..c289560
--- /dev/null
+++ b/LanguageFeatures/Enhanced-Enum/grammar_A01_t02.dart
@@ -0,0 +1,60 @@
+// 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 We propose the following to also be allowed:
+///
+/// enum Name<T> with Mixin1, Mixin2 implements Interface1, Interface2 {
+///   id1<int>(args1), id2<String>(args2), id3<bool>(args3);
+///   memberDeclaration*
+///   const Name(params) : initList;
+/// }
+/// where memberDeclaration* is any sequence of static and instance member
+/// declarations and/or an unnamed generative const constructor declaration.
+///
+/// The ; after the identifier list is optional if there is nothing else in the
+/// declaration, required if there is any member declaration after it. The
+/// identifier list may have a trailing comma (like now).
+///
+/// @description Check that the ; after the identifier list is required if there
+/// is any member declaration after it
+/// @author sgrekhov@unipro.ru
+
+enum Time1 {
+  hour,
+  day,
+  week
+
+  Time1();
+//^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
+
+enum Time2 {
+  hour,
+  day,
+  week,
+
+  Time2();
+//^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
+
+enum Time3 {
+  hour,
+  day,
+  week,
+
+  factory Time3.f() => values[0];
+//^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
+
+main() {
+  Time1.hour;
+  Time2.hour;
+  Time3.hour;
+}
diff --git a/LanguageFeatures/Enhanced-Enum/grammar_A01_t03.dart b/LanguageFeatures/Enhanced-Enum/grammar_A01_t03.dart
new file mode 100644
index 0000000..b705cb3
--- /dev/null
+++ b/LanguageFeatures/Enhanced-Enum/grammar_A01_t03.dart
@@ -0,0 +1,60 @@
+// 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 We propose the following to also be allowed:
+///
+/// enum Name<T> with Mixin1, Mixin2 implements Interface1, Interface2 {
+///   id1<int>(args1), id2<String>(args2), id3<bool>(args3);
+///   memberDeclaration*
+///   const Name(params) : initList;
+/// }
+/// where memberDeclaration* is any sequence of static and instance member
+/// declarations and/or an unnamed generative const constructor declaration.
+///
+/// The ; after the identifier list is optional if there is nothing else in the
+/// declaration, required if there is any member declaration after it. The
+/// identifier list may have a trailing comma (like now).
+///
+/// @description Check that the ; after the identifier list is required if there
+/// is any member declaration after it
+/// @author sgrekhov@unipro.ru
+
+enum Time1 {
+  hour(),
+  day(),
+  week()
+
+  String foo() => "Lily was here";
+//^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
+
+enum Time2<T> {
+  hour<int>(),
+  day<String>(),
+  week<bool>(),
+
+  static final int size = 3;
+//^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
+
+enum Time3<T> {
+  hour<int>(),
+  day<String>(),
+  week<bool>(),
+
+  int size = 3;
+//^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
+
+main() {
+  Time1.hour;
+  Time2.hour;
+  Time3.hour;
+}
diff --git a/LanguageFeatures/Enhanced-Enum/grammar_A02_t01.dart b/LanguageFeatures/Enhanced-Enum/grammar_A02_t01.dart
new file mode 100644
index 0000000..50adda6
--- /dev/null
+++ b/LanguageFeatures/Enhanced-Enum/grammar_A02_t01.dart
@@ -0,0 +1,37 @@
+// 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 We propose the following to also be allowed:
+///
+/// enum Name<T> with Mixin1, Mixin2 implements Interface1, Interface2 {
+///   id1<int>(args1), id2<String>(args2), id3<bool>(args3);
+///   memberDeclaration*
+///   const Name(params) : initList;
+/// }
+/// where memberDeclaration* is any sequence of static and instance member
+/// declarations and/or an unnamed generative const constructor declaration.
+/// ...
+/// The superclass of the mixin applications is the Enum class (which has an
+/// abstract index getter, so the only valid super invocations are those valid
+/// on Object).
+///
+/// @description Check that enum can be declared with the mixins
+/// @author sgrekhov@unipro.ru
+
+import "../../Utils/expect.dart";
+
+mixin M on Enum {
+  int mixedInMethod() => 42;
+}
+
+enum E with M {
+  e1,
+  e2,
+  e3
+}
+
+main() {
+  E e = E.e1;
+  Expect.equals(42, e.mixedInMethod());
+}
diff --git a/LanguageFeatures/Enhanced-Enum/grammar_A02_t02.dart b/LanguageFeatures/Enhanced-Enum/grammar_A02_t02.dart
new file mode 100644
index 0000000..a414f2e
--- /dev/null
+++ b/LanguageFeatures/Enhanced-Enum/grammar_A02_t02.dart
@@ -0,0 +1,44 @@
+// 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 We propose the following to also be allowed:
+///
+/// enum Name<T> with Mixin1, Mixin2 implements Interface1, Interface2 {
+///   id1<int>(args1), id2<String>(args2), id3<bool>(args3);
+///   memberDeclaration*
+///   const Name(params) : initList;
+/// }
+/// where memberDeclaration* is any sequence of static and instance member
+/// declarations and/or an unnamed generative const constructor declaration.
+/// ...
+/// The superclass of the mixin applications is the Enum class (which has an
+/// abstract index getter, so the only valid super invocations are those valid
+/// on Object).
+///
+/// @description Check that enum can be declared with the mixins
+/// @author sgrekhov@unipro.ru
+
+import "../../Utils/expect.dart";
+
+mixin M on Enum {
+  int mixedInMethod() => 42;
+}
+
+enum E with M {
+  e1(1),
+  e2(2),
+  e3(3);
+
+  int _val;
+
+  E(this._val);
+
+  int get sum => mixedInMethod() + _val;
+}
+
+main() {
+  Expect.equals(43, E.e1.sum);
+  Expect.equals(44, E.e2.sum);
+  Expect.equals(45, E.e3.sum);
+}
diff --git a/LanguageFeatures/Enhanced-Enum/grammar_A02_t03.dart b/LanguageFeatures/Enhanced-Enum/grammar_A02_t03.dart
new file mode 100644
index 0000000..4d82490
--- /dev/null
+++ b/LanguageFeatures/Enhanced-Enum/grammar_A02_t03.dart
@@ -0,0 +1,41 @@
+// 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 We propose the following to also be allowed:
+///
+/// enum Name<T> with Mixin1, Mixin2 implements Interface1, Interface2 {
+///   id1<int>(args1), id2<String>(args2), id3<bool>(args3);
+///   memberDeclaration*
+///   const Name(params) : initList;
+/// }
+/// where memberDeclaration* is any sequence of static and instance member
+/// declarations and/or an unnamed generative const constructor declaration.
+/// ...
+/// The superclass of the mixin applications is the Enum class (which has an
+/// abstract index getter, so the only valid super invocations are those valid
+/// on Object).
+///
+/// @description Check that it is a compile error if the superclass of the mixin
+/// applications is not the Enum class
+/// @author sgrekhov@unipro.ru
+
+class C {
+}
+
+mixin M on C {
+  int mixedInMethod() => 42;
+}
+
+enum E with M {
+//          ^
+// [analyzer] unspecified
+// [cfe] unspecified
+  e1,
+  e2,
+  e3;
+}
+
+main() {
+  E.e1;
+}