js/src/tests/ecma_5/misc/future-reserved-words.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /*
     2  * Any copyright is dedicated to the Public Domain.
     3  * http://creativecommons.org/licenses/publicdomain/
     4  */
     6 //-----------------------------------------------------------------------------
     7 var BUGNUMBER = 497869;
     8 var summary = "Implement FutureReservedWords per-spec";
    10 print(BUGNUMBER + ": " + summary);
    12 /**************
    13  * BEGIN TEST *
    14  **************/
    16 var futureReservedWords =
    17   [
    18    "class",
    19    // "const", // Mozilla extension enabled even for versionless code
    20    "enum",
    21    "export",
    22    "extends",
    23    "import",
    24    "super",
    25   ];
    27 var strictFutureReservedWords =
    28   [
    29    "implements",
    30    "interface",
    31    "let", // enabled: this file doesn't execute as JS1.7
    32    "package",
    33    "private",
    34    "protected",
    35    "public",
    36    "static",
    37    "yield", // enabled: this file doesn't execute as JS1.7
    38   ];
    40 function testWord(word, expectNormal, expectStrict)
    41 {
    42   var actual, status;
    44   // USE AS LHS FOR ASSIGNMENT
    46   actual = "";
    47   status = summary + ": " + word + ": normal assignment";
    48   try
    49   {
    50     eval(word + " = 'foo';");
    51     actual = "no error";
    52   }
    53   catch(e)
    54   {
    55     actual = e.name;
    56     status +=  ", " + e.name + ": " + e.message + " ";
    57   }
    58   reportCompare(expectNormal, actual, status);
    60   actual = "";
    61   status = summary + ": " + word + ": strict assignment";
    62   try
    63   {
    64     eval("'use strict'; " + word + " = 'foo';");
    65     actual = "no error";
    66   }
    67   catch(e)
    68   {
    69     actual = e.name;
    70     status +=  ", " + e.name + ": " + e.message + " ";
    71   }
    72   reportCompare(expectStrict, actual, status);
    74   // USE IN VARIABLE DECLARATION
    76   actual = "";
    77   status = summary + ": " + word + ": normal var";
    78   try
    79   {
    80     eval("var " + word + ";");
    81     actual = "no error";
    82   }
    83   catch (e)
    84   {
    85     actual = e.name;
    86     status +=  ", " + e.name + ": " + e.message + " ";
    87   }
    88   reportCompare(expectNormal, actual, status);
    90   actual = "";
    91   status = summary + ": " + word + ": strict var";
    92   try
    93   {
    94     eval("'use strict'; var " + word + ";");
    95     actual = "no error";
    96   }
    97   catch (e)
    98   {
    99     actual = e.name;
   100     status +=  ", " + e.name + ": " + e.message + " ";
   101   }
   102   reportCompare(expectStrict, actual, status);
   104   // USE IN FOR-IN VARIABLE DECLARATION
   106   actual = "";
   107   status = summary + ": " + word + ": normal for-in var";
   108   try
   109   {
   110     eval("for (var " + word + " in {});");
   111     actual = "no error";
   112   }
   113   catch (e)
   114   {
   115     actual = e.name;
   116     status +=  ", " + e.name + ": " + e.message + " ";
   117   }
   118   reportCompare(expectNormal, actual, status);
   120   actual = "";
   121   status = summary + ": " + word + ": strict for-in var";
   122   try
   123   {
   124     eval("'use strict'; for (var " + word + " in {});");
   125     actual = "no error";
   126   }
   127   catch (e)
   128   {
   129     actual = e.name;
   130     status +=  ", " + e.name + ": " + e.message + " ";
   131   }
   132   reportCompare(expectStrict, actual, status);
   134   // USE AS CATCH IDENTIFIER
   136   actual = "";
   137   status = summary + ": " + word + ": normal var";
   138   try
   139   {
   140     eval("try { } catch (" + word + ") { }");
   141     actual = "no error";
   142   }
   143   catch (e)
   144   {
   145     actual = e.name;
   146     status +=  ", " + e.name + ": " + e.message + " ";
   147   }
   148   reportCompare(expectNormal, actual, status);
   150   actual = "";
   151   status = summary + ": " + word + ": strict var";
   152   try
   153   {
   154     eval("'use strict'; try { } catch (" + word + ") { }");
   155     actual = "no error";
   156   }
   157   catch (e)
   158   {
   159     actual = e.name;
   160     status +=  ", " + e.name + ": " + e.message + " ";
   161   }
   162   reportCompare(expectStrict, actual, status);
   164   // USE AS LABEL
   166   actual = "";
   167   status = summary + ": " + word + ": normal label";
   168   try
   169   {
   170     eval(word + ": while (false);");
   171     actual = "no error";
   172   }
   173   catch (e)
   174   {
   175     actual = e.name;
   176     status +=  ", " + e.name + ": " + e.message + " ";
   177   }
   178   reportCompare(expectNormal, actual, status);
   180   actual = "";
   181   status = summary + ": " + word + ": strict label";
   182   try
   183   {
   184     eval("'use strict'; " + word + ": while (false);");
   185     actual = "no error";
   186   }
   187   catch (e)
   188   {
   189     actual = e.name;
   190     status +=  ", " + e.name + ": " + e.message + " ";
   191   }
   192   reportCompare(expectStrict, actual, status);
   194   // USE AS ARGUMENT NAME IN FUNCTION DECLARATION
   196   actual = "";
   197   status = summary + ": " + word + ": normal function argument";
   198   try
   199   {
   200     eval("function foo(" + word + ") { }");
   201     actual = "no error";
   202   }
   203   catch (e)
   204   {
   205     actual = e.name;
   206     status +=  ", " + e.name + ": " + e.message + " ";
   207   }
   208   reportCompare(expectNormal, actual, status);
   210   actual = "";
   211   status = summary + ": " + word + ": strict function argument";
   212   try
   213   {
   214     eval("'use strict'; function foo(" + word + ") { }");
   215     actual = "no error";
   216   }
   217   catch (e)
   218   {
   219     actual = e.name;
   220     status +=  ", " + e.name + ": " + e.message + " ";
   221   }
   222   reportCompare(expectStrict, actual, status);
   224   actual = "";
   225   status = summary + ": " + word + ": function argument retroactively strict";
   226   try
   227   {
   228     eval("function foo(" + word + ") { 'use strict'; }");
   229     actual = "no error";
   230   }
   231   catch (e)
   232   {
   233     actual = e.name;
   234     status +=  ", " + e.name + ": " + e.message + " ";
   235   }
   236   reportCompare(expectStrict, actual, status);
   238   // USE AS ARGUMENT NAME IN FUNCTION EXPRESSION
   240   actual = "";
   241   status = summary + ": " + word + ": normal function expression argument";
   242   try
   243   {
   244     eval("var s = (function foo(" + word + ") { });");
   245     actual = "no error";
   246   }
   247   catch (e)
   248   {
   249     actual = e.name;
   250     status +=  ", " + e.name + ": " + e.message + " ";
   251   }
   252   reportCompare(expectNormal, actual, status);
   254   actual = "";
   255   status = summary + ": " + word + ": strict function expression argument";
   256   try
   257   {
   258     eval("'use strict'; var s = (function foo(" + word + ") { });");
   259     actual = "no error";
   260   }
   261   catch (e)
   262   {
   263     actual = e.name;
   264     status +=  ", " + e.name + ": " + e.message + " ";
   265   }
   266   reportCompare(expectStrict, actual, status);
   268   actual = "";
   269   status = summary + ": " + word + ": function expression argument retroactively strict";
   270   try
   271   {
   272     eval("var s = (function foo(" + word + ") { 'use strict'; });");
   273     actual = "no error";
   274   }
   275   catch (e)
   276   {
   277     actual = e.name;
   278     status +=  ", " + e.name + ": " + e.message + " ";
   279   }
   280   reportCompare(expectStrict, actual, status);
   282   // USE AS ARGUMENT NAME WITH FUNCTION CONSTRUCTOR
   284   actual = "";
   285   status = summary + ": " + word + ": argument with normal Function";
   286   try
   287   {
   288     Function(word, "return 17");
   289     actual = "no error";
   290   }
   291   catch (e)
   292   {
   293     actual = e.name;
   294     status +=  ", " + e.name + ": " + e.message + " ";
   295   }
   296   reportCompare(expectNormal, actual, status);
   298   actual = "";
   299   status = summary + ": " + word + ": argument with strict Function";
   300   try
   301   {
   302     Function(word, "'use strict'; return 17");
   303     actual = "no error";
   304   }
   305   catch (e)
   306   {
   307     actual = e.name;
   308     status +=  ", " + e.name + ": " + e.message + " ";
   309   }
   310   reportCompare(expectStrict, actual, status);
   312   // USE AS ARGUMENT NAME IN PROPERTY SETTER
   314   actual = "";
   315   status = summary + ": " + word + ": normal property setter argument";
   316   try
   317   {
   318     eval("var o = { set x(" + word + ") { } };");
   319     actual = "no error";
   320   }
   321   catch (e)
   322   {
   323     actual = e.name;
   324     status +=  ", " + e.name + ": " + e.message + " ";
   325   }
   326   reportCompare(expectNormal, actual, status);
   328   actual = "";
   329   status = summary + ": " + word + ": strict property setter argument";
   330   try
   331   {
   332     eval("'use strict'; var o = { set x(" + word + ") { } };");
   333     actual = "no error";
   334   }
   335   catch (e)
   336   {
   337     actual = e.name;
   338     status +=  ", " + e.name + ": " + e.message + " ";
   339   }
   340   reportCompare(expectStrict, actual, status);
   342   actual = "";
   343   status = summary + ": " + word + ": property setter argument retroactively strict";
   344   try
   345   {
   346     eval("var o = { set x(" + word + ") { 'use strict'; } };");
   347     actual = "no error";
   348   }
   349   catch (e)
   350   {
   351     actual = e.name;
   352     status +=  ", " + e.name + ": " + e.message + " ";
   353   }
   354   reportCompare(expectStrict, actual, status);
   356   // USE AS FUNCTION NAME IN FUNCTION DECLARATION
   358   actual = "";
   359   status = summary + ": " + word + ": normal function name";
   360   try
   361   {
   362     eval("function " + word + "() { }");
   363     actual = "no error";
   364   }
   365   catch (e)
   366   {
   367     actual = e.name;
   368     status +=  ", " + e.name + ": " + e.message + " ";
   369   }
   370   reportCompare(expectNormal, actual, status);
   372   actual = "";
   373   status = summary + ": " + word + ": strict function name";
   374   try
   375   {
   376     eval("'use strict'; function " + word + "() { }");
   377     actual = "no error";
   378   }
   379   catch (e)
   380   {
   381     actual = e.name;
   382     status +=  ", " + e.name + ": " + e.message + " ";
   383   }
   384   reportCompare(expectStrict, actual, status);
   386   actual = "";
   387   status = summary + ": " + word + ": function name retroactively strict";
   388   try
   389   {
   390     eval("function " + word + "() { 'use strict'; }");
   391     actual = "no error";
   392   }
   393   catch (e)
   394   {
   395     actual = e.name;
   396     status +=  ", " + e.name + ": " + e.message + " ";
   397   }
   398   reportCompare(expectStrict, actual, status);
   400   // USE AS FUNCTION NAME IN FUNCTION EXPRESSION
   402   actual = "";
   403   status = summary + ": " + word + ": normal function expression name";
   404   try
   405   {
   406     eval("var s = (function " + word + "() { });");
   407     actual = "no error";
   408   }
   409   catch (e)
   410   {
   411     actual = e.name;
   412     status +=  ", " + e.name + ": " + e.message + " ";
   413   }
   414   reportCompare(expectNormal, actual, status);
   416   actual = "";
   417   status = summary + ": " + word + ": strict function expression name";
   418   try
   419   {
   420     eval("'use strict'; var s = (function " + word + "() { });");
   421     actual = "no error";
   422   }
   423   catch (e)
   424   {
   425     actual = e.name;
   426     status +=  ", " + e.name + ": " + e.message + " ";
   427   }
   428   reportCompare(expectStrict, actual, status);
   430   actual = "";
   431   status = summary + ": " + word + ": function expression name retroactively strict";
   432   try
   433   {
   434     eval("var s = (function " + word + "() { 'use strict'; });");
   435     actual = "no error";
   436   }
   437   catch (e)
   438   {
   439     actual = e.name;
   440     status +=  ", " + e.name + ": " + e.message + " ";
   441   }
   442   reportCompare(expectStrict, actual, status);
   443 }
   445 function testFutureReservedWord(word)
   446 {
   447   testWord(word, "SyntaxError", "SyntaxError");
   448 }
   450 function testStrictFutureReservedWord(word)
   451 {
   452   testWord(word, "no error", "SyntaxError");
   453 }
   455 futureReservedWords.forEach(testFutureReservedWord);
   456 strictFutureReservedWords.forEach(testStrictFutureReservedWord);
   458 /******************************************************************************/
   460 if (typeof reportCompare === "function")
   461   reportCompare(true, true);
   463 print("All tests passed!");

mercurial