diff --git a/packages/renderer-core/src/adapter/index.ts b/packages/renderer-core/src/adapter/index.ts index b4e0eedec..661b3c17f 100644 --- a/packages/renderer-core/src/adapter/index.ts +++ b/packages/renderer-core/src/adapter/index.ts @@ -25,19 +25,19 @@ class Adapter { setState() {} forceUpdate() {} render() {} - state: {}; - props: {}; - refs: {}; - context: {}; + state: Record; + props: Record; + refs: Record; + context: Record; }; const PureComponent: IGeneralConstructor = class { setState() {} forceUpdate() {} render() {} - state: {}; - props: {}; - refs: {}; - context: {}; + state: Record; + props: Record; + refs: Record; + context: Record; }; const createElement = () => {}; const createContext = () => {}; @@ -64,10 +64,10 @@ class Adapter { return false; } - return this.builtinModules.every(m => { - const flag = !!this.runtime[m]; + return this.builtinModules.every((m) => { + const flag = !!runtime[m]; if (!flag) { - throw new Error(`runtime is inValid, module '${m}' is not existed`); + throw new Error(`runtime is invalid, module '${m}' does not exist`); } return flag; }); diff --git a/packages/renderer-core/tests/adapter/adapter.test.ts b/packages/renderer-core/tests/adapter/adapter.test.ts new file mode 100644 index 000000000..77e12c587 --- /dev/null +++ b/packages/renderer-core/tests/adapter/adapter.test.ts @@ -0,0 +1,107 @@ +// @ts-nocheck +import adapter, { Env } from '../../src/adapter'; +import { IRuntime, IRendererModules, IGeneralConstructor } from '../../src/types'; + + + +describe('test src/adapter ', () => { + + it('adapter basic use works', () => { + expect(adapter).toBeTruthy(); + + }); + + it('isValidRuntime works', () => { + expect(adapter.isValidRuntime([] as any)).toBeFalsy(); + + expect(adapter.isValidRuntime('' as any)).toBeFalsy(); + + let invalidRuntime = {}; + expect(() => adapter.isValidRuntime(invalidRuntime as any)).toThrowError(/Component/); + invalidRuntime = { + Component: {}, + }; + expect(() => adapter.isValidRuntime(invalidRuntime as any)).toThrowError(/PureComponent/); + invalidRuntime = { + Component: {}, + PureComponent: {}, + }; + expect(() => adapter.isValidRuntime(invalidRuntime as any)).toThrowError(/createElement/); + invalidRuntime = { + Component: {}, + PureComponent: {}, + createElement: {}, + }; + expect(() => adapter.isValidRuntime(invalidRuntime as any)).toThrowError(/createContext/); + invalidRuntime = { + Component: {}, + PureComponent: {}, + createElement: {}, + createContext: {}, + }; + expect(() => adapter.isValidRuntime(invalidRuntime as any)).toThrowError(/forwardRef/); + invalidRuntime = { + Component: {}, + PureComponent: {}, + createElement: {}, + createContext: {}, + forwardRef: {}, + }; + expect(() => adapter.isValidRuntime(invalidRuntime as any)).toThrowError(/findDOMNode/); + const validRuntime = { + Component: {}, + PureComponent: {}, + createElement: {}, + createContext: {}, + forwardRef: {}, + findDOMNode: {}, + }; + + expect(adapter.isValidRuntime(validRuntime as any)).toBeTruthy(); + }); + + it('setRuntime/getRuntime works', () => { + const validRuntime = { + Component: {}, + PureComponent: {}, + createElement: {}, + createContext: {}, + forwardRef: {}, + findDOMNode: {}, + }; + + adapter.setRuntime(validRuntime as any); + expect(adapter.getRuntime()).toBe(validRuntime); + + // won`t work when invalid runtime paased in. + adapter.setRuntime([] as any); + expect(adapter.getRuntime()).toBe(validRuntime); + + + }); + + it('setEnv/.env/isReact/isRax works', () => { + adapter.setEnv(Env.React); + expect(adapter.env).toBe(Env.React); + expect(adapter.isReact()).toBeTruthy(); + expect(adapter.isRax()).toBeFalsy(); + adapter.setEnv(Env.Rax); + expect(adapter.env).toBe(Env.Rax); + expect(adapter.isRax()).toBeTruthy(); + expect(adapter.isReact()).toBeFalsy(); + }); + + it('setRenderers/getRenderers works', () => { + const mockRenderers = { BaseRenderer: {} as IBaseRenderComponent}; + adapter.setRenderers(mockRenderers); + expect(adapter.getRenderers()).toBe(mockRenderers); + adapter.setRenderers(undefined); + expect(adapter.getRenderers()).toStrictEqual({}); + }); + + it('setConfigProvider/getConfigProvider works', () => { + const mockConfigProvider = { a: 111 }; + adapter.setConfigProvider(mockConfigProvider); + expect(adapter.getConfigProvider()).toBe(mockConfigProvider); + }); +}); \ No newline at end of file