| /* |
| * Any copyright is dedicated to the Public Domain. |
| * http://creativecommons.org/licenses/publicdomain/ |
| */ |
| |
| var gTestfile = 'propertyIsEnumerable.js'; |
| var BUGNUMBER = 619283; |
| var summary = "Object.prototype.propertyIsEnumerable"; |
| |
| print(BUGNUMBER + ": " + summary); |
| |
| /************** |
| * BEGIN TEST * |
| **************/ |
| |
| function expectThrowError(errorCtor, fun) |
| { |
| try |
| { |
| var r = fun(); |
| throw "didn't throw TypeError, returned " + r; |
| } |
| catch (e) |
| { |
| assertEq(e instanceof errorCtor, true, |
| "didn't throw " + errorCtor.prototype.name + ", got: " + e); |
| } |
| } |
| |
| function expectThrowTypeError(fun) |
| { |
| expectThrowError(TypeError, fun); |
| } |
| |
| function withToString(fun) |
| { |
| return { toString: fun }; |
| } |
| |
| function withValueOf(fun) |
| { |
| return { toString: null, valueOf: fun }; |
| } |
| |
| var propertyIsEnumerable = Object.prototype.propertyIsEnumerable; |
| |
| /* |
| * 1. Let P be ToString(V). |
| */ |
| expectThrowError(ReferenceError, function() |
| { |
| propertyIsEnumerable(withToString(function() { fahslkjdfhlkjdsl; })); |
| }); |
| expectThrowError(ReferenceError, function() |
| { |
| propertyIsEnumerable.call(null, withToString(function() { fahslkjdfhlkjdsl; })); |
| }); |
| expectThrowError(ReferenceError, function() |
| { |
| propertyIsEnumerable.call(undefined, withToString(function() { fahslkjdfhlkjdsl; })); |
| }); |
| |
| expectThrowError(ReferenceError, function() |
| { |
| propertyIsEnumerable(withValueOf(function() { fahslkjdfhlkjdsl; })); |
| }); |
| expectThrowError(ReferenceError, function() |
| { |
| propertyIsEnumerable.call(null, withValueOf(function() { fahslkjdfhlkjdsl; })); |
| }); |
| expectThrowError(ReferenceError, function() |
| { |
| propertyIsEnumerable.call(undefined, withValueOf(function() { fahslkjdfhlkjdsl; })); |
| }); |
| |
| expectThrowError(SyntaxError, function() |
| { |
| propertyIsEnumerable(withToString(function() { eval("}"); })); |
| }); |
| expectThrowError(SyntaxError, function() |
| { |
| propertyIsEnumerable.call(null, withToString(function() { eval("}"); })); |
| }); |
| expectThrowError(SyntaxError, function() |
| { |
| propertyIsEnumerable.call(undefined, withToString(function() { eval("}"); })); |
| }); |
| |
| expectThrowError(SyntaxError, function() |
| { |
| propertyIsEnumerable(withValueOf(function() { eval("}"); })); |
| }); |
| expectThrowError(SyntaxError, function() |
| { |
| propertyIsEnumerable.call(null, withValueOf(function() { eval("}"); })); |
| }); |
| expectThrowError(SyntaxError, function() |
| { |
| propertyIsEnumerable.call(undefined, withValueOf(function() { eval("}"); })); |
| }); |
| |
| expectThrowError(RangeError, function() |
| { |
| propertyIsEnumerable(withToString(function() { [].length = -1; })); |
| }); |
| expectThrowError(RangeError, function() |
| { |
| propertyIsEnumerable.call(null, withToString(function() { [].length = -1; })); |
| }); |
| expectThrowError(RangeError, function() |
| { |
| propertyIsEnumerable.call(undefined, withToString(function() { [].length = -1; })); |
| }); |
| |
| expectThrowError(RangeError, function() |
| { |
| propertyIsEnumerable(withValueOf(function() { [].length = -1; })); |
| }); |
| expectThrowError(RangeError, function() |
| { |
| propertyIsEnumerable.call(null, withValueOf(function() { [].length = -1; })); |
| }); |
| expectThrowError(RangeError, function() |
| { |
| propertyIsEnumerable.call(undefined, withValueOf(function() { [].length = -1; })); |
| }); |
| |
| expectThrowError(RangeError, function() |
| { |
| propertyIsEnumerable(withToString(function() { [].length = 0.7; })); |
| }); |
| expectThrowError(RangeError, function() |
| { |
| propertyIsEnumerable.call(null, withToString(function() { [].length = 0.7; })); |
| }); |
| expectThrowError(RangeError, function() |
| { |
| propertyIsEnumerable.call(undefined, withToString(function() { [].length = 0.7; })); |
| }); |
| |
| expectThrowError(RangeError, function() |
| { |
| propertyIsEnumerable(withValueOf(function() { [].length = 0.7; })); |
| }); |
| expectThrowError(RangeError, function() |
| { |
| propertyIsEnumerable.call(null, withValueOf(function() { [].length = 0.7; })); |
| }); |
| expectThrowError(RangeError, function() |
| { |
| propertyIsEnumerable.call(undefined, withValueOf(function() { [].length = 0.7; })); |
| }); |
| |
| /* |
| * 2. Let O be the result of calling ToObject passing the this value as the |
| * argument. |
| */ |
| expectThrowTypeError(function() { propertyIsEnumerable("s"); }); |
| expectThrowTypeError(function() { propertyIsEnumerable.call(null, "s"); }); |
| expectThrowTypeError(function() { propertyIsEnumerable.call(undefined, "s"); }); |
| expectThrowTypeError(function() { propertyIsEnumerable(true); }); |
| expectThrowTypeError(function() { propertyIsEnumerable.call(null, true); }); |
| expectThrowTypeError(function() { propertyIsEnumerable.call(undefined, true); }); |
| expectThrowTypeError(function() { propertyIsEnumerable(NaN); }); |
| expectThrowTypeError(function() { propertyIsEnumerable.call(null, NaN); }); |
| expectThrowTypeError(function() { propertyIsEnumerable.call(undefined, NaN); }); |
| |
| expectThrowTypeError(function() { propertyIsEnumerable({}); }); |
| expectThrowTypeError(function() { propertyIsEnumerable.call(null, {}); }); |
| expectThrowTypeError(function() { propertyIsEnumerable.call(undefined, {}); }); |
| |
| /* |
| * 3. Let desc be the result of calling the [[GetOwnProperty]] internal method |
| * of O passing P as the argument. |
| * 4. If desc is undefined, return false. |
| */ |
| assertEq(propertyIsEnumerable.call({}, "valueOf"), false); |
| assertEq(propertyIsEnumerable.call({}, "toString"), false); |
| assertEq(propertyIsEnumerable.call("s", 1), false); |
| assertEq(propertyIsEnumerable.call({}, "dsfiodjfs"), false); |
| assertEq(propertyIsEnumerable.call(true, "toString"), false); |
| assertEq(propertyIsEnumerable.call({}, "__proto__"), false); |
| |
| assertEq(propertyIsEnumerable.call(Object, "getOwnPropertyDescriptor"), false); |
| assertEq(propertyIsEnumerable.call(this, "expectThrowTypeError"), true); |
| assertEq(propertyIsEnumerable.call("s", "length"), false); |
| assertEq(propertyIsEnumerable.call("s", 0), true); |
| assertEq(propertyIsEnumerable.call(Number, "MAX_VALUE"), false); |
| assertEq(propertyIsEnumerable.call({ x: 9 }, "x"), true); |
| assertEq(propertyIsEnumerable.call(function() { }, "prototype"), false); |
| assertEq(propertyIsEnumerable.call(function() { }, "length"), false); |
| assertEq(propertyIsEnumerable.call(function() { "use strict"; }, "caller"), false); |
| |
| /******************************************************************************/ |
| |
| if (typeof reportCompare === "function") |
| reportCompare(true, true); |
| |
| print("All tests passed!"); |