js/src/tests/ecma_5/Expressions/nested-delete-name-in-evalcode.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 // Any copyright is dedicated to the Public Domain.
     2 // http://creativecommons.org/licenses/publicdomain/
     4 //-----------------------------------------------------------------------------
     5 var BUGNUMBER = 616294;
     6 var summary =
     7   "|delete x| inside a function in eval code, where that eval code includes " +
     8   "|var x| at top level, actually does delete the binding for x";
    10 print(BUGNUMBER + ": " + summary);
    12 /**************
    13  * BEGIN TEST *
    14  **************/
    16 var f;
    18 function testOuterVar()
    19 {
    20   return eval("var x; (function() { return delete x; })");
    21 }
    23 f = testOuterVar();
    25 assertEq(f(), true); // configurable, so remove => true
    26 assertEq(f(), true); // not there => true (only non-configurable => false)
    29 function testOuterFunction()
    30 {
    31   return eval("function x() { } (function() { return delete x; })");
    32 }
    34 f = testOuterFunction();
    36 assertEq(f(), true); // configurable, so remove => true
    37 assertEq(f(), true); // not there => true (only non-configurable => false)
    40 function testOuterForVar()
    41 {
    42   return eval("for (var x; false; ); (function() { return delete x; })");
    43 }
    45 f = testOuterForVar();
    47 assertEq(f(), true); // configurable, so remove => true
    48 assertEq(f(), true); // not there => true (only non-configurable => false)
    51 function testOuterForInVar()
    52 {
    53   return eval("for (var x in {}); (function() { return delete x; })");
    54 }
    56 f = testOuterForInVar();
    58 assertEq(f(), true); // configurable, so remove => true
    59 assertEq(f(), true); // not there => true (only non-configurable => false)
    62 function testOuterNestedVar()
    63 {
    64   return eval("for (var q = 0; q < 5; q++) { var x; } (function() { return delete x; })");
    65 }
    67 f = testOuterNestedVar();
    69 assertEq(f(), true); // configurable, so remove => true
    70 assertEq(f(), true); // not there => true (only non-configurable => false)
    73 function testOuterNestedConditionalVar()
    74 {
    75   return eval("for (var q = 0; q < 5; q++) { if (false) { var x; } } (function() { return delete x; })");
    76 }
    78 f = testOuterNestedConditionalVar();
    80 assertEq(f(), true); // configurable, so remove => true
    81 assertEq(f(), true); // not there => true (only non-configurable => false)
    84 function testVarInWith()
    85 {
    86   return eval("with ({}) { var x; } (function() { return delete x; })");
    87 }
    89 f = testVarInWith();
    91 assertEq(f(), true); // configurable, so remove => true
    92 assertEq(f(), true); // not there => true (only non-configurable => false)
    95 function testForVarInWith()
    96 {
    97   return eval("with ({}) { for (var x = 0; x < 5; x++); } (function() { return delete x; })");
    98 }
   100 f = testForVarInWith();
   102 assertEq(f(), true); // configurable, so remove => true
   103 assertEq(f(), true); // not there => true (only non-configurable => false)
   106 function testForInVarInWith()
   107 {
   108   return eval("with ({}) { for (var x in {}); } (function() { return delete x; })");
   109 }
   111 f = testForInVarInWith();
   113 assertEq(f(), true); // configurable, so remove => true
   114 assertEq(f(), true); // not there => true (only non-configurable => false)
   117 function testUnknown()
   118 {
   119   return eval("nameToDelete = 17; (function() { return delete nameToDelete; })");
   120 }
   122 f = testUnknown();
   124 assertEq(f(), true); // configurable global property, so remove => true
   125 assertEq(f(), true); // not there => true (only non-configurable => false)
   128 function testArgumentShadow()
   129 {
   130   return eval("var x; (function(x) { return delete x; })");
   131 }
   133 f = testArgumentShadow();
   135 assertEq(f(), false); // non-configurable argument => false
   138 function testArgument()
   139 {
   140   return eval("(function(x) { return delete x; })");
   141 }
   143 f = testArgument();
   145 assertEq(f(), false); // non-configurable argument => false
   148 function testFunctionLocal()
   149 {
   150   return eval("(function() { var x; return delete x; })");
   151 }
   153 f = testFunctionLocal();
   155 assertEq(f(), false); // defined by function code => not configurable => false
   158 /******************************************************************************/
   160 if (typeof reportCompare === "function")
   161   reportCompare(true, true);
   163 print("All tests passed!");

mercurial