Add a test for emit of a computed property based on an aliased symbol (#47978)

This commit is contained in:
Mateusz Burzyński
2022-03-05 02:35:19 +01:00
committed by GitHub
parent 857889a4e6
commit c1783b28e7
4 changed files with 261 additions and 0 deletions

View File

@@ -0,0 +1,65 @@
//// [symbolProperty61.ts]
declare global {
interface SymbolConstructor {
readonly obs: symbol
}
}
const observable: typeof Symbol.obs = Symbol.obs
export class MyObservable<T> {
constructor(private _val: T) {}
subscribe(next: (val: T) => void) {
next(this._val)
}
[observable]() {
return this
}
}
type InteropObservable<T> = {
[Symbol.obs]: () => { subscribe(next: (val: T) => void): void }
}
function from<T>(obs: InteropObservable<T>) {
return obs[Symbol.obs]()
}
from(new MyObservable(42))
//// [symbolProperty61.js]
const observable = Symbol.obs;
export class MyObservable {
constructor(_val) {
this._val = _val;
}
subscribe(next) {
next(this._val);
}
[observable]() {
return this;
}
}
function from(obs) {
return obs[Symbol.obs]();
}
from(new MyObservable(42));
//// [symbolProperty61.d.ts]
declare global {
interface SymbolConstructor {
readonly obs: symbol;
}
}
declare const observable: typeof Symbol.obs;
export declare class MyObservable<T> {
private _val;
constructor(_val: T);
subscribe(next: (val: T) => void): void;
[observable](): this;
}
export {};

View File

@@ -0,0 +1,84 @@
=== tests/cases/conformance/es6/Symbols/symbolProperty61.ts ===
declare global {
>global : Symbol(global, Decl(symbolProperty61.ts, 0, 0))
interface SymbolConstructor {
>SymbolConstructor : Symbol(SymbolConstructor, Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(symbolProperty61.ts, 0, 16))
readonly obs: symbol
>obs : Symbol(SymbolConstructor.obs, Decl(symbolProperty61.ts, 1, 31))
}
}
const observable: typeof Symbol.obs = Symbol.obs
>observable : Symbol(observable, Decl(symbolProperty61.ts, 6, 5))
>Symbol.obs : Symbol(SymbolConstructor.obs, Decl(symbolProperty61.ts, 1, 31))
>Symbol : Symbol(Symbol, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
>obs : Symbol(SymbolConstructor.obs, Decl(symbolProperty61.ts, 1, 31))
>Symbol.obs : Symbol(SymbolConstructor.obs, Decl(symbolProperty61.ts, 1, 31))
>Symbol : Symbol(Symbol, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
>obs : Symbol(SymbolConstructor.obs, Decl(symbolProperty61.ts, 1, 31))
export class MyObservable<T> {
>MyObservable : Symbol(MyObservable, Decl(symbolProperty61.ts, 6, 48))
>T : Symbol(T, Decl(symbolProperty61.ts, 8, 26))
constructor(private _val: T) {}
>_val : Symbol(MyObservable._val, Decl(symbolProperty61.ts, 9, 16))
>T : Symbol(T, Decl(symbolProperty61.ts, 8, 26))
subscribe(next: (val: T) => void) {
>subscribe : Symbol(MyObservable.subscribe, Decl(symbolProperty61.ts, 9, 35))
>next : Symbol(next, Decl(symbolProperty61.ts, 11, 14))
>val : Symbol(val, Decl(symbolProperty61.ts, 11, 21))
>T : Symbol(T, Decl(symbolProperty61.ts, 8, 26))
next(this._val)
>next : Symbol(next, Decl(symbolProperty61.ts, 11, 14))
>this._val : Symbol(MyObservable._val, Decl(symbolProperty61.ts, 9, 16))
>this : Symbol(MyObservable, Decl(symbolProperty61.ts, 6, 48))
>_val : Symbol(MyObservable._val, Decl(symbolProperty61.ts, 9, 16))
}
[observable]() {
>[observable] : Symbol(MyObservable[observable], Decl(symbolProperty61.ts, 13, 5))
>observable : Symbol(observable, Decl(symbolProperty61.ts, 6, 5))
return this
>this : Symbol(MyObservable, Decl(symbolProperty61.ts, 6, 48))
}
}
type InteropObservable<T> = {
>InteropObservable : Symbol(InteropObservable, Decl(symbolProperty61.ts, 18, 1))
>T : Symbol(T, Decl(symbolProperty61.ts, 20, 23))
[Symbol.obs]: () => { subscribe(next: (val: T) => void): void }
>[Symbol.obs] : Symbol([Symbol.obs], Decl(symbolProperty61.ts, 20, 29))
>Symbol.obs : Symbol(SymbolConstructor.obs, Decl(symbolProperty61.ts, 1, 31))
>Symbol : Symbol(Symbol, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
>obs : Symbol(SymbolConstructor.obs, Decl(symbolProperty61.ts, 1, 31))
>subscribe : Symbol(subscribe, Decl(symbolProperty61.ts, 21, 25))
>next : Symbol(next, Decl(symbolProperty61.ts, 21, 36))
>val : Symbol(val, Decl(symbolProperty61.ts, 21, 43))
>T : Symbol(T, Decl(symbolProperty61.ts, 20, 23))
}
function from<T>(obs: InteropObservable<T>) {
>from : Symbol(from, Decl(symbolProperty61.ts, 22, 1))
>T : Symbol(T, Decl(symbolProperty61.ts, 24, 14))
>obs : Symbol(obs, Decl(symbolProperty61.ts, 24, 17))
>InteropObservable : Symbol(InteropObservable, Decl(symbolProperty61.ts, 18, 1))
>T : Symbol(T, Decl(symbolProperty61.ts, 24, 14))
return obs[Symbol.obs]()
>obs : Symbol(obs, Decl(symbolProperty61.ts, 24, 17))
>Symbol.obs : Symbol(SymbolConstructor.obs, Decl(symbolProperty61.ts, 1, 31))
>Symbol : Symbol(Symbol, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
>obs : Symbol(SymbolConstructor.obs, Decl(symbolProperty61.ts, 1, 31))
}
from(new MyObservable(42))
>from : Symbol(from, Decl(symbolProperty61.ts, 22, 1))
>MyObservable : Symbol(MyObservable, Decl(symbolProperty61.ts, 6, 48))

View File

@@ -0,0 +1,80 @@
=== tests/cases/conformance/es6/Symbols/symbolProperty61.ts ===
declare global {
>global : any
interface SymbolConstructor {
readonly obs: symbol
>obs : unique symbol
}
}
const observable: typeof Symbol.obs = Symbol.obs
>observable : unique symbol
>Symbol.obs : unique symbol
>Symbol : SymbolConstructor
>obs : unique symbol
>Symbol.obs : unique symbol
>Symbol : SymbolConstructor
>obs : unique symbol
export class MyObservable<T> {
>MyObservable : MyObservable<T>
constructor(private _val: T) {}
>_val : T
subscribe(next: (val: T) => void) {
>subscribe : (next: (val: T) => void) => void
>next : (val: T) => void
>val : T
next(this._val)
>next(this._val) : void
>next : (val: T) => void
>this._val : T
>this : this
>_val : T
}
[observable]() {
>[observable] : () => this
>observable : unique symbol
return this
>this : this
}
}
type InteropObservable<T> = {
>InteropObservable : InteropObservable<T>
[Symbol.obs]: () => { subscribe(next: (val: T) => void): void }
>[Symbol.obs] : () => { subscribe(next: (val: T) => void): void; }
>Symbol.obs : unique symbol
>Symbol : SymbolConstructor
>obs : unique symbol
>subscribe : (next: (val: T) => void) => void
>next : (val: T) => void
>val : T
}
function from<T>(obs: InteropObservable<T>) {
>from : <T>(obs: InteropObservable<T>) => { subscribe(next: (val: T) => void): void; }
>obs : InteropObservable<T>
return obs[Symbol.obs]()
>obs[Symbol.obs]() : { subscribe(next: (val: T) => void): void; }
>obs[Symbol.obs] : () => { subscribe(next: (val: T) => void): void; }
>obs : InteropObservable<T>
>Symbol.obs : unique symbol
>Symbol : SymbolConstructor
>obs : unique symbol
}
from(new MyObservable(42))
>from(new MyObservable(42)) : { subscribe(next: (val: number) => void): void; }
>from : <T>(obs: InteropObservable<T>) => { subscribe(next: (val: T) => void): void; }
>new MyObservable(42) : MyObservable<number>
>MyObservable : typeof MyObservable
>42 : 42

View File

@@ -0,0 +1,32 @@
// @target: ES6
// @declaration: true
declare global {
interface SymbolConstructor {
readonly obs: symbol
}
}
const observable: typeof Symbol.obs = Symbol.obs
export class MyObservable<T> {
constructor(private _val: T) {}
subscribe(next: (val: T) => void) {
next(this._val)
}
[observable]() {
return this
}
}
type InteropObservable<T> = {
[Symbol.obs]: () => { subscribe(next: (val: T) => void): void }
}
function from<T>(obs: InteropObservable<T>) {
return obs[Symbol.obs]()
}
from(new MyObservable(42))