880af6e0789dc18bbad3a0afbbf5ad9a85ec135e
[WebKit-https.git] / Source / JavaScriptCore / tests / stress / generator-this.js
1 function shouldBe(actual, expected) {
2     if (actual !== expected)
3         throw new Error('bad value: ' + actual);
4 }
5
6 function shouldThrow(func, errorMessage) {
7     var errorThrown = false;
8     var error = null;
9     try {
10         func();
11     } catch (e) {
12         errorThrown = true;
13         error = e;
14     }
15     if (!errorThrown)
16         throw new Error('not thrown');
17     if (String(error) !== errorMessage)
18         throw new Error(`bad error: ${String(error)}`);
19 }
20
21
22 var global = new Function('return this')();
23
24 (function () {
25     function *gen() {
26         yield this;
27     }
28
29     {
30         let g = gen();
31         shouldBe(g.next().value, global);
32     }
33     {
34         let g = new gen();
35         shouldThrow(() => {
36             g.next();
37         }, `ReferenceError: Cannot access uninitialized variable.`);
38     }
39     {
40         let thisObject = {};
41         let g = gen.call(thisObject);
42         shouldBe(g.next().value, thisObject);
43     }
44 }());
45
46 (function () {
47     function *gen() {
48         "use strict";
49         yield this;
50     }
51
52     {
53         let g = gen();
54         shouldBe(g.next().value, undefined);
55     }
56     {
57         let g = new gen();
58         shouldThrow(() => {
59             g.next();
60         }, `ReferenceError: Cannot access uninitialized variable.`);
61     }
62     {
63         let thisObject = {};
64         let g = gen.call(thisObject);
65         shouldBe(g.next().value, thisObject);
66     }
67 }());