Skip to content

Commit c6a1ff3

Browse files
committed
add a test for async private methods with a higher target
Signed-off-by: Kubilay Kahveci <kahvecikubilay@gmail.com>
1 parent caee8fb commit c6a1ff3

File tree

4 files changed

+198
-0
lines changed

4 files changed

+198
-0
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
//// [privateNameMethodAsync.ts]
2+
const C = class {
3+
async #bar() { return await Promise.resolve(42); }
4+
async foo() {
5+
const b = await this.#bar();
6+
return b + (this.#baz().next().value || 0) + ((await this.#qux().next()).value || 0);
7+
}
8+
*#baz() { yield 42; }
9+
async *#qux() {
10+
yield (await Promise.resolve(42));
11+
}
12+
}
13+
14+
new C().foo().then(console.log);
15+
16+
17+
//// [privateNameMethodAsync.js]
18+
var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, instances, fn) {
19+
if (!instances.has(receiver)) {
20+
throw new TypeError("attempted to get private method on non-instance");
21+
}
22+
return fn;
23+
};
24+
var _C_bar, _C_baz, _C_qux, _C_instances, _a;
25+
const C = (_a = class {
26+
constructor() {
27+
_C_instances.add(this);
28+
}
29+
async foo() {
30+
const b = await __classPrivateMethodGet(this, _C_instances, _C_bar).call(this);
31+
return b + (__classPrivateMethodGet(this, _C_instances, _C_baz).call(this).next().value || 0) + ((await __classPrivateMethodGet(this, _C_instances, _C_qux).call(this).next()).value || 0);
32+
}
33+
},
34+
_C_instances = new WeakSet(),
35+
_C_bar = async function _C_bar() { return await Promise.resolve(42); },
36+
_C_baz = function* _C_baz() { yield 42; },
37+
_C_qux = async function* _C_qux() {
38+
yield (await Promise.resolve(42));
39+
},
40+
_a);
41+
new C().foo().then(console.log);
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
=== tests/cases/conformance/classes/members/privateNames/privateNameMethodAsync.ts ===
2+
const C = class {
3+
>C : Symbol(C, Decl(privateNameMethodAsync.ts, 0, 5))
4+
5+
async #bar() { return await Promise.resolve(42); }
6+
>#bar : Symbol(C.#bar, Decl(privateNameMethodAsync.ts, 0, 17))
7+
>Promise.resolve : Symbol(PromiseConstructor.resolve, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --))
8+
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --))
9+
>resolve : Symbol(PromiseConstructor.resolve, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --))
10+
11+
async foo() {
12+
>foo : Symbol(C.foo, Decl(privateNameMethodAsync.ts, 1, 54))
13+
14+
const b = await this.#bar();
15+
>b : Symbol(b, Decl(privateNameMethodAsync.ts, 3, 13))
16+
>this.#bar : Symbol(C.#bar, Decl(privateNameMethodAsync.ts, 0, 17))
17+
>this : Symbol(C, Decl(privateNameMethodAsync.ts, 0, 9))
18+
19+
return b + (this.#baz().next().value || 0) + ((await this.#qux().next()).value || 0);
20+
>b : Symbol(b, Decl(privateNameMethodAsync.ts, 3, 13))
21+
>this.#baz().next().value : Symbol(value, Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --))
22+
>this.#baz().next : Symbol(Generator.next, Decl(lib.es2015.generator.d.ts, --, --))
23+
>this.#baz : Symbol(C.#baz, Decl(privateNameMethodAsync.ts, 5, 5))
24+
>this : Symbol(C, Decl(privateNameMethodAsync.ts, 0, 9))
25+
>next : Symbol(Generator.next, Decl(lib.es2015.generator.d.ts, --, --))
26+
>value : Symbol(value, Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --))
27+
>(await this.#qux().next()).value : Symbol(value, Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --))
28+
>this.#qux().next : Symbol(AsyncGenerator.next, Decl(lib.es2018.asyncgenerator.d.ts, --, --))
29+
>this.#qux : Symbol(C.#qux, Decl(privateNameMethodAsync.ts, 6, 25))
30+
>this : Symbol(C, Decl(privateNameMethodAsync.ts, 0, 9))
31+
>next : Symbol(AsyncGenerator.next, Decl(lib.es2018.asyncgenerator.d.ts, --, --))
32+
>value : Symbol(value, Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --))
33+
}
34+
*#baz() { yield 42; }
35+
>#baz : Symbol(C.#baz, Decl(privateNameMethodAsync.ts, 5, 5))
36+
37+
async *#qux() {
38+
>#qux : Symbol(C.#qux, Decl(privateNameMethodAsync.ts, 6, 25))
39+
40+
yield (await Promise.resolve(42));
41+
>Promise.resolve : Symbol(PromiseConstructor.resolve, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --))
42+
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --))
43+
>resolve : Symbol(PromiseConstructor.resolve, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --))
44+
}
45+
}
46+
47+
new C().foo().then(console.log);
48+
>new C().foo().then : Symbol(Promise.then, Decl(lib.es5.d.ts, --, --))
49+
>new C().foo : Symbol(C.foo, Decl(privateNameMethodAsync.ts, 1, 54))
50+
>C : Symbol(C, Decl(privateNameMethodAsync.ts, 0, 5))
51+
>foo : Symbol(C.foo, Decl(privateNameMethodAsync.ts, 1, 54))
52+
>then : Symbol(Promise.then, Decl(lib.es5.d.ts, --, --))
53+
>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
54+
>console : Symbol(console, Decl(lib.dom.d.ts, --, --))
55+
>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
56+
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
=== tests/cases/conformance/classes/members/privateNames/privateNameMethodAsync.ts ===
2+
const C = class {
3+
>C : typeof C
4+
>class { async #bar() { return await Promise.resolve(42); } async foo() { const b = await this.#bar(); return b + (this.#baz().next().value || 0) + ((await this.#qux().next()).value || 0); } *#baz() { yield 42; } async *#qux() { yield (await Promise.resolve(42)); }} : typeof C
5+
6+
async #bar() { return await Promise.resolve(42); }
7+
>#bar : () => Promise<number>
8+
>await Promise.resolve(42) : number
9+
>Promise.resolve(42) : Promise<number>
10+
>Promise.resolve : { (): Promise<void>; <T>(value: T | PromiseLike<T>): Promise<T>; }
11+
>Promise : PromiseConstructor
12+
>resolve : { (): Promise<void>; <T>(value: T | PromiseLike<T>): Promise<T>; }
13+
>42 : 42
14+
15+
async foo() {
16+
>foo : () => Promise<number>
17+
18+
const b = await this.#bar();
19+
>b : number
20+
>await this.#bar() : number
21+
>this.#bar() : Promise<number>
22+
>this.#bar : () => Promise<number>
23+
>this : this
24+
25+
return b + (this.#baz().next().value || 0) + ((await this.#qux().next()).value || 0);
26+
>b + (this.#baz().next().value || 0) + ((await this.#qux().next()).value || 0) : number
27+
>b + (this.#baz().next().value || 0) : number
28+
>b : number
29+
>(this.#baz().next().value || 0) : number
30+
>this.#baz().next().value || 0 : number
31+
>this.#baz().next().value : number | void
32+
>this.#baz().next() : IteratorResult<number, void>
33+
>this.#baz().next : (...args: [] | [unknown]) => IteratorResult<number, void>
34+
>this.#baz() : Generator<number, void, unknown>
35+
>this.#baz : () => Generator<number, void, unknown>
36+
>this : this
37+
>next : (...args: [] | [unknown]) => IteratorResult<number, void>
38+
>value : number | void
39+
>0 : 0
40+
>((await this.#qux().next()).value || 0) : number
41+
>(await this.#qux().next()).value || 0 : number
42+
>(await this.#qux().next()).value : number | void
43+
>(await this.#qux().next()) : IteratorResult<number, void>
44+
>await this.#qux().next() : IteratorResult<number, void>
45+
>this.#qux().next() : Promise<IteratorResult<number, void>>
46+
>this.#qux().next : (...args: [] | [unknown]) => Promise<IteratorResult<number, void>>
47+
>this.#qux() : AsyncGenerator<number, void, unknown>
48+
>this.#qux : () => AsyncGenerator<number, void, unknown>
49+
>this : this
50+
>next : (...args: [] | [unknown]) => Promise<IteratorResult<number, void>>
51+
>value : number | void
52+
>0 : 0
53+
}
54+
*#baz() { yield 42; }
55+
>#baz : () => Generator<number, void, unknown>
56+
>yield 42 : any
57+
>42 : 42
58+
59+
async *#qux() {
60+
>#qux : () => AsyncGenerator<number, void, unknown>
61+
62+
yield (await Promise.resolve(42));
63+
>yield (await Promise.resolve(42)) : any
64+
>(await Promise.resolve(42)) : number
65+
>await Promise.resolve(42) : number
66+
>Promise.resolve(42) : Promise<number>
67+
>Promise.resolve : { (): Promise<void>; <T>(value: T | PromiseLike<T>): Promise<T>; }
68+
>Promise : PromiseConstructor
69+
>resolve : { (): Promise<void>; <T>(value: T | PromiseLike<T>): Promise<T>; }
70+
>42 : 42
71+
}
72+
}
73+
74+
new C().foo().then(console.log);
75+
>new C().foo().then(console.log) : Promise<void>
76+
>new C().foo().then : <TResult1 = number, TResult2 = never>(onfulfilled?: (value: number) => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
77+
>new C().foo() : Promise<number>
78+
>new C().foo : () => Promise<number>
79+
>new C() : C
80+
>C : typeof C
81+
>foo : () => Promise<number>
82+
>then : <TResult1 = number, TResult2 = never>(onfulfilled?: (value: number) => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
83+
>console.log : (...data: any[]) => void
84+
>console : Console
85+
>log : (...data: any[]) => void
86+
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// @target: es2019
2+
3+
const C = class {
4+
async #bar() { return await Promise.resolve(42); }
5+
async foo() {
6+
const b = await this.#bar();
7+
return b + (this.#baz().next().value || 0) + ((await this.#qux().next()).value || 0);
8+
}
9+
*#baz() { yield 42; }
10+
async *#qux() {
11+
yield (await Promise.resolve(42));
12+
}
13+
}
14+
15+
new C().foo().then(console.log);

0 commit comments

Comments
 (0)