summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/built-ins/Proxy/setPrototypeOf/trap-is-undefined-or-null.js
blob: 84fa1c2d77cea3ccd5ab579ed54f26662a32983a (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
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-proxy-object-internal-methods-and-internal-slots-setprototypeof-v
description: >
  Return target.[[SetPrototypeOf]] (V) if trap is undefined or null.
info: |
  [[SetPrototypeOf]] (V)

  6. Let trap be ? GetMethod(handler, "setPrototypeOf").
  7. If trap is undefined, then
    a. Return ? target.[[SetPrototypeOf]](V).

  GetMethod (V, P)

  2. Let func be ? GetV(V, P).
  3. If func is either undefined or null, return undefined.
features: [Proxy]
---*/

var proxy, called, value;
var target = new Proxy({}, {
  setPrototypeOf: function(t, v) {
    called += 1;
    value = v;
    return true;
  }
});
var proto = {};

proxy = new Proxy(target, {});
called = 0;
value = false;
Object.setPrototypeOf(proxy, proto);
assert.sameValue(called, 1, "undefined, target.[[SetPrototypeOf]] is called");
assert.sameValue(value, proto, "undefined, called with V");

proxy = new Proxy(target, {
  setPrototypeOf: null
});
called = 0;
value = false;
Object.setPrototypeOf(proxy, proto);
assert.sameValue(called, 1, "null, target.[[SetPrototypeOf]] is called");
assert.sameValue(value, proto, "null, called with V");

reportCompare(0, 0);