tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

regress-bug632003.js (1866B)


      1 /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
      2 /*
      3 * Any copyright is dedicated to the Public Domain.
      4 * http://creativecommons.org/licenses/publicdomain/
      5 * Contributor: 
      6 */
      7 var BUGNUMBER = 632003;
      8 var summary = 'The var statement should add the property to the global if it exists on the prototype';
      9 
     10 // Define properties on Object.prototype with various attributes and
     11 // value-getter-setter combinations then check that a var statement
     12 // can always define a variable with the same name in the global object.
     13 
     14 if (typeof evaluate != "undefined") {
     15  var global_case = def_all("global_case");
     16  evaluate(global_case.source);
     17  check_values(this, global_case.var_list);
     18 }
     19 
     20 var eval_case = def_all("eval_case");
     21 eval(eval_case.source);
     22 check_values(this, eval_case.var_list);
     23 
     24 function def_all(prefix)
     25 {
     26  var builder, index, i, j;
     27 
     28  builder = {source: "", var_list: []};
     29  index = 0;
     30  for (i = 0; i <= 1; ++i) {
     31    for (j = 0; j <= 1; ++j) {
     32      def({value: index});
     33      def({value: index, writable: true});
     34      def({get: Function("return "+index+";")});
     35      def({set: function() { }});
     36      def({get: Function("return "+index+";"), set: function() { }});
     37    }
     38  }
     39  return builder;
     40  
     41  function def(descriptor_seed)
     42  {
     43    var var_name = prefix + index;
     44    descriptor_seed.configurable = !!i;
     45    descriptor_seed.enumerable = !!j;
     46    Object.defineProperty(Object.prototype, var_name, descriptor_seed);
     47    var var_value = index + 0.5;
     48    builder.source += "var "+var_name+" = "+var_value+";\n";
     49    builder.var_list.push({name: var_name, expected_value: var_value});
     50    ++index;
     51  }
     52 }
     53 
     54 function check_values(obj, var_list)
     55 {
     56  for (i = 0; i != var_list.length; ++i) {
     57    var name = var_list[i].name;
     58    assertEq(obj.hasOwnProperty(name), true);
     59    assertEq(obj[name], var_list[i].expected_value);
     60  }
     61 }
     62 
     63 reportCompare(true, true);