// Copyright (c) 2014, 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.

// @dart = 2.9

// Basic syntax test for enumeration types

enum Color { red, orange, yellow, green }

// Additional comma at end of list is ok.
enum Veggies {
  carrot,
  bean,
  broccolo,
}

// Need at least one enumeration identifier.
enum Nada {} // //# 01: syntax error

// Duplicate entries are a compile-time error
enum ComeAgain { ahau, knust, zipfel, knust, gupf } // //# 02: compile-time error

// Enum entries must not collide with implicitly defined members.
enum ComeAgain { ahau, knust, zipfel, index } //# 03: compile-time error

enum ComeAgain { ahau, knust, zipfel, values } //# 04: compile-time error

enum ComeAgain { ahau, knust, zipfel, toString } //# 05: compile-time error

// Enum entry must not collide with enum type name.
enum ComeAgain { ahau, knust, zipfel, ComeAgain } //# 06: compile-time error

// Missing comma.
enum Numbers { one, two, three four, five } // //# 07: syntax error

// Missing enum type name.
enum { eins, zwei, drei } // //# 08: syntax error

// Duplicate name in library scope.
topLevelFunction() => null;
enum topLevelFunction { bla, blah } // //# 09: compile-time error

class C {}
enum C { bla, blah } // //# 10: compile-time error

var zzTop;
enum zzTop { Billy, Dusty, Frank } // //# 11: compile-time error

// Enum type cannot be super type or interface type.
class Rainbow extends Color {} // //# 20: compile-time error
class Rainbow implements Color {} // //# 21: compile-time error
class Rainbow extends List with Color {} // //# 22: compile-time error

main() {
  Nada x; //# 01: continued
  var x = ComeAgain.zipfel; // //# 02: continued
  var x = ComeAgain.zipfel; // //# 03: continued
  var x = ComeAgain.zipfel; // //# 04: continued
  var x = ComeAgain.zipfel; // //# 05: continued
  var x = ComeAgain.zipfel; // //# 06: continued
  var x = Numbers.four; // //# 07: continued
  var x = topLevelFunction.bla; // //# 09: continued
  var x = C.bla; // //# 10: continued
  var x = zzTop.Frank; // //# 11: continued

  var x = new Rainbow(); // //# 20: continued
  var x = new Rainbow(); // //# 21: continued
  var x = new Rainbow(); // //# 22: continued

  // It is a compile-time error to explicitly instantiate an enum instance.
  var x = new Color(); // //# 30: compile-time error
}
