mirror of
https://github.com/alibaba/lowcode-engine.git
synced 2026-01-16 11:54:27 +00:00
190 lines
6.3 KiB
TypeScript
190 lines
6.3 KiB
TypeScript
import '../fixtures/window';
|
|
import { Editor, globalContext } from '@ali/lowcode-editor-core';
|
|
import { editor } from '../../src/reducers';
|
|
import { Viewport } from '../../src/viewport';
|
|
import domready from 'domready';
|
|
|
|
// const editor = globalContext.get(Editor);
|
|
|
|
jest.mock('domready', () => {
|
|
return (fn) => fn();
|
|
});
|
|
|
|
// 貌似 jsdom 没有响应 fullscreen 变更事件,先这么 mock 吧
|
|
const mockSetFullscreen = flag => { document.fullscreen = flag; };
|
|
|
|
describe('viewport 测试', () => {
|
|
mockSetFullscreen(true);
|
|
|
|
it('getDevice / setDevice / getViewport / onDeviceChange / onViewportChange', async () => {
|
|
const viewport = new Viewport();
|
|
const mockDeviceChange = jest.fn();
|
|
const mockViewportChange = jest.fn();
|
|
const offDevice = viewport.onDeviceChange(mockDeviceChange);
|
|
const offViewport = viewport.onViewportChange(mockViewportChange);
|
|
expect(viewport.getDevice()).toBe('pc');
|
|
expect(viewport.getViewport()).toBe('design-pc');
|
|
editor.set('currentDocument', { simulator: { set() {} } });
|
|
|
|
await viewport.setDevice('mobile');
|
|
expect(viewport.getDevice()).toBe('mobile');
|
|
expect(viewport.getViewport()).toBe('design-mobile');
|
|
expect(mockDeviceChange).toHaveBeenCalledTimes(1);
|
|
expect(mockViewportChange).toHaveBeenCalledTimes(1);
|
|
|
|
offDevice();
|
|
offViewport();
|
|
await viewport.setDevice('pc');
|
|
expect(mockDeviceChange).toHaveBeenCalledTimes(1);
|
|
expect(mockViewportChange).toHaveBeenCalledTimes(1);
|
|
});
|
|
|
|
it('setPreview / isPreview / togglePreivew / getViewport / onViewportChange', () => {
|
|
const viewport = new Viewport();
|
|
const mockViewportChange = jest.fn();
|
|
const mockPreivewChange = jest.fn();
|
|
const off = viewport.onViewportChange(mockViewportChange);
|
|
const offPreview = viewport.onPreview(mockPreivewChange);
|
|
viewport.setPreview(true);
|
|
expect(viewport.isPreview).toBeTruthy;
|
|
expect(viewport.getViewport()).toBe('preview-pc');
|
|
expect(mockViewportChange).toHaveBeenCalledTimes(1);
|
|
expect(mockPreivewChange).toHaveBeenCalledTimes(1);
|
|
viewport.setPreview(false);
|
|
expect(viewport.isPreview).toBeFalsy;
|
|
expect(viewport.getViewport()).toBe('design-pc');
|
|
expect(mockViewportChange).toHaveBeenCalledTimes(2);
|
|
expect(mockPreivewChange).toHaveBeenCalledTimes(2);
|
|
viewport.togglePreview();
|
|
expect(viewport.getViewport()).toBe('preview-pc');
|
|
expect(mockViewportChange).toHaveBeenCalledTimes(3);
|
|
expect(mockPreivewChange).toHaveBeenCalledTimes(3);
|
|
viewport.togglePreview();
|
|
expect(viewport.getViewport()).toBe('design-pc');
|
|
expect(mockViewportChange).toHaveBeenCalledTimes(4);
|
|
expect(mockPreivewChange).toHaveBeenCalledTimes(4);
|
|
|
|
off();
|
|
offPreview();
|
|
viewport.togglePreview();
|
|
expect(mockViewportChange).toHaveBeenCalledTimes(4);
|
|
expect(mockPreivewChange).toHaveBeenCalledTimes(4);
|
|
});
|
|
|
|
it('setFocusTarget / returnFocus / setFocus / isFocus / onFocusChange', () => {
|
|
const viewport = new Viewport();
|
|
const mockFocusChange = jest.fn();
|
|
const off = viewport.onFocusChange(mockFocusChange);
|
|
viewport.setFocusTarget(document.createElement('div'));
|
|
viewport.returnFocus();
|
|
|
|
viewport.setFocus(true);
|
|
expect(viewport.isFocus()).toBeTruthy();
|
|
expect(mockFocusChange).toHaveBeenCalledTimes(1);
|
|
expect(mockFocusChange).toHaveBeenLastCalledWith(true);
|
|
viewport.setFocus(false);
|
|
expect(viewport.isFocus()).toBeFalsy();
|
|
expect(mockFocusChange).toHaveBeenCalledTimes(2);
|
|
expect(mockFocusChange).toHaveBeenLastCalledWith(false);
|
|
|
|
off();
|
|
viewport.setFocus(false);
|
|
expect(mockFocusChange).toHaveBeenCalledTimes(2);
|
|
});
|
|
|
|
it('isFullscreen / toggleFullscreen / setFullscreen / onFullscreenChange', () => {
|
|
const viewport = new Viewport();
|
|
const mockFullscreenChange = jest.fn();
|
|
const off = viewport.onFullscreenChange(mockFullscreenChange);
|
|
|
|
mockSetFullscreen(false);
|
|
viewport.setFullscreen(true);
|
|
mockSetFullscreen(true);
|
|
expect(viewport.isFullscreen()).toBeTruthy;
|
|
// expect(mockFullscreenChange).toHaveBeenCalledTimes(1);
|
|
viewport.setFullscreen(true);
|
|
// expect(mockFullscreenChange).toHaveBeenCalledTimes(1);
|
|
|
|
mockSetFullscreen(true);
|
|
viewport.setFullscreen(false);
|
|
mockSetFullscreen(false);
|
|
expect(viewport.isFullscreen()).toBeFalsy;
|
|
// expect(mockFullscreenChange).toHaveBeenCalledTimes(2);
|
|
viewport.setFullscreen(false);
|
|
// expect(mockFullscreenChange).toHaveBeenCalledTimes(2);
|
|
|
|
mockSetFullscreen(true);
|
|
viewport.toggleFullscreen();
|
|
mockSetFullscreen(false);
|
|
// expect(mockFullscreenChange).toHaveBeenCalledTimes(3);
|
|
viewport.toggleFullscreen();
|
|
// expect(mockFullscreenChange).toHaveBeenCalledTimes(4);
|
|
|
|
off();
|
|
viewport.toggleFullscreen();
|
|
// expect(mockFullscreenChange).toHaveBeenCalledTimes(4);
|
|
});
|
|
|
|
it('setWithShell', () => {
|
|
const viewport = new Viewport();
|
|
viewport.setWithShell();
|
|
});
|
|
|
|
it('onSlateFixedChange', () => {
|
|
const viewport = new Viewport();
|
|
const mockSlateFixedChange = jest.fn();
|
|
const off = viewport.onSlateFixedChange(mockSlateFixedChange);
|
|
|
|
viewport.emitter.emit('slatefixed');
|
|
expect(mockSlateFixedChange).toHaveBeenCalledTimes(1);
|
|
off();
|
|
viewport.emitter.emit('slatefixed');
|
|
expect(mockSlateFixedChange).toHaveBeenCalledTimes(1);
|
|
});
|
|
|
|
it('setGlobalCSS', () => {
|
|
const viewport = new Viewport();
|
|
viewport.setGlobalCSS([{
|
|
media: '*',
|
|
type: 'URL',
|
|
content: '//path/to.css',
|
|
}, {
|
|
media: 'ALL',
|
|
type: 'text',
|
|
content: 'body {font-size: 50px;}',
|
|
}, {
|
|
media: '',
|
|
type: 'text',
|
|
content: 'body {font-size: 50px;}',
|
|
}, {
|
|
media: 'mobile',
|
|
type: 'text',
|
|
content: 'body {font-size: 50px;}',
|
|
}]);
|
|
|
|
viewport.cssResourceSet[0].apply();
|
|
viewport.cssResourceSet[0].init();
|
|
viewport.cssResourceSet[1].apply();
|
|
viewport.cssResourceSet[1].apply();
|
|
viewport.cssResourceSet[1].unmount();
|
|
|
|
viewport.setGlobalCSS([{
|
|
media: '*',
|
|
type: 'URL',
|
|
content: '//path/to.css',
|
|
}, {
|
|
media: 'ALL',
|
|
type: 'text',
|
|
content: 'body {font-size: 50px;}',
|
|
}, {
|
|
media: '',
|
|
type: 'text',
|
|
content: 'body {font-size: 50px;}',
|
|
}, {
|
|
media: 'mobile',
|
|
type: 'text',
|
|
content: 'body {font-size: 50px;}',
|
|
}]);
|
|
});
|
|
});
|