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 { 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);
}); });

View File

@ -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 });
});
}); });
}); });

View File

@ -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);
}); });