test(builtin-hotkey): increase designer's code branch coverage to 84.18%

This commit is contained in:
LeoYuan 袁力皓 2022-07-08 19:13:26 +08:00 committed by 林熠
parent 969a130b37
commit 37654cd040
3 changed files with 104 additions and 15 deletions

View File

@ -4,7 +4,7 @@ import { focusing } from './focusing';
import { insertChildren, TransformStage } from '../document';
import clipboard from './clipboard';
function isInLiveEditing() {
export function isInLiveEditing() {
if (globalContext.has(Editor)) {
return Boolean(
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 {
if (next) {
if (!head) {
@ -42,6 +43,7 @@ function getNextForSelect(next: any, head?: any, parent?: any): any {
return null;
}
/* istanbul ignore next */
function getPrevForSelect(prev: any, head?: any, parent?: any): any {
if (prev) {
let ret;
@ -150,6 +152,7 @@ hotkey.bind(['command+v', 'ctrl+v'], (e) => {
if (isFormEvent(e) || !designer || !doc) {
return;
}
/* istanbul ignore next */
clipboard.waitPasteData(e, ({ componentsTree }) => {
if (componentsTree) {
const { target, index } = designer.getSuitableInsertion(componentsTree) || {};
@ -179,7 +182,7 @@ hotkey.bind(['command+z', 'ctrl+z'], (e) => {
e.preventDefault();
const selection = focusing.focusDesigner?.currentSelection;
const curSelected = Array.from(selection?.selected || []);
const curSelected = Array.from(selection?.selected);
his.back();
selection?.selectAll(curSelected);
});
@ -193,7 +196,7 @@ hotkey.bind(['command+y', 'ctrl+y', 'command+shift+z'], (e) => {
}
e.preventDefault();
const selection = focusing.focusDesigner?.currentSelection;
const curSelected = Array.from(selection?.selected || []);
const curSelected = Array.from(selection?.selected);
his.forward();
selection?.selectAll(curSelected);
});

View File

@ -4,10 +4,21 @@ import { Designer } from '../../src/designer/designer';
import formSchema from '../fixtures/schema/form';
import '../../src/designer/builtin-hotkey';
import { fireEvent } from '@testing-library/react';
import { isInLiveEditing } from '../../src/designer/builtin-hotkey';
const editor = new Editor();
let designer: Designer;
describe('error scenarios', () => {
it('edtior not registered', () => {
expect(isInLiveEditing()).toBeUndefined();
});
});
// keyCode 对应表https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode
// hotkey 模块底层用的 keyCode所以还不能用 key / code 测试
describe('快捷键测试', () => {
beforeAll(() => {
globalContext.register(editor, Editor);
});
@ -20,9 +31,6 @@ afterEach(() => {
designer = null;
});
// keyCode 对应表https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode
// hotkey 模块底层用的 keyCode所以还不能用 key / code 测试
describe('快捷键测试', () => {
it('right', () => {
const firstCardNode = designer.currentDocument?.getNode('node_k1ow3cbj')!;
firstCardNode.select();
@ -242,8 +250,10 @@ describe('快捷键测试', () => {
fireEvent.keyDown(document, { keyCode: 46 });
expect(designer.currentDocument?.selection.selected[0]).toBe('page');
});
it('isFormEvent: true', () => {
const inputDOMNode = document.createElement('INPUT');
document.body.appendChild(inputDOMNode);
designer.currentDocument?.selection.select('page');
// nothing happened
@ -289,5 +299,68 @@ describe('快捷键测试', () => {
fireEvent.keyDown(inputDOMNode, { keyCode: 46 });
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 });
});
});
});

View File

@ -128,7 +128,7 @@ it('isRowContainer', () => {
.fn(() => {
return {
getPropertyValue: (pName) => {
return pName === 'display' ? 'flex' : 'row';
return pName === 'display' ? 'flex' : '';
},
};
})
@ -138,9 +138,17 @@ it('isRowContainer', () => {
return pName === 'display' ? 'flex' : 'column';
},
};
})
.mockImplementationOnce(() => {
return {
getPropertyValue: (pName) => {
return pName === 'display' ? 'grid' : 'column';
},
};
});
expect(isRowContainer(getMockElement('div'))).toBeFalsy();
expect(isRowContainer(getMockElement('div'))).toBeTruthy();
expect(isRowContainer(getMockElement('div'))).toBeTruthy();
});
it('isChildInline', () => {
@ -179,6 +187,10 @@ it('isVerticalContainer', () => {
it('isVertical', () => {
expect(isVertical({ elements: [] })).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
.fn(() => {
return {
@ -193,4 +205,5 @@ it('isVertical', () => {
it('getWindow', () => {
const mockElem = getMockElement('div');
expect(getWindow(mockElem)).toBe(window);
expect(getWindow(document)).toBe(window);
});