mirror of
https://github.com/alibaba/lowcode-engine.git
synced 2025-12-17 07:13:01 +00:00
137 lines
4.1 KiB
TypeScript
137 lines
4.1 KiB
TypeScript
import '../fixtures/window';
|
|
import { Editor, globalContext } from '@alilc/lowcode-editor-core';
|
|
import { Project } from '../../src/project/project';
|
|
import { DocumentModel } from '../../src/document/document-model';
|
|
import { ScrollTarget, Scroller } from '../../src/designer/scroller';
|
|
import { Designer } from '../../src/designer/designer';
|
|
import {
|
|
Dragon,
|
|
} from '../../src/designer/dragon';
|
|
import formSchema from '../fixtures/schema/form';
|
|
import { shellModelFactory } from '../../../engine/src/modules/shell-model-factory';
|
|
|
|
describe('Scroller 测试', () => {
|
|
let editor: Editor;
|
|
let designer: Designer;
|
|
let project: Project;
|
|
let doc: DocumentModel;
|
|
let dragon: Dragon;
|
|
|
|
beforeAll(() => {
|
|
editor = new Editor();
|
|
!globalContext.has(Editor) && globalContext.register(editor, Editor);
|
|
});
|
|
|
|
beforeEach(() => {
|
|
designer = new Designer({ editor, shellModelFactory });
|
|
project = designer.project;
|
|
doc = project.createDocument(formSchema);
|
|
dragon = new Dragon(designer);
|
|
});
|
|
|
|
afterEach(() => {
|
|
project.unload();
|
|
project.mountSimulator(undefined);
|
|
designer.purge();
|
|
designer = null;
|
|
project = null;
|
|
dragon = null;
|
|
});
|
|
|
|
function getMockWindow() {
|
|
let scrollX = 0;
|
|
let scrollY = 0;
|
|
const mockWindow = {
|
|
scrollTo(x, y) {
|
|
if (typeof x === 'number') {
|
|
scrollX = x;
|
|
scrollY = y;
|
|
} else {
|
|
scrollX = x.left;
|
|
scrollY = x.top;
|
|
}
|
|
},
|
|
get scrollX() { return scrollX; },
|
|
get scrollY() { return scrollY; },
|
|
scrollHeight: 1000,
|
|
scrollWidth: 500,
|
|
document: {},
|
|
nodeType: Node.ELEMENT_NODE,
|
|
};
|
|
return mockWindow;
|
|
}
|
|
|
|
describe('ScrollTarget 测试', () => {
|
|
it('constructor', () => {
|
|
const win = getMockWindow();
|
|
const target = new ScrollTarget(win);
|
|
expect(target.scrollWidth).toBe(500);
|
|
expect(target.scrollHeight).toBe(1000);
|
|
target.scrollToXY(50, 50);
|
|
expect(target.left).toBe(50);
|
|
expect(target.top).toBe(50);
|
|
|
|
target.scrollTo({ left: 100, top: 100 });
|
|
expect(target.left).toBe(100);
|
|
expect(target.top).toBe(100);
|
|
});
|
|
});
|
|
|
|
function mockRAF() {
|
|
let rafCount = 0;
|
|
window.requestAnimationFrame = (fn) => {
|
|
if (rafCount++ < 2) {
|
|
fn();
|
|
} else {
|
|
window.requestAnimationFrame = () => {};
|
|
}
|
|
};
|
|
}
|
|
describe('Scroller 测试', () => {
|
|
it('scrollTarget: ScrollTarget', () => {
|
|
const win = getMockWindow();
|
|
const scrollTarget = new ScrollTarget(win);
|
|
const scroller = new Scroller({ scrollTarget, bounds: { width: 50, height: 50, top: 50, bottom: 50, left: 50, right: 50 } });
|
|
mockRAF();
|
|
scroller.scrollTo({ left: 50, top: 50 });
|
|
|
|
mockRAF();
|
|
scroller.scrolling({ globalX: 100, globalY: 100 });
|
|
});
|
|
|
|
it('scrollTarget: ScrollTarget, same left / top', () => {
|
|
const win = getMockWindow();
|
|
const scrollTarget = new ScrollTarget(win);
|
|
const scroller = new Scroller({ scrollTarget, bounds: { width: 50, height: 50, top: 50, bottom: 50, left: 50, right: 50 } });
|
|
mockRAF();
|
|
scrollTarget.scrollTo({ left: 50, top: 50 });
|
|
scroller.scrollTo({ left: 50, top: 50 });
|
|
|
|
mockRAF();
|
|
scroller.scrolling({ globalX: 100, globalY: 100 });
|
|
});
|
|
|
|
it('scrollTarget: Element', () => {
|
|
const win = getMockWindow();
|
|
// const scrollTarget = new ScrollTarget(win);
|
|
const scroller = new Scroller({ scrollTarget: win, bounds: { width: 50, height: 50, top: 50, bottom: 50, left: 50, right: 50 } });
|
|
mockRAF();
|
|
scroller.scrollTo({ left: 50, top: 50 });
|
|
|
|
mockRAF();
|
|
scroller.scrolling({ globalX: 100, globalY: 100 });
|
|
});
|
|
|
|
it('scrollTarget: null', () => {
|
|
const win = getMockWindow();
|
|
// const scrollTarget = new ScrollTarget(win);
|
|
const scroller = new Scroller({ scrollTarget: null, bounds: { width: 50, height: 50, top: 50, bottom: 50, left: 50, right: 50 } });
|
|
mockRAF();
|
|
scroller.scrollTo({ left: 50, top: 50 });
|
|
|
|
mockRAF();
|
|
scroller.scrolling({ globalX: 100, globalY: 100 });
|
|
});
|
|
});
|
|
});
|