UNPKG

@mcdevsl/mc-superset-ui

Version:
69 lines (55 loc) 1.67 kB
import { ExtensibleFunction } from '@superset-ui/core/src'; describe('ExtensibleFunction', () => { interface Func1 { (): number; } class Func1 extends ExtensibleFunction { constructor(x: unknown) { super(() => x); // closure } } interface Func2 { (): number; } class Func2 extends ExtensibleFunction { x: unknown; constructor(x: unknown) { super(() => this.x); // arrow function, refer to its own field this.x = x; } // eslint-disable-next-line class-methods-use-this hi() { return 'hi'; } } class Func3 extends ExtensibleFunction { x: unknown; constructor(x: unknown) { // @ts-ignore super(function customName() { // @ts-ignore return customName.x as unknown; }); // named function this.x = x; } } it('its subclass is an instance of Function', () => { expect(Func1).toBeInstanceOf(Function); expect(Func2).toBeInstanceOf(Function); expect(Func3).toBeInstanceOf(Function); }); const func1 = new Func1(100); const func2 = new Func2(100); const func3 = new Func3(100); it('an instance of its subclass is executable like regular function', () => { expect(func1()).toEqual(100); expect(func2()).toEqual(100); }); it('its subclass behaves like regular class with its own fields and functions', () => { expect(func2.x).toEqual(100); expect(func2.hi()).toEqual('hi'); }); it('its subclass can set name by passing named function to its constructor', () => { expect(func3.name).toEqual('customName'); }); });