Promise constructor should check argument before [[Construct]]
[WebKit.git] / JSTests / stress / create-subclass-structure-might-throw.js
1 function assert(b) {
2     if (!b)
3         throw new Error("bad assertion.");
4 }
5
6 let targets = [Function, String, Array, Set, Map, WeakSet, WeakMap, RegExp, Number, Promise, Date, Boolean, Error, TypeError, SyntaxError, ArrayBuffer, Int32Array, Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array, Uint32Array, Float32Array, Float64Array, DataView];
7 for (let target of targets) {
8     let error = null;
9     let called = false;
10     let handler = {
11         get: function(theTarget, propName) {
12             assert(propName === "prototype");
13             error = new Error;
14             called = true;
15             throw error;
16         }
17     };
18
19     let proxy = new Proxy(target, handler);
20
21     for (let i = 0; i < 500; i++) {
22         let threw = false;
23         try {
24             if (target === Promise)
25                 new proxy(function() {});
26             else
27                 new proxy;
28         } catch(e) {
29             threw = true;
30             assert(e === error);
31             error = null;
32         }
33         assert(threw);
34         assert(called);
35         called = false;
36     }
37 }