• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright 2015 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Flags: --allow-natives-syntax
6
7function CreateConstructableProxy(handler) {
8  return new Proxy(function(){}, handler);
9}
10
11(function() {
12  var prototype = { x: 1 };
13  var log = [];
14
15  var proxy = CreateConstructableProxy({
16    get(k) {
17      log.push("get trap");
18      return prototype;
19    }});
20
21  var o = Reflect.construct(Number, [100], proxy);
22  assertEquals(["get trap"], log);
23  assertTrue(Object.getPrototypeOf(o) === prototype);
24  assertEquals(100, Number.prototype.valueOf.call(o));
25})();
26
27(function() {
28  var prototype = { x: 1 };
29  var log = [];
30
31  var proxy = CreateConstructableProxy({
32    get(k) {
33      log.push("get trap");
34      return 10;
35    }});
36
37  var o = Reflect.construct(Number, [100], proxy);
38  assertEquals(["get trap"], log);
39  assertTrue(Object.getPrototypeOf(o) === Number.prototype);
40  assertEquals(100, Number.prototype.valueOf.call(o));
41})();
42
43(function() {
44  var prototype = { x: 1 };
45  var log = [];
46
47  var proxy = CreateConstructableProxy({
48    get(k) {
49      log.push("get trap");
50      return prototype;
51    }});
52
53  var o = Reflect.construct(Function, ["return 1000"], proxy);
54  assertEquals(["get trap"], log);
55  assertTrue(Object.getPrototypeOf(o) === prototype);
56  assertEquals(1000, o());
57})();
58
59(function() {
60  var prototype = { x: 1 };
61  var log = [];
62
63  var proxy = CreateConstructableProxy({
64    get(k) {
65      log.push("get trap");
66      return prototype;
67    }});
68
69  var o = Reflect.construct(Array, [1, 2, 3], proxy);
70  assertEquals(["get trap"], log);
71  assertTrue(Object.getPrototypeOf(o) === prototype);
72  assertEquals([1, 2, 3], o);
73})();
74