| /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ |
| /* |
| * Any copyright is dedicated to the Public Domain. |
| * http://creativecommons.org/licenses/publicdomain/ |
| * Contributor: |
| */ |
| var BUGNUMBER = 632003; |
| var summary = 'The var statement should add the property to the global if it exists on the prototype'; |
| |
| // Define properties on Object.prototype with various attributes and |
| // value-getter-setter combinations then check that a var statement |
| // can always define a variable with the same name in the global object. |
| |
| if (typeof evaluate != "undefined") { |
| var global_case = def_all("global_case"); |
| evaluate(global_case.source); |
| check_values(this, global_case.var_list); |
| } |
| |
| var eval_case = def_all("eval_case"); |
| eval(eval_case.source); |
| check_values(this, eval_case.var_list); |
| |
| function def_all(prefix) |
| { |
| var builder, index, i, j; |
| |
| builder = {source: "", var_list: []}; |
| index = 0; |
| for (i = 0; i <= 1; ++i) { |
| for (j = 0; j <= 1; ++j) { |
| def({value: index}); |
| def({value: index, writable: true}); |
| def({get: Function("return "+index+";")}); |
| def({set: function() { }}); |
| def({get: Function("return "+index+";"), set: function() { }}); |
| } |
| } |
| return builder; |
| |
| function def(descriptor_seed) |
| { |
| var var_name = prefix + index; |
| descriptor_seed.configurable = !!i; |
| descriptor_seed.enumerable = !!j; |
| Object.defineProperty(Object.prototype, var_name, descriptor_seed); |
| var var_value = index + 0.5; |
| builder.source += "var "+var_name+" = "+var_value+";\n"; |
| builder.var_list.push({name: var_name, expected_value: var_value}); |
| ++index; |
| } |
| } |
| |
| function check_values(obj, var_list) |
| { |
| for (i = 0; i != var_list.length; ++i) { |
| var name = var_list[i].name; |
| assertEq(obj.hasOwnProperty(name), true); |
| assertEq(obj[name], var_list[i].expected_value); |
| } |
| } |
| |
| reportCompare(true, true); |