summaryrefslogtreecommitdiffstats
path: root/js/src/tests/non262/object/isPrototypeOf.js
blob: a2d78f6507e2d8770c77b2fa2e1257e308d4eda3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/*
 * Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/licenses/publicdomain/
 */

var gTestfile = 'isPrototypeOf.js';
var BUGNUMBER = 619283;
var summary = "Object.prototype.isPrototypeOf";

print(BUGNUMBER + ": " + summary);

/**************
 * BEGIN TEST *
 **************/

function expectThrowTypeError(fun)
{
  try
  {
    var r = fun();
    throw new Error("didn't throw TypeError, returned " + r);
  }
  catch (e)
  {
    assertEq(e instanceof TypeError, true,
             "didn't throw TypeError, got: " + e);
  }
}

var isPrototypeOf = Object.prototype.isPrototypeOf;

/*
 * 1. If V is not an Object, return false.
 */
assertEq(isPrototypeOf(), false);
assertEq(isPrototypeOf(1), false);
assertEq(isPrototypeOf(Number.MAX_VALUE), false);
assertEq(isPrototypeOf(NaN), false);
assertEq(isPrototypeOf(""), false);
assertEq(isPrototypeOf("sesquicentennial"), false);
assertEq(isPrototypeOf(true), false);
assertEq(isPrototypeOf(false), false);
assertEq(isPrototypeOf(0.72), false);
assertEq(isPrototypeOf(undefined), false);
assertEq(isPrototypeOf(null), false);


/*
 * 2. Let O be the result of calling ToObject passing the this value as the
 *    argument.
 */
var protoGlobal = Object.create(this);
expectThrowTypeError(function() { isPrototypeOf.call(null, {}); });
expectThrowTypeError(function() { isPrototypeOf.call(undefined, {}); });
expectThrowTypeError(function() { isPrototypeOf({}); });
expectThrowTypeError(function() { isPrototypeOf.call(null, protoGlobal); });
expectThrowTypeError(function() { isPrototypeOf.call(undefined, protoGlobal); });
expectThrowTypeError(function() { isPrototypeOf(protoGlobal); });


/*
 * 3. Repeat
 */

/*
 * 3a. Let V be the value of the [[Prototype]] internal property of V.
 * 3b. If V is null, return false.
 */
assertEq(Object.prototype.isPrototypeOf(Object.prototype), false);
assertEq(String.prototype.isPrototypeOf({}), false);
assertEq(Object.prototype.isPrototypeOf(Object.create(null)), false);

/* 3c. If O and V refer to the same object, return true. */
assertEq(Object.prototype.isPrototypeOf({}), true);
assertEq(this.isPrototypeOf(protoGlobal), true);
assertEq(Object.prototype.isPrototypeOf({}), true);
assertEq(Object.prototype.isPrototypeOf(new Number(17)), true);
assertEq(Object.prototype.isPrototypeOf(function(){}), true);


/******************************************************************************/

if (typeof reportCompare === "function")
  reportCompare(true, true);

print("All tests passed!");