/* Copyright (c) 2013 The Chromium Authors. All rights reserved.
   Use of this source code is governed by a BSD-style license that can be
  found in the LICENSE file. */

/* Test Enum productions

Run with --test to generate an AST and verify that all comments accurately
reflect the state of the Nodes.

BUILD Type(Name)
This comment signals that a node of type <Type> is created with the
name <Name>.

ERROR Error String
This comment signals that a error of <Error String> is generated.  The error
is not assigned to a node, but are expected in order.

PROP Key=Value
This comment signals that a property has been set on the Node such that
<Key> = <Value>.

TREE
Type(Name)
  Type(Name)
  Type(Name)
    Type(Name)
    ...
This comment signals that a tree of nodes matching the BUILD comment
symatics should exist.  This is an exact match.
*/

/** TREE
 *Enum(MealType1)
 *  EnumItem(rice)
 *  EnumItem(noodles)
 *  EnumItem(other)
*/
enum MealType1 {
  /** BUILD EnumItem (rice) */
  "rice",
  /** BUILD EnumItem (noodles) */
  "noodles",
  /** BUILD EnumItem(other) */
  "other"
};

/** BUILD Error(Enum missing name.) */
/** ERROR Enum missing name. */
enum {
  "rice",
  "noodles",
  "other"
};

/** TREE
 *Enum(MealType2)
 *  EnumItem(rice)
 *  EnumItem(noodles)
 *  EnumItem(other)
*/
enum MealType2 {
  /** BUILD EnumItem(rice) */
  "rice",
  /** BUILD EnumItem(noodles) */
  "noodles",
  /** BUILD EnumItem(other) */
  "other"
};

/** TREE
 *Enum(TrailingComma)
 *  EnumItem(rice)
 *  EnumItem(noodles)
 *  EnumItem(other)
*/
enum TrailingComma {
  "rice",
  "noodles",
  "other",
};

/** BUILD Error(Unexpected string "noodles" after string "rice".) */
/** ERROR Unexpected string "noodles" after string "rice". */
enum MissingComma {
  "rice"
  "noodles",
  "other"
};

/** BUILD Error(Unexpected "," after ",".) */
/** ERROR Unexpected "," after ",". */
enum ExtraComma {
  "rice",
  "noodles",
  ,"other",
};

/** BUILD Error(Unexpected keyword "interface" after "{".) */
/** ERROR Unexpected keyword "interface" after "{". */
enum ExtraComma {
  interface,
  "noodles",
  ,"other",
};

/** BUILD Error(Unexpected identifier "somename" after "{".) */
/** ERROR Unexpected identifier "somename" after "{". */
enum ExtraComma {
  somename,
  "noodles",
  ,"other",
};

/** BUILD Enum(MealType3) */
enum MealType3 {
  /** BUILD EnumItem(rice) */
  "rice",
  /** BUILD EnumItem(noodles) */
  "noodles",
  /** BUILD EnumItem(other) */
  "other"
};

