mirror of
https://github.com/alibaba/lowcode-engine.git
synced 2025-12-12 11:20:11 +00:00
test(builtin-hotkey): increase designer's code branch coverage to 84.18%
This commit is contained in:
parent
969a130b37
commit
37654cd040
@ -4,7 +4,7 @@ import { focusing } from './focusing';
|
|||||||
import { insertChildren, TransformStage } from '../document';
|
import { insertChildren, TransformStage } from '../document';
|
||||||
import clipboard from './clipboard';
|
import clipboard from './clipboard';
|
||||||
|
|
||||||
function isInLiveEditing() {
|
export function isInLiveEditing() {
|
||||||
if (globalContext.has(Editor)) {
|
if (globalContext.has(Editor)) {
|
||||||
return Boolean(
|
return Boolean(
|
||||||
globalContext.get(Editor).get('designer')?.project?.simulator?.liveEditing?.editing,
|
globalContext.get(Editor).get('designer')?.project?.simulator?.liveEditing?.editing,
|
||||||
@ -12,6 +12,7 @@ function isInLiveEditing() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* istanbul ignore next */
|
||||||
function getNextForSelect(next: any, head?: any, parent?: any): any {
|
function getNextForSelect(next: any, head?: any, parent?: any): any {
|
||||||
if (next) {
|
if (next) {
|
||||||
if (!head) {
|
if (!head) {
|
||||||
@ -42,6 +43,7 @@ function getNextForSelect(next: any, head?: any, parent?: any): any {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* istanbul ignore next */
|
||||||
function getPrevForSelect(prev: any, head?: any, parent?: any): any {
|
function getPrevForSelect(prev: any, head?: any, parent?: any): any {
|
||||||
if (prev) {
|
if (prev) {
|
||||||
let ret;
|
let ret;
|
||||||
@ -150,6 +152,7 @@ hotkey.bind(['command+v', 'ctrl+v'], (e) => {
|
|||||||
if (isFormEvent(e) || !designer || !doc) {
|
if (isFormEvent(e) || !designer || !doc) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
/* istanbul ignore next */
|
||||||
clipboard.waitPasteData(e, ({ componentsTree }) => {
|
clipboard.waitPasteData(e, ({ componentsTree }) => {
|
||||||
if (componentsTree) {
|
if (componentsTree) {
|
||||||
const { target, index } = designer.getSuitableInsertion(componentsTree) || {};
|
const { target, index } = designer.getSuitableInsertion(componentsTree) || {};
|
||||||
@ -179,7 +182,7 @@ hotkey.bind(['command+z', 'ctrl+z'], (e) => {
|
|||||||
|
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
const selection = focusing.focusDesigner?.currentSelection;
|
const selection = focusing.focusDesigner?.currentSelection;
|
||||||
const curSelected = Array.from(selection?.selected || []);
|
const curSelected = Array.from(selection?.selected);
|
||||||
his.back();
|
his.back();
|
||||||
selection?.selectAll(curSelected);
|
selection?.selectAll(curSelected);
|
||||||
});
|
});
|
||||||
@ -193,7 +196,7 @@ hotkey.bind(['command+y', 'ctrl+y', 'command+shift+z'], (e) => {
|
|||||||
}
|
}
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
const selection = focusing.focusDesigner?.currentSelection;
|
const selection = focusing.focusDesigner?.currentSelection;
|
||||||
const curSelected = Array.from(selection?.selected || []);
|
const curSelected = Array.from(selection?.selected);
|
||||||
his.forward();
|
his.forward();
|
||||||
selection?.selectAll(curSelected);
|
selection?.selectAll(curSelected);
|
||||||
});
|
});
|
||||||
|
|||||||
@ -4,25 +4,33 @@ import { Designer } from '../../src/designer/designer';
|
|||||||
import formSchema from '../fixtures/schema/form';
|
import formSchema from '../fixtures/schema/form';
|
||||||
import '../../src/designer/builtin-hotkey';
|
import '../../src/designer/builtin-hotkey';
|
||||||
import { fireEvent } from '@testing-library/react';
|
import { fireEvent } from '@testing-library/react';
|
||||||
|
import { isInLiveEditing } from '../../src/designer/builtin-hotkey';
|
||||||
|
|
||||||
const editor = new Editor();
|
const editor = new Editor();
|
||||||
|
|
||||||
let designer: Designer;
|
let designer: Designer;
|
||||||
beforeAll(() => {
|
|
||||||
globalContext.register(editor, Editor);
|
describe('error scenarios', () => {
|
||||||
});
|
it('edtior not registered', () => {
|
||||||
beforeEach(() => {
|
expect(isInLiveEditing()).toBeUndefined();
|
||||||
designer = new Designer({ editor });
|
});
|
||||||
editor.set('designer', designer);
|
|
||||||
designer.project.open(formSchema);
|
|
||||||
});
|
|
||||||
afterEach(() => {
|
|
||||||
designer = null;
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// keyCode 对应表:https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode
|
// keyCode 对应表:https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode
|
||||||
// hotkey 模块底层用的 keyCode,所以还不能用 key / code 测试
|
// hotkey 模块底层用的 keyCode,所以还不能用 key / code 测试
|
||||||
describe('快捷键测试', () => {
|
describe('快捷键测试', () => {
|
||||||
|
beforeAll(() => {
|
||||||
|
globalContext.register(editor, Editor);
|
||||||
|
});
|
||||||
|
beforeEach(() => {
|
||||||
|
designer = new Designer({ editor });
|
||||||
|
editor.set('designer', designer);
|
||||||
|
designer.project.open(formSchema);
|
||||||
|
});
|
||||||
|
afterEach(() => {
|
||||||
|
designer = null;
|
||||||
|
});
|
||||||
|
|
||||||
it('right', () => {
|
it('right', () => {
|
||||||
const firstCardNode = designer.currentDocument?.getNode('node_k1ow3cbj')!;
|
const firstCardNode = designer.currentDocument?.getNode('node_k1ow3cbj')!;
|
||||||
firstCardNode.select();
|
firstCardNode.select();
|
||||||
@ -242,8 +250,10 @@ describe('快捷键测试', () => {
|
|||||||
fireEvent.keyDown(document, { keyCode: 46 });
|
fireEvent.keyDown(document, { keyCode: 46 });
|
||||||
expect(designer.currentDocument?.selection.selected[0]).toBe('page');
|
expect(designer.currentDocument?.selection.selected[0]).toBe('page');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('isFormEvent: true', () => {
|
it('isFormEvent: true', () => {
|
||||||
const inputDOMNode = document.createElement('INPUT');
|
const inputDOMNode = document.createElement('INPUT');
|
||||||
|
document.body.appendChild(inputDOMNode);
|
||||||
designer.currentDocument?.selection.select('page');
|
designer.currentDocument?.selection.select('page');
|
||||||
// nothing happened
|
// nothing happened
|
||||||
|
|
||||||
@ -289,5 +299,68 @@ describe('快捷键测试', () => {
|
|||||||
fireEvent.keyDown(inputDOMNode, { keyCode: 46 });
|
fireEvent.keyDown(inputDOMNode, { keyCode: 46 });
|
||||||
expect(designer.currentDocument?.selection.selected[0]).toBe('page');
|
expect(designer.currentDocument?.selection.selected[0]).toBe('page');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('doc is null', () => {
|
||||||
|
designer.currentDocument?.selection.select('page');
|
||||||
|
designer.project.documents = [];
|
||||||
|
|
||||||
|
fireEvent.keyDown(document, { keyCode: 39 });
|
||||||
|
|
||||||
|
fireEvent.keyDown(document, { keyCode: 37 });
|
||||||
|
|
||||||
|
fireEvent.keyDown(document, { keyCode: 40 });
|
||||||
|
|
||||||
|
fireEvent.keyDown(document, { keyCode: 38 });
|
||||||
|
|
||||||
|
fireEvent.keyDown(document, { keyCode: 39, altKey: true });
|
||||||
|
|
||||||
|
fireEvent.keyDown(document, { keyCode: 37, altKey: true });
|
||||||
|
|
||||||
|
fireEvent.keyDown(document, { keyCode: 40, altKey: true });
|
||||||
|
|
||||||
|
fireEvent.keyDown(document, { keyCode: 38, altKey: true });
|
||||||
|
|
||||||
|
fireEvent.keyDown(document, { keyCode: 90, metaKey: true });
|
||||||
|
|
||||||
|
fireEvent.keyDown(document, { keyCode: 89, metaKey: true });
|
||||||
|
|
||||||
|
fireEvent.keyDown(document, { keyCode: 67, metaKey: true });
|
||||||
|
|
||||||
|
fireEvent.keyDown(document, { keyCode: 86, metaKey: true });
|
||||||
|
|
||||||
|
fireEvent.keyDown(document, { keyCode: 27 });
|
||||||
|
|
||||||
|
fireEvent.keyDown(document, { keyCode: 46 });
|
||||||
|
});
|
||||||
|
|
||||||
|
it('selected is []', () => {
|
||||||
|
fireEvent.keyDown(document, { keyCode: 39 });
|
||||||
|
|
||||||
|
fireEvent.keyDown(document, { keyCode: 37 });
|
||||||
|
|
||||||
|
fireEvent.keyDown(document, { keyCode: 40 });
|
||||||
|
|
||||||
|
fireEvent.keyDown(document, { keyCode: 38 });
|
||||||
|
|
||||||
|
fireEvent.keyDown(document, { keyCode: 39, altKey: true });
|
||||||
|
|
||||||
|
fireEvent.keyDown(document, { keyCode: 37, altKey: true });
|
||||||
|
|
||||||
|
fireEvent.keyDown(document, { keyCode: 40, altKey: true });
|
||||||
|
|
||||||
|
fireEvent.keyDown(document, { keyCode: 38, altKey: true });
|
||||||
|
|
||||||
|
fireEvent.keyDown(document, { keyCode: 90, metaKey: true });
|
||||||
|
|
||||||
|
fireEvent.keyDown(document, { keyCode: 89, metaKey: true });
|
||||||
|
|
||||||
|
fireEvent.keyDown(document, { keyCode: 67, metaKey: true });
|
||||||
|
|
||||||
|
fireEvent.keyDown(document, { keyCode: 86, metaKey: true });
|
||||||
|
|
||||||
|
fireEvent.keyDown(document, { keyCode: 27 });
|
||||||
|
|
||||||
|
fireEvent.keyDown(document, { keyCode: 46 });
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -128,7 +128,7 @@ it('isRowContainer', () => {
|
|||||||
.fn(() => {
|
.fn(() => {
|
||||||
return {
|
return {
|
||||||
getPropertyValue: (pName) => {
|
getPropertyValue: (pName) => {
|
||||||
return pName === 'display' ? 'flex' : 'row';
|
return pName === 'display' ? 'flex' : '';
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
@ -138,9 +138,17 @@ it('isRowContainer', () => {
|
|||||||
return pName === 'display' ? 'flex' : 'column';
|
return pName === 'display' ? 'flex' : 'column';
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
})
|
||||||
|
.mockImplementationOnce(() => {
|
||||||
|
return {
|
||||||
|
getPropertyValue: (pName) => {
|
||||||
|
return pName === 'display' ? 'grid' : 'column';
|
||||||
|
},
|
||||||
|
};
|
||||||
});
|
});
|
||||||
expect(isRowContainer(getMockElement('div'))).toBeFalsy();
|
expect(isRowContainer(getMockElement('div'))).toBeFalsy();
|
||||||
expect(isRowContainer(getMockElement('div'))).toBeTruthy();
|
expect(isRowContainer(getMockElement('div'))).toBeTruthy();
|
||||||
|
expect(isRowContainer(getMockElement('div'))).toBeTruthy();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('isChildInline', () => {
|
it('isChildInline', () => {
|
||||||
@ -179,6 +187,10 @@ it('isVerticalContainer', () => {
|
|||||||
it('isVertical', () => {
|
it('isVertical', () => {
|
||||||
expect(isVertical({ elements: [] })).toBeFalsy();
|
expect(isVertical({ elements: [] })).toBeFalsy();
|
||||||
expect(isVertical({ elements: [getMockElement('div')] })).toBeFalsy();
|
expect(isVertical({ elements: [getMockElement('div')] })).toBeFalsy();
|
||||||
|
const e1 = getMockElement('div');
|
||||||
|
const e2 = getMockElement('div');
|
||||||
|
e2.appendChild(e1);
|
||||||
|
expect(isVertical({ elements: [e1] })).toBeTruthy();
|
||||||
window.getComputedStyle = jest
|
window.getComputedStyle = jest
|
||||||
.fn(() => {
|
.fn(() => {
|
||||||
return {
|
return {
|
||||||
@ -193,4 +205,5 @@ it('isVertical', () => {
|
|||||||
it('getWindow', () => {
|
it('getWindow', () => {
|
||||||
const mockElem = getMockElement('div');
|
const mockElem = getMockElement('div');
|
||||||
expect(getWindow(mockElem)).toBe(window);
|
expect(getWindow(mockElem)).toBe(window);
|
||||||
|
expect(getWindow(document)).toBe(window);
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user