// 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

import "package:expect/expect.dart";

void checkBadSymbol(String s) {
  Expect.throwsArgumentError(() => new Symbol(s));
}

main() {
  var x;

  // 'void' is allowed as a symbol name.
  x = const Symbol('void'); //     //# 01: ok
  x = #void; //                    //# 02: ok
  x = new Symbol('void'); //       //# 03: ok

  // However, it is not allowed as a part of a symbol name.
  x = const Symbol('void.foo'); // //# 04: compile-time error
  x = #void.foo; //                //# 05: compile-time error
  checkBadSymbol('void.foo'); //   //# 06: ok
  x = const Symbol('foo.void'); // //# 07: compile-time error
  x = #foo.void; //                //# 08: compile-time error
  checkBadSymbol('foo.void'); //   //# 09: ok

  // All other reserved words are disallowed.
  x = const Symbol('assert'); //   //# 10: compile-time error
  x = const Symbol('break'); //    //# 10: continued
  x = const Symbol('case'); //     //# 10: continued
  x = const Symbol('catch'); //    //# 10: continued
  x = const Symbol('class'); //    //# 10: continued
  x = const Symbol('const'); //    //# 10: continued
  x = const Symbol('continue'); // //# 10: continued
  x = const Symbol('default'); //  //# 10: continued
  x = const Symbol('do'); //       //# 10: continued
  x = const Symbol('else'); //     //# 10: continued
  x = const Symbol('enum'); //     //# 10: continued
  x = const Symbol('extends'); //  //# 10: continued
  x = #assert; //                  //# 11: compile-time error
  x = const Symbol('false'); //    //# 10: continued
  x = const Symbol('final'); //    //# 10: continued
  x = const Symbol('finally'); //  //# 10: continued
  x = const Symbol('for'); //      //# 10: continued
  x = const Symbol('if'); //       //# 10: continued
  x = const Symbol('in'); //       //# 10: continued
  x = const Symbol('is'); //       //# 10: continued
  x = const Symbol('new'); //      //# 10: continued
  x = const Symbol('null'); //     //# 10: continued
  x = const Symbol('rethrow'); //  //# 10: continued
  x = const Symbol('return'); //   //# 10: continued
  x = const Symbol('super'); //    //# 10: continued
  x = const Symbol('switch'); //   //# 10: continued
  x = const Symbol('this'); //     //# 10: continued
  x = const Symbol('throw'); //    //# 10: continued
  x = const Symbol('true'); //     //# 10: continued
  x = const Symbol('try'); //      //# 10: continued
  x = const Symbol('var'); //      //# 10: continued
  x = const Symbol('while'); //    //# 10: continued
  x = const Symbol('with'); //     //# 10: continued
  x = #break; //                   //# 11: continued
  x = #case; //                    //# 11: continued
  x = #catch; //                   //# 11: continued
  x = #class; //                   //# 11: continued
  x = #const; //                   //# 11: continued
  x = #continue; //                //# 11: continued
  x = #default; //                 //# 11: continued
  x = #do; //                      //# 11: continued
  x = #else; //                    //# 11: continued
  x = #enum; //                    //# 11: continued
  x = #extends; //                 //# 11: continued
  x = #false; //                   //# 11: continued
  x = #final; //                   //# 11: continued
  x = #finally; //                 //# 11: continued
  x = #for; //                     //# 11: continued
  x = #if; //                      //# 11: continued
  x = #in; //                      //# 11: continued
  x = #is; //                      //# 11: continued
  x = #new; //                     //# 11: continued
  x = #null; //                    //# 11: continued
  x = #rethrow; //                 //# 11: continued
  x = #return; //                  //# 11: continued
  x = #super; //                   //# 11: continued
  x = #switch; //                  //# 11: continued
  x = #this; //                    //# 11: continued
  x = #throw; //                   //# 11: continued
  x = #true; //                    //# 11: continued
  x = #try; //                     //# 11: continued
  x = #var; //                     //# 11: continued
  x = #while; //                   //# 11: continued
  x = #with; //                    //# 11: continued
  checkBadSymbol('assert'); //     //# 12: ok
  checkBadSymbol('break'); //      //# 12: continued
  checkBadSymbol('case'); //       //# 12: continued
  checkBadSymbol('catch'); //      //# 12: continued
  checkBadSymbol('class'); //      //# 12: continued
  checkBadSymbol('const'); //      //# 12: continued
  checkBadSymbol('continue'); //   //# 12: continued
  checkBadSymbol('default'); //    //# 12: continued
  checkBadSymbol('do'); //         //# 12: continued
  checkBadSymbol('else'); //       //# 12: continued
  checkBadSymbol('enum'); //       //# 12: continued
  checkBadSymbol('extends'); //    //# 12: continued
  checkBadSymbol('false'); //      //# 12: continued
  checkBadSymbol('final'); //      //# 12: continued
  checkBadSymbol('finally'); //    //# 12: continued
  checkBadSymbol('for'); //        //# 12: continued
  checkBadSymbol('if'); //         //# 12: continued
  checkBadSymbol('in'); //         //# 12: continued
  checkBadSymbol('is'); //         //# 12: continued
  checkBadSymbol('new'); //        //# 12: continued
  checkBadSymbol('null'); //       //# 12: continued
  checkBadSymbol('rethrow'); //    //# 12: continued
  checkBadSymbol('return'); //     //# 12: continued
  checkBadSymbol('super'); //      //# 12: continued
  checkBadSymbol('switch'); //     //# 12: continued
  checkBadSymbol('this'); //       //# 12: continued
  checkBadSymbol('throw'); //      //# 12: continued
  checkBadSymbol('true'); //       //# 12: continued
  checkBadSymbol('try'); //        //# 12: continued
  checkBadSymbol('var'); //        //# 12: continued
  checkBadSymbol('while'); //      //# 12: continued
  checkBadSymbol('with'); //       //# 12: continued
}
